Как стать автором
Обновить

Комментарии 5

При первоначальной настройке сервера обычно рекомендуют принимать базовые меры безопасности, такие как изменение портов, включение SSH, отключение входа по паролю и тд. А Вы предлагаете открыть доступ к скриптам для всех желающих? Думается, что хорошей идеей будет ограничить доступ к боту. Например, добавить список users (в файл или sqlite какой-то) и добавить какой-то middleware, который будет проверять права на выполнения команд бота.

Если есть users, то, наверно, стоит добавить какие-то роли для них. Например, админ, который имеет свой набор кнопок и прав для выполнения более широкого списка команд + будет удобно новых пользователей добавлять в "белый" список, чтобы на сервер не заходить лишний раз.

И теперь мы сталкиваемся с проблемой кучи кода в 1 файле. Было бы здорово увидеть структуру папок какую-то (у aiogram пример есть):

project_root/
|-- handlers/
|   |-- __init__.py
|   |-- main_handler.py
|-- middleware/
|   |-- __init__.py
|   |-- access_middleware.py
|-- config/
|   |-- users.yaml
|-- main.py

*да и вынести значения кнопок было бы хорошо в переменные (пример у aiogram)

Я это к чему пишу? У вас получился туториал использования aigram'а. Какой-то базовый пример, а в заголовке "Telegram-бот как системный администратор сервера". Хотелось бы увидеть что-то связанное именно с сервером. Какие решения и какие проблемы решили (см. выше проблемы). Почему статичный html файл с кнопками нельзя использовать? Не разбираюсь в Minecraft, но, кажется, с браузера будет удобнее запускать скрипты, чем с телефона. Вы же за PC во время игры, нет? Увидел только запуск бота при старте.

Спасибо за комментарий)

Вы верно говорите про безопасность, для более серьёзного примера, конечно, необходим список пользователей и их роли. Вместе с этим можно подключиться базу данных помощнее json-файла, лично я думал про PostgreSQL. О всём этом я упоминал на протяжении всей статьи в той или иной степени.

Я не добавил более сложный функционал в описанный пример бота для упрощения туториала и избежания описанной Вами проблемы раздутого сложного кода. Плюс этот пример, прост, потому что не является коммерческим и я писал его в свободное время, изучая aiogram, bash скрипты и т.д. Бот получился достаточно умён, чтобы не запустить больше одного инстанса Minecraft сервера и не пытается расстрелять все процессы, если сервер уже выключен, а мы просим повторное выключение. Этого для моих личных целей было более чем достаточно.

Статичная html страничка не подошла бы, так как у моего домашнего сервера не статичный ip, а telegram можно открыть в любом браузере и установить приложение в том числе и на ПК.

В любом случае, спасибо за полезные рекомендации по авторизации и ролям для пользователей и за ссылки на полезные примеры для улучшения структуры кода. Если продолжу работу над ботом обязательно напишу статью-продолжение.

Я подобные решения писал для себя, в целом достаточно хорошо все описано, зачот плюс в карму

а можете показать код для такого функционала? я про

 добавить список users (в файл или sqlite какой-то) и добавить какой-то middleware, который будет проверять права на выполнения команд бота.

вот такой код:

# Ограничение в команде
@bot.message_handler(commands=['start'])
def start(message):
    adm = [123, 456, ...]  # список из id пользователей
    if message.chat.id not in adm:
        bot.send_message(message.chat.id, 'Не дозволено')
    else:
        bot.send_message(message.chat.id, 'Чего изволите сударь?')


# Ограничение выполнение команд start, stop, etc
@bot.message_handler(func=lambda message: message.chat.id not in users_commands, 
                     commands=['start', 'stop', 'etc'])
def some(message):
    bot.send_message(message.chat.id, 'Не дозволено')


# Ограничение доступа к боту по ID
@bot.message_handler(func=lambda message: message.chat.id not in users)
def some(message):
    bot.send_message(message.chat.id, 'Не дозволено общаться с незнакомцами')

не получается применить :(

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории