Ваш код выглядит практически верным, но есть несколько моментов, которые следует поправить и улучшить:
Использование id без определения.
Обработка проверки сообщений и реакции должна быть чуть лучше структурирована.
Добавление некоторого улучшения для отладки.
Используйте актуальные версии API.
исправленный и улучшенный вариант вашего кода:
import discord
from discord.ext import commands
# Замените это на реальный токен вашего бота
TOKEN = 'ТОКЕН БОТА'
# Создаём объект бота
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
message_number = 1
def check_message(message):
if '0' in message.content:
return True
return False
@bot.event
async def on_ready():
print(f'Logged in as {bot.user}')
@bot.event
async def on_message(message):
global message_number
if message.author == bot.user or not isinstance(message.channel, discord.DMChannel):
return
if check_message(message):
user = await bot.fetch_user(message.author.id)
sent_message = await user.send(f'Запрос #{message_number}: {message.content}')
message_number += 1
await sent_message.add_reaction('✅')
await bot.process_commands(message) # добавлено для обработки команд
@bot.event
async def on_reaction_add(reaction, user):
global message_number
if user == bot.user:
return
if str(reaction.emoji) == '✅' and reaction.message.author == bot.user and reaction.message.content.startswith('Запрос #'):
message_number -= 1
await reaction.message.delete()
user = await bot.fetch_user(reaction.message.channel.recipient.id)
await user.send(f'Запрос выполнен ({message_number})')
bot.run(TOKEN)
Некоторые моменты, на которые следует обратить внимание:
- Переход на commands.Bot: Использование commands.Bot предоставляет более функциональные возможности, такие как обработка команд.
- Исправление использования id: Теперь message.author.id и reaction.message.channel.recipient.id используются для получения идентификатора пользователя.
- Проверка bot.process_commands: Добавляем вызов bot.process_commands(message), чтобы позволить боту обрабатывать команды, даже если вы не используете их в данном коде.
TOKEN = 'ТОКЕН БОТА'
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
message_number = 1
def check_message(message):
if '0' in message.content:
return True
return False
@client.event
async def on_ready():
print(f'Logged in as {client.user}')
@client.event
async def on_message(message):
global message_number
if message.author == client.user or not isinstance(message.channel, discord.DMChannel):
return
if check_message(message):
user = await client.fetch_user(id)
sent_message = await user.send(f'Запрос #{message_number}: {message.content}')
message_number += 1
await sent_message.add_reaction('✅')
@client.event
async def on_reaction_add(reaction, user):
global message_number
if user == client.user:
return
if str(reaction.emoji) == '✅' and reaction.message.author.id == id and reaction.message.content.startswith('Запрос #'):
message_number -= 1
await reaction.message.delete()
user = await client.fetch_user(id)
await user.send(f'Запрос выполнен ({message_number})')
client.run (TOKEN)
Работа с ботом осуществляется в личных сообщениях дискорда
Основная задача бота:
Сбор запросов с участников некоторого сервера и передача администратору.
Проблема:
не выполняется блок, который отвечает за то что:
по нажатию реакции, которую бот добавляет сразу после того как отправил сообщение, должно удалиться сообщение, под которым была добавлена реакция, а также вывод сообщения о том, что запрос выполнен
----
Подскажите пожалуйста, как исправить проблему, код вроде правильно написан, но не работает.
Ломаю над этим голову уже второй день