Остановка приема команд от пользователя

Есть бот написанный на PyTelegramBotApi, можно ли сделать команду отключения приема команд от пользователя? Т.е /stop которая противоположна команде /start т.е сбрасывает до состояние когда пользователь ещё не писал боту


Ответы (1 шт):

Автор решения: oleksandrigo

Делаете словарь с юзерами, если у вас его нет. Ну или БД. При запуске бота записываете юзера в словарь, и даёте делайте доступ к командам True по-умолчанию. Делаем пару функций для проверки наличия юзера в бд, и наличие доступа к командам. Ну и на каждой функции/хендлере делаем то что я делал в хендлере command.

from typing import Dict

from telebot import TeleBot, types

import config

bot = TeleBot(config.BOT_TOKEN)

users: Dict = {}


def check_acces_to_command(user_id) -> bool:
    if check_in_users(user_id):
        if users[user_id]['acces_to_command'] is True:
            return True
    return False


def check_in_users(user_id) -> bool:
    if user_id in users:
        return True
    return False


@bot.message_handler(commands=['random_command_name'], func=lambda msg: check_acces_to_command(msg.from_user.id))
def command(message: types.Message):
    bot.send_message(chat_id=message.chat.id, text="если вы отключили команды, то эта не сработает")


@bot.message_handler(commands=['stop'], func=lambda msg: check_in_users(msg.from_user.id))
def stop(message: types.Message):
    bot.send_message(chat_id=message.chat.id, text="эта команда отключает доступ к командам")
    users[message.from_user.id]['acces_to_command'] = False


@bot.message_handler(commands=['start'])
def start(message: types.Message):
    users.setdefault(message.from_user.id, {'acces_to_command': True})
    bot.send_message(chat_id=message.chat.id, text="привет")


if __name__ == '__main__':
    bot.infinity_polling(skip_pending=True)

→ Ссылка