【问题标题】:wait for message from same author in dm discord.py在 dm discord.py 中等待来自同一作者的消息
【发布时间】:2021-03-29 10:01:17
【问题描述】:

当机器人加入时,我有一个设置服务器的功能,但我正在和我的朋友同时交谈并且它出现错误,因为我只希望机器人从 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)

有什么办法吗?

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:

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

    【讨论】:

    • 可能是,但它在@bot.event 中。它在on_member_join
    • 在你的问题中编辑你的整个代码,以便我看看。
    • 完成了。现在有部分代码从它开始到msg = await...
    【解决方案2】:

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

    【讨论】:

    • 是的。它有效,但只是第二种方式。请删除第一个,以免其他人感到困惑
    • 抱歉打错了,第一种方法现在应该也可以了
    猜你喜欢
    • 2019-07-10
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    相关资源
    最近更新 更多