[Python] Telegram Game Server Bot - Counter-Strike 1.6

  • Автор темы Автор темы reg1on
  • Дата начала Дата начала
Данный бот выводит сообщение, в котором указана информация о игровом сервере. На команду /info

Настройки:
Python:
# Задайте токен вашего бота и адрес сервера (IP:PORT) здесь
TOKEN = "YOUR_TOKEN"  # Замените на токен вашего бота
SERVER_ADDRESS = ("127.0.0.1", 27015)  # Замените на IP-адрес и порт вашего сервера

Python:
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
import a2s
from time import strftime, gmtime

# Задайте токен вашего бота и адрес сервера (IP:PORT) здесь
TOKEN = "YOUR_TOKEN"  # Замените на токен вашего бота
SERVER_ADDRESS = ("127.0.0.1", 27015)  # Замените на IP-адрес и порт вашего сервера

async def info(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    try:
        # Получаем информацию о сервере
        info = a2s.info(SERVER_ADDRESS)
        players = a2s.players(SERVER_ADDRESS)

        # Формируем ответ
        response = {
            "name": info.server_name,
            "map": info.map_name,
            "players": players,
            "max_players": info.max_players
        }

        # Создаем аккуратную таблицу для игроков
        table_header = f"{'№':<5} {'Имя игрока':<30} {'Счет':<10} {'Время в игре':<10}"
        table_divider = "-" * 70
        table_rows = []

        for index, player in enumerate(response['players'], start=1):
            # Преобразуем время в удобный формат (чч:мм:сс)
            duration = strftime("%H:%M:%S", gmtime(player.duration))
        
            # Используем полное имя игрока без обрезки
            player_name = player.name  # Убираем ограничение на длину имени
            table_rows.append(f"{index:<5} {player_name:<30} {player.score:<10} {duration:<10}")

        # Объединяем все части таблицы
        table = "\n".join([table_header, table_divider] + table_rows)

        response_text = (f"Имя сервера: {response['name']}\n"
                         f"Карта: {response['map']}\n"
                         f"Игроков: {len(response['players'])} / {response['max_players']}\n"
                         f"Игроки:\n```\n{table if table_rows else 'Нет игроков'}\n```")
    except Exception as e:
        response_text = f"Ошибка: {str(e)}"

    await update.message.reply_text(response_text, parse_mode='MarkdownV2')

def main():
    # Создаем приложение бота
    application = ApplicationBuilder().token(TOKEN).build()

    # Добавляем обработчик команды /info
    application.add_handler(CommandHandler("info", info))

    # Запускаем бота
    application.run_polling()

if __name__ == '__main__':
    main()

image.webp
 
Назад
Сверху