Форум сайта python.su
Есть код Python, который проверяет активность ТГ канала с использованием длительного опроса и отправляет сообщение в канал при появлении нового поста:
import asyncio import logging import os from aiogram import Bot, Dispatcher, types from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup from dotenv import load_dotenv load_dotenv() BOT_TOKEN = os.getenv('API_TOKEN') CHANNEL_IDS = os.getenv('CHANNEL_ID').split(',') WA_LINK = os.getenv('WA_LINK') TEXT = os.getenv('TEXT') BUTTON_TEXT = os.getenv('BUTTON_TEXT') logging.basicConfig(level=logging.INFO) bot = Bot(token=BOT_TOKEN) dp = Dispatcher(bot) message_sent = False async def check_channel_activity_long_polling(): global message_sent offset = None while True: try: updates = await bot.get_updates(offset=offset) channel_post_found = False for update in updates: offset = update.update_id + 1 if 'channel_post' in update: channel_post_found = True if not message_sent: channel_id = update.channel_post.chat.id keyboard = InlineKeyboardMarkup().add(InlineKeyboardButton(BUTTON_TEXT, url=WA_LINK)) await bot.send_message(channel_id, TEXT, reply_markup=keyboard) message_sent = True if not channel_post_found: message_sent = False await asyncio.sleep(2) except Exception as e: print(f"Ошибка: {e}") await asyncio.sleep(2) @dp.message_handler(commands=['menu']) async def handle_menu_command(message: types.Message): # Выводим сообщение в консоль при получении команды /menu print("Получена команда /menu") if __name__ == '__main__': loop = asyncio.get_event_loop() loop.create_task(check_channel_activity_long_polling()) try: loop.run_until_complete(dp.skip_updates()) loop.run_forever() except KeyboardInterrupt: pass finally: loop.close()
Отредактировано RomanRens (Фев. 21, 2024 14:43:21)
Офлайн
[code python]код обернуть в эти теги[/code]
Офлайн