如何阻止不和谐机器人响应自身/所有其他机器人 [Python 3.6 中的不和谐机器人]

Posted

技术标签:

【中文标题】如何阻止不和谐机器人响应自身/所有其他机器人 [Python 3.6 中的不和谐机器人]【英文标题】:How to stop discord bot respond to itself/all other bots [Discord Bot in Python 3.6] 【发布时间】:2018-06-27 11:51:54 【问题描述】:

我对编程很陌生,只是在学习。我认为制作一个不和谐的机器人是一种很好的学习方式,我很享受它,我只是有点卡住了。所以我的机器人是私有的,并且在我们的不和谐服务器中有一个正在运行的笑话,即每当用户发送“k”时,所有机器人都会以“k”响应。 ATM 我们有 Dyno,我朋友的私人机器人,希望是我的。我的所有代码都能正常工作,除了因为命令和答案相同,我的机器人只是用“k”向服务器发送垃圾邮件,直到我关闭机器人,我该如何停止它?

代码:

@client.event
async def on_message(message):
    if message.content ==("k"):
        await client.send_message(message.channel, "k")

    await client.process_commands(message) 

【问题讨论】:

对我来说听起来像是一个逻辑问题。你的机器人发送k。此消息再次到达您的机器人本身,被解释为另一个触发器,因此您的机器人发送k 再次,从而关闭无限循环。 (暂时)让您的机器人仅对x 做出反应并回复k 怎么样?然后它不能触发自己。正确的解决方案是更仔细地查看触发消息,如果可以发现它是来自机器人本身的消息,则忽略它。 您需要添加一个测试来检查发布“K”的实体的用户名,或者...您需要添加一个超时时间,然后才能再次响应,比如 5 秒跨度> 我现在确实有一个临时解决方法,它以 k 响应!所以它不是无限的,但它仍然重复就像两三遍。我将更多地研究如何忽略某些用户,即它本身和所有其他机器人。它并不多,但它的开始:D 【参考方案1】:

你可以简单地在你的消息事件上运行它:

if(!message.author.user.bot) return; //not the exact code

因为消息事件可以return用户,而用户有一个默认的bot check。 message.author 返回一个成员,所以你可以调用member 的user 对象,然后像我上面那样执行检查。

伪代码:

If the author of the message (user) is a bot: return; 
This will prevent an infinite loop from occuring

【讨论】:

【参考方案2】:

没关系,我终于想通了。对于那些有同样问题的人,你必须添加

if message.author == client.user:
        return
    if message.author.bot: return

到代码,它可以工作,所以我的现在看起来像这样:

@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return
    if message.author.bot: return
    if message.content.startswith('k'):
        msg = 'k'.format(message)
        await client.send_message(message.channel, msg)

【讨论】:

【参考方案3】:

你可以在js中使用这个-->

 if (message.author.bot == false)
  //code here if the user isn't a bot
 
//lol i am noob yet

【讨论】:

以上是关于如何阻止不和谐机器人响应自身/所有其他机器人 [Python 3.6 中的不和谐机器人]的主要内容,如果未能解决你的问题,请参考以下文章

如何使不和谐机器人随机跳过响应

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

如何让我的不和谐机器人响应没有前缀的消息

Discord.py 机器人:如何让我的不和谐机器人向我发送对用户在 DM 中使用的命令的响应,例如进行调查?

当我的不和谐机器人在 VC 中时,如何防止我的终端停止

使用命令时如何使不和谐机器人更改脚本?