在dm discord.py中等待来自同一作者的消息



当机器人加入时,我有一个设置服务器的功能,但我同时与朋友交谈,它出现了错误,因为我只想让机器人从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?nn(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)

有办法做到这一点吗?

您可以简单地使用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))

您可以为命令添加@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))

最新更新