Skip to content

Instantly share code, notes, and snippets.

@Encritary
Last active March 18, 2025 12:55
Show Gist options
  • Save Encritary/4dd0105c425118c8fe30296f225007b3 to your computer and use it in GitHub Desktop.
Save Encritary/4dd0105c425118c8fe30296f225007b3 to your computer and use it in GitHub Desktop.
Бот для вебинара «Как сделать чат-бот Telegram на Python»
# Импортируем всё необходимое из 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