discord бот игнорирует команды
есть дискорд бот на питоне который работает отлично но при добавлении следующего кода он перестаёт реагировать на команды
@bot.event
async def on_message(message):
# if message.author.id == 673168872324726794: # ID пользователя которого игнорируем
# return
if message.channel.id == 1154475315360452668: # ID канала, который будем игнорировать
return
if message.channel.id == 1154475240575995924: # ID канала, который будем игнорировать
return
if message.channel.id == 1154475116630134944: # ID канала, который будем игнорировать
return
msg = message.content
if 'http:' in msg:
channel = bot.get_channel(1154534213450735706)
await message.reply('<@{0.author.id}> по поводу ссылок обращайтесь к <@&1154169350190813204>'.format(message))
await message.delete()
file = open("C:\\Users\\1\\Desktop\\ds bot\\blockd_links.txt", "a")
current_datetime = datetime.datetime
file.write(f'date_time: ' + str(current_datetime.today()) + ' .format(year-month-day hour:minute:second:ms)\n'
f'user_id: <@{message.author.id}> {message.author.id}\n'
f'user_name_on_server: {message.author.global_name}\n'
f'channel: {channel.name}\n'
f'message: {message.content}\n\n')
file.close()
if 'https:' in msg:
channel = bot.get_channel(1154534213450735706)
await message.reply('<@{0.author.id}> по поводу ссылок обращайтесь к <@&1154169350190813204>'.format(message))
await message.delete()
file = open("C:\\Users\\1\\Desktop\\ds bot\\blockd_links.txt", "a")
current_datetime = datetime.datetime
file.write(f'date_time: ' + str(current_datetime.today()) + ' .format(year-month-day hour:minute:second:ms)\n'
f'user_id: <@{message.author.id}> {message.author.id}\n'
f'user_name_on_server: {message.author.global_name}\n'
f'channel: {channel.name}\n'
f'message: {message.content}\n\n')
file.close()
по сути этот код должен при обнаружении ссылок пока-что начинающихся с http: и https: должен:
- удалить сообщение с ссылкой
- ответить сообщением <@{0.author.id}> по поводу ссылок обращайтесь к <@&1154169350190813204>
(<@{0.author.id}> - это ник человека не сервере типо @csv, а это роль админа <@&1154169350190813204>) - бот должен открыть файл и записать туда данные такого формата(каждое с новой строчки):
date_time: ' + str(current_datetime.today() - это дата и время на момент срабатывания(отправки ссылки в чат)
user_id: <@{message.author.id}> {message.author.id}\n - это ID пользователя, первое в формате @csv для отображения в дискорде, а второе это просто цифровое значение
user_name_on_server: {message.author.global_name}\n - это просто ник csv без"@"
channel: {channel.name}\n - это название канала в котором была отправлена ссылка
message: {message.content}\n\n - это само сообщение
пример файла:
date_time: 2024-05-07 20:05:01.999447 (year-month-day hour:minute:second:ms)
user_id: <@673168872324726794> 673168872324726794
user_name_on_server: csv
channel: общий
message: http:
так-же в коде есть данный код)):
@bot.event
async def on_command_error(ctx, error):
await ctx.send(f'Произошла ошибка: {error}')
который при возникновении ошибки должен в чат написать ошибку но никакой ошибки нет и в консоли тоже нет ошибок
просто игнор команд
возможно я где-то что-то криво написал и не могу понять
Ответы (2 шт):
На всякий случай проверьте у роли своего бота разрешение на управление сообщениями.
Я немного упростил ваш код и у меня всё работает:
from discord.ext import commands
from discord import Message, Intents
from datetime import datetime
intents = Intents.all()
bot = commands.Bot(command_prefix='>', intents=intents)
@bot.event
async def on_message(message: Message) -> None:
if message.author.id == 673168872324726794: # ID пользователя которого игнорируем # Тут всё ваше
return
ignore_channels = [1154475315360452668, 1154475240575995924, 1154475116630134944] # Тут все id ваши
if message.channel.id in ignore_channels: # ID канала, который будем игнорировать
return
msg = message.content
if 'http' in msg:
channel = bot.get_channel(1237636241806065735) # ВАШ ID: 1154534213450735706
await message.reply(f'<@{message.author.id}> по поводу ссылок обращайтесь к <@&1154169350190813204>')
await message.delete()
# при работе с файлами лучше работать с with, чтобы не было обрывов строк, если при записи закрыть бота
with open("blockd_links.txt", "a") as file: # ВАШ FILEPATH: "C:\\Users\\1\\Desktop\\ds bot\\blockd_links.txt"
# !!!! посмотрите примеры использования f-строк, т.к. вы немного не понимаете принципа их работы
# поясню: вы использовали f-строку, но всё равно использовали str + str
file.write(f"""
date_time: {str(datetime.today())}.format(year-month-day hour:minute:second:ms)
user_id: <@{message.author.id}> {message.author.id}
user_name_on_server: {message.author.global_name}
channel: {channel.name}
message: {message.content} \n
""") # "\n" в конце чтобы был пробел между данными
# а вообще советую вам попробовать поработать с json форматом
# он удобный и может создавать красивые отступы
# если надо будет, могу объяснить и предложить удобное решение для работы с json
token = ""
bot.run(token=token, reconnect=True)
В @bot.event добавьте:
await bot.process_commands(message)
Получится так:
@bot.event
async def on_message(message):
await bot.process_commands(message)
...