Команды не работают после добавления сообщения.функция delete() для определенных ключевых слов

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

 import discord
import random
from discord.ext import commands
from discord.ext.commands import Bot


client = discord.Client()
bot_prefix = "."
client = commands.Bot(command_prefix=bot_prefix, case_insensitive=True)

ban_words = ['fuck',
              'shit']


@client.event
async def on_ready():
    print("Shefkata e spremen")


async def on_message(ctx, message):
    if message.content.lower() in ban_words:
        await message.delete()


@client.command(pass_context=True, case_insensitive=True)
async def ping(ctx):
    await ctx.send(f'pong {round(client.latency * 1000)}ms')


@client.command(pass_context=True, case_insensitive=True)
async def shefe(ctx):
    await ctx.send("Sho sakash kopile")


@client.command(pass_context=True, case_insensitive=True)
async def zdravo(ctx):
    pozdravi = ["Zdravo",
                "Kaj si be",
                "Zdravo sinka"]
    await ctx.send(f'{random.choice(pozdravi)}')


@client.command(pass_context=True, aliases=['8ball'], case_insensitive=True)
async def _8ball(ctx, *, question):
    responses = ["It is certain.",
                 "It is decidedly so.",
                 "Without a doubt."]
    await ctx.send(f'Question: {question}nAnswer: {random.choice(responses)}')


@client.command(pass_context=True, case_insensitive=True)
async def dabs(ctx):
    broj = random.randint(0, 1000)
    if broj == 666:
        await ctx.send("JA PRONAJDE NAJRETKATA PORAKAnIMASHE 0.1% SHANSA DA TI SE PADNI")
        await ctx.send("https://imgur.com/poI3bZl")
    broj = random.randint(0, 100)
    if broj == 69:
        await ctx.send("https://imgur.com/OOgEaLb")
    else:
        await ctx.send("https://imgur.com/RFlt0bz")


@client.command(pass_context=True, case_insensitive=True)
async def commands(ctx):
    await ctx.send(".pingn.shefen.zdravon.8balln.dabs")

client.run('token')
 

Команды, которые использовали префикс bot для запуска, перестали работать после добавления клиентского события для удаления сообщений, содержащих определенные ключевые слова. Я недавно начал кодировать, поэтому буду очень признателен за любую помощь. discord.py документация довольно сложная, поэтому я не могу найти то, что ищу. Для получения более подробной информации, пожалуйста, спросите меня в комментариях.

Комментарии:

1. Я думаю, вы хотите message.content.lower().split(' ') в своем on_message событии. Кроме того, означает ли это, что ваш код работал нормально без этой on_message функции? Можете ли вы попробовать просто удалить его и посмотреть, работает ли он?

Ответ №1:

Вы должны использовать это:

 await client.process_commands(ctx)
 

Без этого ни одна из ваших команд не будет работать.


Итак, ваше мероприятие будет выглядеть следующим образом:

 @client.event
async def on_message(ctx):
    message = ctx.content.lower()
    for word in ban_words:
        if word in message:
            await ctx.delete()
            return

    await client.process_commands(ctx)
 

Кроме того, вы забыли добавить @client.event . Без этого on_message() функция не будет выступать в качестве слушателя.

Комментарии:

1. @Don_Tofu пожалуйста, отметьте это как ответ, если это решило вашу проблему.

Ответ №2:

Вам нужно использовать @client.event декоратор над функцией on_message. Если вы проверяете наличие плохих слов, вам также нужно использовать цикл for, исправленный код:

 @client.event
async def on_message(ctx, message):
    message = message.content.lower()
    for word in ban_words:
        if word in message:
            await message.delete()