Это ошибка возникает в том случае если пользователь подал заявку в канал, ему написал бот но пользователь в течении 5 минут не взаимодействовал с ботом. Следите за обновлениями BOT API.
Код конечно не понятный. И для чего тоже не пойму. Пожалуйста ознакомьтесь с Asyncio.
import logging
import asyncio
from contextlib import suppress
from aiogram import Bot, Dispatcher, F, types
from aiogram.types import ChatJoinRequest
from aiogram.filters import Text
from aiogram.exceptions import TelegramForbiddenError
from markups import *
CHANNEL_ID = -********
ADMIN_ID = ******
async def approve_request(chat_join: ChatJoinRequest, bot: Bot):
try:
await bot.send_message(chat_id=chat_join.from_user.id, text='Здравствуйте, чтобы получить файл пройдите тест')
await asyncio.sleep(1)
await bot.send_message(chat_id=chat_join.from_user.id, text='Каков ваш вид деятельности', reply_markup=profesii)
await chat_join.approve()
except TelegramForbiddenError as e:
logging.error(f'TelegramForbiddenError: {e} - Unable to initiate conversation with user.')
async def start():
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s'
)
bot = Bot('*************')
dp = Dispatcher()
dp.chat_join_request.register(approve_request, F.chat.id == CHANNEL_ID)
async def callback_template(callback: types.CallbackQuery, next_question: str):
await bot.send_message(callback.message.chat.id, 'Приступим к следующему вопросу')
await asyncio.sleep(1)
await bot.send_message(callback.message.chat.id, next_question, reply_markup=izol)
async def callback_template_link(callback: types.CallbackQuery):
await bot.send_message(callback.message.chat.id, 'Вот ваша ссылка:')
callbacks = {
'first': 'Как часто сталкиваетесь со звукоизоляцией на объектах?',
'second': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
'third': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
'fourth': 'Как часто сталкиваетесь со звукоизоляцией на объекте?',
'1': 'Чем мы можем быть для вас полезны?',
'2': 'Чем мы можем быть для вас полезны?',
'3': 'Чем мы можем быть для вас полезны?',
'4': 'Чем мы можем быть для вас полезны?'
}
for callback_data, question in callbacks.items():
dp.callback_query_handler(Text(callback_data))(lambda cb: callback_template(cb, question))
link_callbacks = ['5', '6', '7', '8', '9', '10', '11', '12']
for callback_data in link_callbacks:
dp.callback_query_handler(Text(callback_data))(callback_template_link)
try:
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
except Exception as ex:
logging.error(f'[Exception] - {ex}', exc_info=True)
finally:
await bot.session.close()
if __name__ == '__main__':
with suppress(KeyboardInterrupt, SystemExit):
asyncio.run(start())
В обработчике approve_request добавлена обработка исключения TelegramForbiddenError, которое возникает, когда бот не может начать разговор с пользователем. При возникновении этой ошибки будет выводиться сообщение об ошибке, и код будет продолжать работу без прерывания.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Код конечно не понятный. И для чего тоже не пойму. Пожалуйста ознакомьтесь с Asyncio.
В обработчике approve_request добавлена обработка исключения TelegramForbiddenError, которое возникает, когда бот не может начать разговор с пользователем. При возникновении этой ошибки будет выводиться сообщение об ошибке, и код будет продолжать работу без прерывания.