【问题标题】:How to design python code for telegram (telebot lib)?如何为电报(telebot lib)设计python代码?
【发布时间】:2021-12-04 09:10:06
【问题描述】:

我正在开发一个电报机器人,我有很多处理程序来处理用户的响应。

由于有许多处理程序,并且许多不同的对话框也是可能的。我将一些处理程序移动到不同的类(对话框)

import telebot
bot = telebot.TeleBot(tg_api_key)

@bot.message_handler(commands=['buy_something'])

def buy(message):

    from dialogs.buy_something
    import Buy_Dialog
    w = Buy_Dialog(bot, message)

和:

@bot.message_handler(commands=['sell_something'])

def sell(message):
    from dialogs.sell_something 
    import Sell_Dialog
    w = Sell_Dialog(bot, message)

在对话类中,我可以通过以下方式向用户发送问题并从他们那里获得答案:

self.m = self.bot.send_message(message.chat.id, "Some question")
self.bot.register_next_step_handler(self.m, self.enter_your_name)

但现在我需要从按钮点击的用户回调中获取:

@bot.callback_query_handler(func=lambda call: True)
def button_click_yes_or_no(self, call):

所以我只能从main.py 中捕获它们,而不是在对话框内。

如何重新设计代码以获得清晰的逻辑和能够捕捉button_callback的代码?

【问题讨论】:

    标签: python telegram py-telegram-bot-api


    【解决方案1】:

    也许函数看不到您的变量尝试在代码开头使您的变量成为全局变量:

    global your variable, another variable
    

    【讨论】:

      【解决方案2】:

      您无法从类实例内部捕获回调。

      但是您可以遵循与命令相同的逻辑:创建一个修饰的通用函数来捕获所有调用,并根据调用的内容(call.datacall.message.chat.id)将每个调用传递给适当的类实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 2022-10-18
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 2022-12-18
        相关资源
        最近更新 更多