Данный бот выводит сообщение, в котором указана информация о игровом сервере. На команду /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()
