2

为了简洁起见,我目前正在设计一个聊天机器人,这是我所拥有的简化版本。

一个主模块

import bot
<import Command>
bot.connect()
def msg_handler(msg):
    
bot.handle_message(Command.handler)
bot.start()

指令模块

def handler(msg):
    if msg.startswith("!"):
        prefix,rest = get_command_prefix(msg)
        if prefix in <handlers>:
            <handlers>[prefix](rest)

例如多个特定命令

<register>
def echo(msg):
    send(msg)

所以我的问题是如何将这些连接在一起

具体来说,我如何将各种命令注册到具有共享代码的中央模块

我考虑过的一些选项

给每个模块一个init注册它的函数

def init(registry):
    registry.register(name,handler)

一些缺点是大多数初始化函数几乎相同,而且非常明确

装饰器和导入

import Registry

@Registry.register
def echo(...):
   ...

这里的问题是,如果注册表移动或稍微更改,这可能意味着更改每个命令

一些最后的笔记

  • 不知道运行时有多少个模块
  • 我正在尝试最大程度地减少代码重复
  • 能够在运行时加载其他模块会很好
  • command.py 和 main.py 之间出现了类似的问题,因此分层或多级解决方案会很好

是否有解决此类问题的通用/已知方法

编辑

一个小小的想法是,特定的“command.py”可能会有所不同,例如普通版本和测试版本,这可能会使我的第二个提案不适用

4

0 回答 0