Почему мой спорный бот спамит? - PullRequest
0 голосов
/ 28 апреля 2018

Я ранее писал об этом том же боте и получил его работать благодаря людям, которые ответили. Но, хотя он, наконец, ожил и включился, он начал рассылать спам-сообщения без видимой причины. Я просмотрел код для опечаток и не могу найти ни одного. Вот код:

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 мне нужна помощь. также в нижней строке, если хорошо в этот раз! Оказывается, я пробил пробел перед скобками, и это не понравилось. Помощь очень ценится, поэтому я могу продолжать добавлять к этому удивительному боту.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Оказывается, я не использовал правильное форматирование для своего бота. Всякий раз, когда вы говорите «бепис» на сервере разногласий, бот увидит его, а затем скажет «бепис» обратно, как и предполагалось, но из-за моего неправильного форматирования бот увидел, что сам сказал «бепис», и ответил, как будто кто-то еще говорил "бепис".

Старые строки:

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

Новые строки:

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

Поэтому убедитесь, что вы используете правильный формат, если создаете бота!

0 голосов
/ 28 апреля 2018

Вы, похоже, уже знаете, в чем проблема, из этого ответа , который вы опубликовали. Но ваше решение далеко не в состоянии решить проблему.

on_message вызывается всякий раз, когда новое сообщение отправляется в любое место, доступное для бота; поэтому, когда вы набираете «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.

0 голосов
/ 28 апреля 2018

Похоже, что вы отправляете сообщение "bepis" в ответ на первое, , затем каждые , сообщение "bepis" - предположительно, ваш первый ответ появится в виде записи на входящем канале, который вызовет секунду и т. д.

...