Остановка приема команд от пользователя
Есть бот написанный на 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)