Last active
March 18, 2025 12:55
-
-
Save Encritary/4dd0105c425118c8fe30296f225007b3 to your computer and use it in GitHub Desktop.
Бот для вебинара «Как сделать чат-бот Telegram на Python»
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Импортируем всё необходимое из aiogram | |
from aiogram import Bot, Dispatcher | |
from aiogram.filters import CommandStart | |
# Импортируем всё необходимое из стандартных библиотек | |
import asyncio | |
import logging | |
import sys | |
# Указываем токен бота из @BotFather | |
TOKEN = "<SECRET>" | |
# Указываем наш Telegram ID | |
MY_ID = 1234567890 | |
# Создаём объект диспетчера, который будет следить за событиями в боте | |
dp = Dispatcher() | |
# Список активных пользователей для рассылки | |
users = [] | |
# Функция добавления пользователя в список активных пользователей | |
def add_user(user): | |
# Проверяем, нет ли уже пользователя в нашем списке | |
if user.id not in users: | |
# Если его нет, то добавляем и пишем об этом в логи | |
users.append(user.id) | |
logging.info(f"Пользователь @{user.username} ({user.full_name}) подключился (всего {len(users)})") | |
# Обработчик команды /start | |
@dp.message(CommandStart()) | |
async def start_handler(message): | |
# Добавляем пользователя в список, если его ещё нет | |
add_user(message.from_user) | |
# Пишем сообщение-приветствие | |
await message.answer("""Всем привет и добро пожаловать на вебинар! | |
Это особый бот для вебинара «Как сделать чат-бот Telegram на Python». Здесь вы можете писать напрямую спикеру, а также получать необходимую информацию от спикера в течение вебинара!""") | |
# Обработчик остальных сообщений | |
@dp.message() | |
async def message_handler(message): | |
# Добавляем пользователя в список, если его ещё нет | |
add_user(message.from_user) | |
# Если пишет спикер, то рассылаем всем сообщение | |
if message.from_user.id == MY_ID: | |
for user_id in users: | |
if user_id != MY_ID: | |
# Отправляем сообщение пользователю | |
await message.bot.send_message(user_id, "Спикер: " + message.text) | |
# Засыпаем на 1/25 секунды. Это нужно, чтобы попасть в лимит Телеграма на 30 сообщений в секунду, | |
# иначе будут ошибки по частоте запросов при рассылках | |
await asyncio.sleep(0.04) | |
else: | |
# Если пишет любой другой пользователь, то пересылаем спикеру его сообщение | |
await message.bot.send_message(MY_ID, f"@{message.from_user.username} ({message.from_user.full_name}): " + (message.text or "")) | |
# Включаем логирование | |
logging.basicConfig(level=logging.INFO, stream=sys.stdout) | |
# Создаём объект бота | |
bot = Bot(TOKEN) | |
# Запускаем "прослушивание" событий бота через диспетчер | |
asyncio.run(dp.start_polling(bot)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment