import logging
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from keyboards import sub_verification_menu
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
API_TOKEN = 'ваш_токен'
bot = Bot(token=API_TOKEN, parse_mode='HTML')
dp = Dispatcher(bot)
async def check_subscription(user_id):
try:
chat_member = await bot.get_chat_member(chat_id="ч", user_id=user_id)
return chat_member.status not in ["left"]
except Exception as e:
logger.error(f"Ошибка при проверке подписки для пользователя {user_id}: {e}")
return False
async def send_welcome_message(user_id):
await bot.send_message(user_id, "? Hi! I’m here and ready to work! Send me any token address\n")
async def send_subscription_error(user_id):
await bot.send_message(user_id, "Bot only works for users who have a private subscription", reply_markup=sub_verification_menu)
@dp.message_handler(commands=["start"])
async def send_welcome(message: types.Message):
if message.chat.type == 'private':
if await check_subscription(message.from_user.id):
await send_welcome_message(message.from_user.id)
else:
await send_subscription_error(message.from_user.id)
@dp.message_handler()
async def echo_message(msg: types.Message):
if msg.chat.type == 'private':
if await check_subscription(msg.from_user.id):
await msg.answer("Основной функционал бота")
else:
await send_subscription_error(msg.from_user.id)
@dp.callback_query_handler(text="sub_check")
async def sub_check(callback_query: types.CallbackQuery):
await bot.delete_message(callback_query.from_user.id, callback_query.message.message_id)
if await check_subscription(callback_query.from_user.id):
await send_welcome_message(callback_query.from_user.id)
else:
await send_subscription_error(callback_query.from_user.id)
if __name__ == '__main__':
logger.info("Бот запущен.")
executor.start_polling(dp, skip_updates=True)
Дело в том, что с новыми пользователями, все работает хорошо. Подписка проверяется и просит подписаться в случае, если это не было сделано. Но пользователи, которые ранее запускали бота, когда еще не было проверки этого условия, могут пользоваться ботом без проблем, даже если у них нет подписки.
Как проверять старых пользователей на подписку на чат тоже?