Как настроить Telegram бота так, чтобы он реагировал только на команды от определенного пользователя?

Здравствуйте,

Возникла проблема с использованием Telegram бота для Outline VPN по следующей ссылке: https://github.com/bl4ckm45k/vpnbot. Я хотел бы узнать, как настроить бота таким образом, чтобы он принимал сообщения только от определенного ID пользователя. У меня нет опыта в работе с Python, поэтому я буду очень благодарен за любую помощь.
  • 28 сентября 2023 г. 12:47
Ответы на вопрос 2
Для того чтобы бот реагировал только на команды от определенного пользователя, вам нужно будет добавить немного кода в файл `bot.py`. Следуйте этим шагам:

1. Импортируйте модуль `from telegram import ChatPermissions`.

2. В функции `start_command`, после строки `def start_command(bot, update)`, добавьте следующую строку для получения ID пользователя, отправившего команду: `chat_id = update.message.chat_id`.

3. В функциях `ask_password` и `ask_public_key`, также после строки `def ask_password(bot, update)`, добавьте такую же строку для получения ID пользователя.

4. В функции `send_zip`, после строки `def send_zip(bot, update)`, добавьте код, который будет проверять ID пользователя, и отправьте только если он совпадает с идентификатором пользователя, которого вы хотите разрешить. Вот пример такого кода:

```python
def send_zip(bot, update):
    chat_id = update.message.chat_id
    allowed_user_id = xxxxxxxxx # замените xxxxxxxxx на ID пользователя, которого вы хотите разрешить
    if chat_id != allowed_user_id:
        update.message.reply_text("Вы не авторизованы для выполнения этой команды.")
        return
    # остальной код функции send_zip
```

Замените `xxxxxxxx` на конкретный ID пользователя, которому вы разрешаете использовать команду. Вы можете найти этот ID, отправив его боту сообщение и затем проверить файл `update.message.chat_id` в выводе консоли.

5. Повторите шаг 4 для функций `get_password`, `ask_password`, `ask_public_key` и `get_public_key`.

6. Сохраните файл `bot.py` и перезапустите вашего бота.

После этих шагов ваш бот будет реагировать только на команды от определенного пользователя, указанного в коде.
как я понимаю, в коде есть класс "Admin", наследуемый от класса "Filter". В этом классе определен асинхронный метод "__call__", который принимает параметр "message" типа "Message" и возвращает булевое значение. Внутри метода проверяется, есть ли "ID" отправителя сообщения в списке [123]. Если да, то метод возвращает "True". Далее используется декоратор "@dp.message(Admin(), F.text == '/команда')". И, получается, что "Admin" является аргументом этого декоратора. Вот и всё.
Похожие вопросы