#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()