我想创建一个基本上是布尔值的变量(无论机器人是否工作)。
但是,当使用 TeleBot.polling() 时,脚本开始无限循环,所以如果我在代码开头设置一个变量就像:
is_bot_working = True
,变量将始终为真,反之亦然。
那么,我应该如何设置一个不受循环影响的变量?
这就是代码:
import telebot
bot = telebot.TeleBot(TOKEN)
is_bot_working: bool = True
@bot.message_handler(commands=['start'])
def start(message) -> None:
is_bot_working = True
@bot.message_handler(commands=['stop'])
def stop(message) -> None:
is_bot_working = False
bot.polling(non_stop=True)
你的问题在于,在
start
和
stop
函数内部设置
is_bot_working
变量时,你只是在修改局部变量,而不是全局变量。
为了修改全局变量,你需要在函数内部使用
global
关键字声明它。
以下是修改后的代码:
import telebot
bot = telebot.TeleBot(TOKEN)
# 将变量初始化为 False,因为机器人最初未运行
is_bot_working: bool = False
@bot.message_handler(commands=['start'])
def start(message) -> None:
global is_bot_working # 声明要修改全局变量
is_bot_working = True
@bot.message_handler(commands=['stop'])
def stop(message) -> None:
global is_bot_working # 声明要修改全局变量
is_bot_working = False
bot.polling(non_stop=True)
现在,当
/start
命令被调用时,
is_bot_working
将被设置为
True
,而当
/stop
命令被调用时,它将被设置为
False
。这些更改将反映在全局变量中,并且可以在代码的其他部分访问。
另外,你可以考虑使用其他方法来存储机器人的状态,例如:
- 使用数据库: 可以将机器人的状态存储在数据库中,例如 SQLite 或 Redis。这将允许你在程序的不同运行实例之间持久化状态。
- 使用配置文件: 可以将机器人的状态存储在配置文件中,例如 YAML 或 JSON 文件。
这些方法可以提供比使用全局变量更健壮和可扩展的解决方案,特别是对于更复杂的应用程序。
标签:python,telegram-bot,python-telegram-bot,py-telegram-bot-api From: 78774283