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: должен:

  1. удалить сообщение с ссылкой
  2. ответить сообщением <@{0.author.id}> по поводу ссылок обращайтесь к <@&1154169350190813204>
    (<@{0.author.id}> - это ник человека не сервере типо @csv, а это роль админа <@&1154169350190813204>)
  3. бот должен открыть файл и записать туда данные такого формата(каждое с новой строчки):
    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 шт):

Автор решения: Unclear

На всякий случай проверьте у роли своего бота разрешение на управление сообщениями.

Я немного упростил ваш код и у меня всё работает:

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)
→ Ссылка
Автор решения: Unclear

В @bot.event добавьте:

await bot.process_commands(message)

Получится так:

@bot.event
async def on_message(message):
    await bot.process_commands(message)
    ...
→ Ссылка