Discord.py проблемы при работе с on_raw_reaction_add(payload)
Не могу понять, почему мне бьет ошибки "task_message" is not defined в 44 строке "ctx" is not defined в 48 строке "task_name" is not defined в 48 строке
все ошибки появляются только после @bot.event. До этого нет ошибок. Discord.py 2.1.0 python 3.1
Код
# pip install discord.py
import discord
from discord.ext import commands
from datetime import datetime, timedelta
config = {
'token': 'тут был токен',
'prefix': '/',
}
intents = discord.Intents.default() # Подключаем "Разрешения"
intents.message_content = True
bot = commands.Bot(command_prefix=config['prefix'], intents=intents)
@bot.command()
async def task(ctx, date: str, *, task_name: str):
task_date = datetime.strptime(date, "%d.%m.%Y")
today_dt = datetime.now()
category = discord.utils.get(ctx.guild.categories, name="задачи")
if not category:
await ctx.send("Категория 'задачи' не найдена.")
return
if task_date < today_dt:
archive_category = discord.utils.get(ctx.guild.categories, name="архив")
if not archive_category:
await ctx.send("Категория 'архив' не найдена.")
return
channel = await ctx.guild.create_text_channel(date, category=archive_category)
else:
channel = await ctx.guild.create_text_channel(date, category=category)
task_message = await channel.send(task_name)
await task_message.add_reaction("✅")
await task_message.add_reaction("❌")
await task_message.add_reaction("?")
bot.task_message = task_message #Присваиваем переменной task_message статус глобальной, чтобы можно было обрабатывать эвенты
bot.task_message = task_name
@bot.event
async def on_raw_reaction_add(payload):
if payload.message_id == task_message.id:
user = bot.get_user(payload.user_id)
if str(payload.emoji) == "✅":
# Выполнено
await ctx.send(f"{user.name} нажал на кнопку 'Выполнено' для задачи '{task_name}'.")
elif str(payload.emoji) == "❌":
# Не выполнено
reason = await bot.wait_for('message', check=lambda message: message.author == user)
await ctx.send(f"{user.name} нажал на кнопку 'Не выполнено' для задачи '{task_name}' и указал причину: {reason.content}.")
channel = bot.get_channel(channel_id)
await channel.send(f"{user.name} не выполнил задачу '{task_name}' и указал причину: {reason.content}.")
elif str(payload.emoji) == "?":
# Перенести на дату
new_date = await bot.wait_for('message', check=lambda message: message.author == user)
new_date_dt = datetime.strptime(new_date.content, "%d.%m.%Y")
task_channel = bot.get_channel(channel_id)
category = discord.utils.get(ctx.guild.categories, name="задачи")
if new_date_dt < today_dt:
archive_category = discord.utils.get(ctx.guild.categories, name="архив")
if not archive_category:
await ctx.send("Категория 'архив' не найдена.")
return
new_channel = await ctx.guild.create_text_channel(new_date.content, category=archive_category)
else:
new_channel = await ctx.guild.create_text_channel(new_date.content, category=category)
await task_message.edit(content=task_name,channel=new_channel)
await ctx.send(f"{user.name} нажал на кнопку 'Перенести на дату' и перенес задачу на дату: {new_date.content}")
bot.run(config['token'])