У меня есть функция для настройки сервера, когда бот присоединяется, но я одновременно разговариваю со своими друзьями, и он получает ошибки, потому что я хочу, чтобы бот только читал сообщения от dm
async def on_guild_join(guild):
print("Bot added to server: " + guild.name)
gid = str(guild.id)
server = Server()
server.name = guild.name
server.discordId = guild.id
server.ownerId = guild.id
server.welcome_message = None
server.lang = "en"
# here goes another tons of values
if guild.id in db['guilds']:
pass
else:
servers_dic = db['guilds']
servers_dic[gid] = server.toJSON()
print(server.toJSON())
db['guilds'] = servers_dic
await guild.owner.send(f"Hi! Thanks for adding me to your server, {guild.name}! To start using me, we'll have to set up a few things. Do you want to do it now or later?\n\n(n/l)")
msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner)
if msg.content.lower() in ['n', 'now']:
server = deencoder(db['guilds'][gid])
if isinstance(server, Server):
print("Class created successfully!")
print(server)
есть ли способ сделать это?
Вы можете добавить декоратор @commands.dm_only(), чтобы команда работала только в канале DM:
import discord
from discord.ext import commands
@bot.command()
@commands.dm_only()
async def something(ctx):
#do something
Или вы можете изменить свою проверку, чтобы проверить, было ли сообщение отправлено в канале DM:
msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner and isinstance(message.channel, discord.DMChannel))
Отредактируйте весь код в своем вопросе, чтобы я мог посмотреть.
Сделано. теперь есть часть кода, с которой он начинается до msg = await...
Вы можете просто использовать функцию isinstance
и проверить наличие discord.DMChannel
def check(message):
return message.author == guild.owner and isinstance(message.channel, discord.DMChannel)
msg = await bot.wait_for('message', check=check)
# or if you still want to use lambda expressions
msg = await bot.wait_for('message', check=lambda message: message.author == guild.owner and isinstance(message.channel, discord.DMChannel))
да Сработало, но только вторым способом. Пожалуйста, удалите первый, чтобы другие не путались
извините, это была опечатка, первый метод также должен работать сейчас
Может быть, но это в
@bot.event
. Это наon_member_join