电报机器人的设计模式

Design pattern for telegram bot

我目前正在开发一个电报机器人,它将具有许多功能并且会非常复杂。我目前完成了机器人的一项功能,但代码已经难以管理。

例如,对话处理程序当前如下所示:

# BOT STATES
FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH = range(6)
# Callback data
ONE, TWO, THREE, FOUR, CANCEL = range(5)


conv_handler = ConversationHandler(
    entry_points=[CommandHandler('start', self.start)],
    states={
        FIRST: [
            CallbackQueryHandler(
                self.one, pattern='^' + str(ONE) + '$'),
            CallbackQueryHandler(
                self.cancel, pattern='^' + str(CANCEL) + '$'),
        ],
        SECOND: [
            CallbackQueryHandler(
                self.two, pattern='^' + str(TWO) + '$'),
            # extra handler here
            CallbackQueryHandler(
                self.five, pattern='^' + str(THREE) + '$')
        ],
        THIRD: [
            MessageHandler(Filters.text, self.three)
        ],
        FIFTH: [
            MessageHandler(Filters.text, self.six)
        ],
        FOURTH: [
            MessageHandler(Filters.text, self.four)
        ],
        SIXTH: [
            MessageHandler(Filters.text, self.seven)
        ]

    },
    fallbacks=[CommandHandler('cancel', self.cancel)]
)

随着机器人变得越来越复杂,我必须继续为机器人添加更多回调数据和更多状态。

我还必须继续向同一个 .py 文件添加更多函数以处理回调函数的使用:

def six(self, update, context):
    update.message.reply_text("Enter name")
    return SIXTH

有没有更好的方法来管理我的代码?或者我可以使用推荐的设计模式来更轻松地管理我的项目?

设计模式 "recipes" 旨在用于解决已知问题。 例如,如果你需要通知一个对象,当另一个对象改变时,你可以使用observer pattern.

在您的情况下,您似乎需要对架构进行一些修改,尝试确定可以使用设计模式抽象的点。

例如,如果您处于收到大量事件的情况,并且需要跟踪并对特定序列做出反应,也许值得考虑 state pattern or the strategy pattern

总的来说,我们的想法是既要尝试识别已知模式,又要尝试对您的软件进行建模,以便您可以陷入已知情况,这可以通过设计模式解决。