如何阻止不和谐机器人响应自身/所有其他机器人 [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 中的不和谐机器人]的主要内容,如果未能解决你的问题,请参考以下文章