我正在尝试制作一个等待用户消息的不和谐机器人,如果提到三个标签,它会给出滴答反应

Posted

技术标签:

【中文标题】我正在尝试制作一个等待用户消息的不和谐机器人,如果提到三个标签,它会给出滴答反应【英文标题】:I am tring to make a discord bot that wait for the user message and if three tags are mentioned it give tick reaction 【发布时间】:2020-12-11 09:45:03 【问题描述】:

当这么多人同时输入时,我的机器人会跳过一些消息

这是我的一些代码

while True:
        m=await bot.wait_for('message',check=lambda message: message.channel==ctx.message.channel and message.author!=bot.user)
        tags =m.mentions
        if len(tags) >= 3:
            await m.add_reaction("✅")
        else:
            await m.add_reaction("❌")```

【问题讨论】:

欢迎来到 SO。请阅读***.com/help/mcve 并编辑您的问题 【参考方案1】:

您可以使用on_message 事件来捕获每条 消息,然后用它做您喜欢的事情。这比等待消息和执行代码要好,因为这样更快。缺点是通道必须是硬编码的或使用全局变量。或者,您可以在函数中重新创建整个命令(虽然我不知道这是否有任何其他含义)。

@bot.event
async def on_message(message):
    if message.channel == bot.get_channel(CHANNEL_ID_HERE_AS_INT):
        tags = message.mentions
        if len(tags) >= 3:
            await message.add_reaction("✅")
        else:
            await message.add_reaction("❌")

【讨论】:

如何在我的代码中使用 on_message ..i hv gievn 我的代码作为答案,请参阅【参考方案2】:

感谢您的回答,但我如何在此处使用 on_message

    await ctx.send( '__**Registrations Open**__ \n<@&711760180848885870>')
    teamlist=[]
    messlist=[]
    while True:
        m=await bot.wait_for('message',check=lambda message: message.channel==ctx.message.channel and message.author!=bot.user)
        tags =m.mentions
        if len(tags) >= 3:
            await m.add_reaction("✅")
        else:
            await m.add_reaction("❌")
            continue
        messlist.append(m)
        if len(messlist)==22:
            break
    for m in messlist:
        role=get(m.author.guild.roles , name="IDP-7pm")
        await m.author.add_roles(role)
        strr=m.content
        n=strr.find("\n")
        strr=strr[:n]
        n=strr.find(":")
        if n==-1:
            n=strr.find("-")
        if n!=-1:
            strr  =strr[n+1:]
        print(strr)
        for s in strr:
            if s.isalpha() or s.isnumeric():
                break
            else:
                strr =strr[1:]
        teamlist.append(strr)
    await ctx.send( '__**Registrations Closed**__ \n<@&711760180848885870>')
    await ch.send(f"```Newlist```")
    print(Newlist)```

【讨论】:

你不能。它必须是它自己的功能。如果你能弄清楚如何将所有这些放在一个单独的函数中并在它自己的线程中调用它(所以 while 循环不会等待它完成),那么它会运行得更快。 我在 2-3 周内一直在研究它,但仍然无法弄清楚......你能不能给我一些提示......如果你能帮忙,我会很高兴

以上是关于我正在尝试制作一个等待用户消息的不和谐机器人,如果提到三个标签,它会给出滴答反应的主要内容,如果未能解决你的问题,请参考以下文章

阻止某些消息的不和谐机器人

我想制作一个阅读消息的不和谐黑名单机器人,但我不能让他阅读消息

如何为不和谐服务器制作“!踢”命令消息?

无法从我的不和谐机器人向用户发送私人消息?

如何让 discord bot 等待回复 5 分钟然后发送消息?使用不和谐的 js

让您的不和谐机器人保存您发送的消息