Не работает функция на aiogram 3
async def send_reminder(chat_id: int, message_id: int, delay: int):
"""
Отправляет напоминание пользователю, если он не ответил на сообщение бота.
Args:
chat_id (int): ID чата, в который нужно отправить сообщение.
message_id (int): ID сообщения, на которое пользователь не ответил.
delay (int): Задержка в секундах перед отправкой напоминания.
"""
# Ждем указанное количество секунд
await asyncio.sleep(delay)
# Проверяем, ответил ли пользователь на исходное сообщение за это время
message = await bot.pin_chat_message(self=bot, chat_id=chat_id, message_id=message_id)
if message.reply_to_message is None:
# Пользователь не ответил, отправляем напоминание
await message.answer("Привет! Кажется, вы не ответили на мое предыдущее сообщение. Пожалуйста, ответьте, когда сможете.")
@router.message(F.text == '/start')
async def reply(message: Message, state: FSMContext, timeout=3):
await state.set_state(Reg.name)
await message.answer("Как к тебе обращаться?", reply_markup=keyboard)
asyncio.create_task(send_reminder(message.chat.id, message.message_id, 3))
Не работает эта функция, выдает ошибку:
unhashable type: 'PinChatMessage'
Ответы (1 шт):
Автор решения: Alexandru
→ Ссылка
import asyncio
from aiogram import Bot, Dispatcher, F, types
from aiogram.types import Message
from aiogram.fsm.context import FSMContext
bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()
async def send_reminder(chat_id: int, message_id: int, delay: int):
"""
Отправляет напоминание пользователю, если он не ответил на сообщение бота.
Args:
chat_id (int): ID чата, в который нужно отправить сообщение.
message_id (int): ID сообщения, на которое пользователь не ответил.
delay (int): Задержка в секундах перед отправкой напоминания.
"""
await asyncio.sleep(delay)
# Получаем сообщение, чтобы проверить наличие ответа
message = await bot.get_message(chat_id, message_id)
if not message.reply_to_message:
# Пользователь не ответил, отправляем напоминание
await bot.send_message(chat_id, "Привет! Кажется, вы не ответили на мое предыдущее сообщение. Пожалуйста, ответьте, когда сможете.")
@dp.message(F.text == '/start')
async def reply(message: Message, state: FSMContext):
await state.set_state("Reg:name") # Устанавливаем состояние (пример)
await message.answer("Как к тебе обращаться?", reply_markup=None) # Добавьте свою клавиатуру
asyncio.create_task(send_reminder(message.chat.id, message.message_id, 3))
# Запуск бота
if __name__ == "__main__":
from aiogram import executor
from aiogram.types import BotCommand
async def set_commands(bot: Bot):
commands = [BotCommand(command="/start", description="Начать диалог")]
await bot.set_my_commands(commands)
async def on_startup(dp):
await set_commands(bot)
executor.start_polling(dp, on_startup=on_startup)