【问题标题】:Why is my discord bot spamming?为什么我的不和谐机器人会发送垃圾邮件?
【发布时间】:2018-10-08 21:17:49
【问题描述】:

我之前曾在同一个机器人上发过帖子,感谢回复的人,它可以正常工作。但是,当它终于活过来并打开时,它开始无缘无故地发送垃圾邮件。我查看了代码中的拼写错误,但找不到任何错误。 代码如下:

import discord
from discord.ext.commands import bot
from discord.ext import commands
import asyncio
import time

Client = discord.Client()
client = commands.Bot (command_prefix = discord)

@client.event
async def on_ready() :
        print("Bepis machine fixed")

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



client.run("Censored Bot Token")

@client.event 之后是我需要帮助的地方。如果这次还好,也是底线!原来我在括号之前按了空格键,但它不喜欢那样。非常感谢您的帮助,因此我可以继续添加到这个很棒的机器人。

【问题讨论】:

  • 我猜你发送的消息会触发另一个事件,然后导致再次发送消息。

标签: python bots discord spam-prevention


【解决方案1】:

看起来您正在发送消息“bepis”以响应第一个然后每个消息“bepis” - 大概您的第一个响应将显示为传入提要中的一个条目,这将触发一秒钟,等等。

【讨论】:

    【解决方案2】:

    原来我没有为我的机器人使用正确的格式。 每当您在不和谐服务器中说“bepis”时,机器人都会看到它,然后按照它的意图说“bepis”,但是,由于我的格式不正确,机器人看到自己说“bepis”并做出回应,好像别人在说“bepis”。

    旧行:

    if message.content == "bepis" :
        await client.send_message(message.channel, "bepis")
    

    换行:

    if message.content.startswith('bepis'):
        await client.send_message(message.channel, "bepis")
    

    因此,如果您要制作机器人,请确保使用正确的格式!

    【讨论】:

    • 我看不出这有什么改变,机器人的“bepis”也以“bepis”开头,唯一改变的是if现在也排除了“bepis hi”。
    【解决方案3】:

    您似乎已经从您发布的this answer 中知道了问题所在。但是你的方案远远不能解决问题。

    on_message 每当有新消息发送到机器人可访问的任何地方时都会被调用;因此,当您在 discord 中输入“bepis”时,机器人会回复“bepis”,然后机器人发送的消息会进入on_message,机器人会重新回复“bepis”,依此类推...

    简单的解决方案是检查邮件的作者是否是任何机器人帐户,或者如果需要,邮件的作者是否是您的机器人。

    from discord.ext import commands
    
    client = commands.Bot(command_prefix=None)
    
    @client.event
    async def on_ready():
        print("Bepis machine fixed")
    
    @client.event
    async def on_message(message):
        # or `if message.author.bot:`   # which checks for any bot account
        if message.author == client.user:
            return
        if message.content == "bepis":
            await client.send_message(message.channel, "bepis")
    
    client.run("Token")
    

    注意:我还修复了您的许多其他问题,例如多个未使用的导入、另一个 Client 和缩进。

    仅供参考,command_prefix 仅在功能命令正在处理命令时使用。当你使用 on_message 时它没有用,这意味着你可以将它设置为 None。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2021-08-11
      • 2021-08-19
      • 2013-12-03
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多