Максим Кусь Asked:2022-08-29 21:36:58 +0800 CST2022-08-29 21:36:58 +0800 CST 2022-08-29 21:36:58 +0800 CST 停止接受用户的命令 772 有一个用 PyTelegramBotApi 编写的机器人,是否可以发出命令来禁止接收来自用户的命令?即 /stop 与 /start 命令相反,即重置为用户尚未写入机器人时的状态 python 1 个回答 Voted Best Answer oleksandrigo 2022-08-29T21:59:58+08:002022-08-29T21:59:58+08:00 如果您没有用户,请与用户一起制作字典。好吧,还是DB。启动机器人时,将用户写入字典,并默认授予对命令 True 的访问权限。我们创建了几个函数来检查数据库中用户的存在以及对命令的访问权限。好吧,在每个函数/处理程序上,我们都做我在命令处理程序中所做的事情。 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)
如果您没有用户,请与用户一起制作字典。好吧,还是DB。启动机器人时,将用户写入字典,并默认授予对命令 True 的访问权限。我们创建了几个函数来检查数据库中用户的存在以及对命令的访问权限。好吧,在每个函数/处理程序上,我们都做我在命令处理程序中所做的事情。