HenryEW,
import logging
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from collections import defaultdict
# Включаем логирование для получения информации о работе бота
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
# Инициализируем словарь для хранения количества сообщений каждого пользователя
message_counts = defaultdict(int)
# Функция для команды /start
def start(update, context):
update.message.reply_text('Привет! Я бот для подсчета количества сообщений в этом чате.')
# Функция для подсчета сообщений и обновления топа
def count_messages(update, context):
user_id = update.message.from_user.id
message_counts[user_id] += 1
# Функция для команды /top
def top(update, context):
sorted_counts = sorted(message_counts.items(), key=lambda x: x[1], reverse=True)
top_users = "\n".join([f"{context.bot.get_chat_member(update.effective_chat.id, user[0]).user.username}: {user[1]}" for user in sorted_counts])
update.message.reply_text(f"Топ пользователей:\n{top_users}")
def main():
# Инициализация бота и получение токена
updater = Updater("TOKEN", use_context=True)
# Получаем диспетчер для регистрации обработчиков команд и сообщений
dp = updater.dispatcher
# Регистрация обработчиков команд
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("top", top))
# Регистрация обработчика сообщений
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, count_messages))
# Старт бота
updater.start_polling()
# Бот работает, пока не будет нажата комбинация Ctrl-C
updater.idle()
if name == 'main':
main()