【问题标题】:Send two private messages and get a input from both in Discord.py在 Discord.py 中发送两条私人消息并从两者中获取输入
【发布时间】:2021-02-23 00:56:31
【问题描述】:

我正在尝试在 python 中制作这个 Discord 机器人,当你发出命令时,它会向两个人发送一条私人消息并尝试获取之后发送的消息

@client.command()
async def dm(ctx, member_1:discord.Member, member_2:discord.Member):
    await member_1.send(f'sup member 1 type something')
    await member_2.send(f'sup member 2 type something')

    def check(m):
            return m.author == ctx.author

    msg1 = await client.wait_for('message', check=check)

    def check_2(m):
            return m.member_2 == discord.Member

    msg2 = await client.wait_for('message', check=check_2)

    print(msg1.content)
    print(msg2.content)

我的问题是,当第二个成员发送消息时,它给了我一个错误'Message' object has no attribute 'member_2'

如果我删除第二个成员,它可以正常工作并获取我的输入并打印出我输入的内容,但是第二个成员输入了一些内容并且它什么也不打印,当第二个成员发送他的消息时,错误就会出现

我应该在第二次检查中加入什么?

【问题讨论】:

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


    【解决方案1】:

    您所要做的就是修复第二个return 语句。

    在check 函数中,m 是函数应该检查的消息。 当然这个m默认不会有member_2属性。

    但真正的问题是:你为什么要检查

    m.member_2 == discord.Member
    

    如果您想检查作者是否是会员(必须是会员),那么您必须输入

    type(m.author) == discord.Member
    

    您想要检查该消息的作者是否为member_2。然后您必须输入与您在第一个检查功能中所做的相同的内容:

    return m.author == member_2
    

    这是固定代码。顺便说一句,我假设 msg_1 是成员 1 发送的消息,而不是 ctx.author。

        def check_1(m):
            return m.author == member_1  # checks if the person who sent it is member_1
    
        msg1 = await client.wait_for('message', check=check_1)
    
        def check_2(m):
            return m.author == member_2  # checks if the person who sent it is member_2
    
        msg2 = await client.wait_for('message', check=check_2)
    

    【讨论】:

    • 真的很感谢你的回答。祝你有美好的一天
    猜你喜欢
    • 2017-08-15
    • 2015-08-13
    • 1970-01-01
    • 2021-12-25
    • 2019-09-19
    • 2020-06-16
    • 1970-01-01
    • 2021-12-14
    • 2022-06-11
    相关资源
    最近更新 更多