Как можно исправить проблемы с работой Discord бота, который не выполняет мои команды?

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

```python
import disnake 
from disnake.ext import commands 
import re 
import aiohttp 
import discord 
from discord.ext import commands 

TEXT_ONLY_CHANNEL_ID = "1339724444985462935" 
ALLOWED_MESSAGE = "111" 

@bot.event 
async def on_ready(): 
    print(f'Бот успешно запущен') 

@bot.event 
async def on_message(message: disnake.Message): 
    if message.author.bot: 
        return  # Игнорируем сообщения от других ботов 

    elif message.channel.id == TEXT_ONLY_CHANNEL_ID: 
        if message.content != ALLOWED_MESSAGE: 
            await message.delete() 
            return 

    await bot.process_commands(message) 

bot.run("token") 
``` 

Помогите, пожалуйста, разобраться с проблемой!
  • 14 февраля 2025 г. 0:04
Ответы на вопрос 2
Давайте разберем ваш код и посмотрим, что можно исправить для того, чтобы бот работал корректно.

1. **Импорт библиотеки**: Вы используете библиотеку `disnake`, но также импортируете `discord`. Необходимо использовать только одну библиотеку для вашего бота. Если вы хотите использовать `disnake`, убедитесь, что вы используете соответствующие классы и методы.

2. **Инициализация бота**: В вашем коде отсутствует создание экземпляра бота. Вы должны создать экземпляр бота с правильными параметрами.

3. **Идентификатор канала**: Убедитесь, что `TEXT_ONLY_CHANNEL_ID` является целым числом. Вам нужно удалить кавычки вокруг значения ID.

4. **Работа с командами**: Код в функции `on_message` не вызывает `bot.process_commands(message)`, если сообщение было обработано и удалено, поэтому это может приводить к проблемам при вызове команд.

Вот исправленная версия вашего кода, учитывая вышеупомянутое:

```python
import disnake
from disnake.ext import commands

# Замените строку ID канала на целое число
TEXT_ONLY_CHANNEL_ID = 1339724444985462935
ALLOWED_MESSAGE = "111"

# Инициализация бота с префиксом
bot = commands.Bot(command_prefix="!")

@bot.event
async def on_ready():
    print(f'Бот успешно запущен')

@bot.event
async def on_message(message: disnake.Message):
    if message.author.bot:
        return  # Игнорируем сообщения от других ботов

    # Проверяем, что сообщение в правильном канале
    if message.channel.id == TEXT_ONLY_CHANNEL_ID:
        if message.content != ALLOWED_MESSAGE:
            await message.delete()  # Удаляем сообщение, если оно не совпадает с ALLOWED_MESSAGE

    # Позволяем боту обрабатывать команды
    await bot.process_commands(message)

# Запуск бота
bot.run("your_token_here")  # Замените "your_token_here" на ваш токен
```

### Дополнительные советы:

1. **Проверьте разрешения**: Убедитесь, что у вашего бота есть разрешения на удаление сообщений в канале.

2. **Проверьте токен**: Убедитесь, что вы вставили правильный токен бота.

3. **Настройки канала**: Пусть бот будет добавлен в нужный канал и имеет доступ к нему.

4. **Логирование и отладка**: Вы можете добавить больше отладочной информации, например, выводить каждое сообщение в лог, чтобы видеть, что бот получает.

После внесения этих изменений ваш бот должен начать обрабатывать сообщения и удалять те, которые не совпадают с разрешенным текстом.
Не создали бота (IDE вам подчёркивает). 
intents = disnake.Intents.default()
intents.message_content = True

bot = disnake.Client(intents=intents)

# или так (про разницу сами прочтите):
# from discord.ext import commands
# bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

Посмотрите как создаётся минимальный бот:
https://docs.disnake.dev/en/stable/quickstart.html
или по-русски: https://ru.guide.disnake.dev/getting-started/initi...

З.Ы. Ну и сомнительно, что нужно смешивать discord.py и disnake.py.

И правила: https://qna.habr.com/help/rules#3.8
Похожие вопросы