首页 > 编程问答 >Python pyTelegramBotAPI:设置不受循环影响的变量

Python pyTelegramBotAPI:设置不受循环影响的变量

时间:2024-07-21 10:51:26浏览次数:9  
标签:python telegram-bot python-telegram-bot py-telegram-bot-api

我想创建一个基本上是布尔值的变量(无论机器人是否工作)。

但是,当使用 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

相关文章

  • 编解码器无法解码位置 2-3 中的字节:截断的 \UXXXXXXXX 转义 (Python QREADER)
    我正在尝试pythonqreader模块,但每次我尝试运行它时,我都会收到SyntaxError:(unicodeerror)'unicodeescape'codeccan'tDecodebytesinposition2-3:truncated\UXXXXXXXXescapeerror.fromqreaderimportQReaderfromcv2importQRCodeDetector,imreadfrompyz......
  • Python 工程师对 3D 高斯溅射的介绍(第 1 部分)
    从Python工程师的角度理解和编写GaussianSplatting欢迎来到雲闪世界。2023年初,来自法国蔚蓝海岸大学和马克斯普朗克信息研究所的作者发表了一篇题为“用于实时场渲染的3D高斯溅射”的论文。¹该论文展示了实时神经渲染的重大进步,超越了NeRF等先前方法的实用性。²......
  • 使用Python读取PDF文件,部分内容显示为一串乱码。我应该如何恢复它?
    使用Python读取PDF文件,部分内容显示为一串乱码。我该如何恢复它?importfitzdoc=fitz.open("2303.11366v4.pdf")#downloadfromhttps://arxiv.org/pdf/2303.11366print(doc[2].get_text().split('Figure1')[0])我得到了这样的文字:<RXDUHLQWKHPLGGOHRIDURRP>@7DVN......
  • Python 迭代列表
    分配sum_extra给定列表test_grades收到的额外学分总额。满分是100分,所以超过100分都是额外分。对于给定程序,sum_extra是8,因为1+0+7+0是8。给定程序的示例输出:额外总和:8请原谅我,我是编码新手,而且真的很糟糕!这是我的代码(不起作用)请......
  • 计算机毕业设计Python+Spark新能源汽车推荐系统 汽车大数据 汽车数据分析 汽车可视化
    表2黄河交通学院本科毕业设计(论文)开题报告学生姓名刘丹杰专业班级20本大数据一班学号2080910T01521设计(论文)题目基于Hadoop的新能源汽车销售数据分析系统的设计与实现选题的目的和意义:选题目的:新能源汽车销售数据分析系统的设计与实现旨在利用Hadoop等大数......
  • 为什么我的 python 程序一直说没有名为“PIL”的模块?
    我正在pythonIDLEshell中工作,由于某种原因pyautogui.locateOnScreen将无法工作。这是我的代码:frompyautoguiimport*importpyscreezeimportpyautoguiimporttimeimportkeyboardimportrandomimportwin32api,win32conwhile1:ifpyautogui.locateOnS......
  • 我在 Python 时间格式化函数中遇到代码问题
    我一直在研究一个Python函数,将给定的秒数转换为可读的时间格式(HH:MM:SS)。该函数对于大多数测试用例都能正常工作,但对于一些特定的输入会失败。这是我编写的函数:defmake_readable(seconds):ifseconds<60:s1=secondsh1,m1=(0,0)return......
  • 《流畅的Python》第二版 第11章
     fromarrayimportarrayimportmathclassVector2d:__match_args__=('x','y')typecode='d'def__init__(self,x,y):self.__x=float(x)self.__y=float(y)@propertydefx(self)......
  • 《流畅的Python》第二版 第12章
       fromarrayimportarrayimportmathimportfunctoolsimportitertoolsimportoperatorimportreprlibclassVector:typecode='d'def__init__(self,components):self._components=array(self.typecode,components)......
  • 如何在Python中给jupyter单元标准输入?
    我正在尝试在接受用户输入的jupyter笔记本上运行一个程序,但我不知道如何让它读取标准输入。例如,如果我使用shift-enter:a=input()print(a)运行代码,则单元格指示它正在运行,但不接受我的输入。我如何让它接受输入?你遇到的问题是Jupyternotebook中的代码单元默认......