在 Errbot 中个性化 API 调用/如何在 Errbot 中存储和访问用户特定信息?

Personalizing API calls in Errbot / How to store and access user specific information in Errbot?

在所有插件都可以访问的 Errbot 中存储和访问用户特定信息的最佳方式是什么?

我的用例是创建一个 Redmine(问题跟踪)插件,允许用户创建、更新、关闭、分配问题等。

这可以通过单个用户令牌获取,但这不可行,因为所有问题都将由同一用户编写、更新和记录时间。

有人可以向我推荐一种方法,以便用户可以存储和更新他们的用户令牌,并且插件可以获取相同的令牌并使用它来调用 api 吗?

P.S。我刚接触 Chatops/Errbot 并尝试了一些东西。如果有更好的方法请告诉我。

您询问存储所有插件都可以访问的信息。这可以通过 plugin dependencies 实现,但实际上似乎并不适用于您的用例,因为您似乎只需要这些用户令牌在您的 redmine 插件中进行 redmine,而不是任何其他插件。

Can someone suggest me a way so that users can store and update their user tokens and the plugin fetches the same and uses it to call apis?

首先,这取决于您的插件需要如何向 Redmine 验证自身。根据你的问题,我假设 Redmine 只是在你需要存储和使用的用户配置文件设置中提供了一个 API 密钥,所以我会接受它,但如果获取所述令牌的方法会变得更加复杂参与度更高。

所以假设用户可以从他的个人资料中获取他的 API 令牌并且只需要让机器人使用它,您可以:

  1. 为用户提供设置其 API 令牌的命令,使用 builtin persistence:

    存储它
    def activate(self):
        super().activate()
        if 'tokens' not in self:
            self['tokens'] = {}
    
    @botcmd
    def set_redmine_token(self, msg, args):
        # See http://errbot.io/en/latest/user_guide/plugin_development/persistence.html#caveats
        # for an explanation of the mutable thing.
        with self.mutable('tokens') as tokens:
            tokens[msg.frm.person] = args
        return "API token set"
    
  2. 当对 redmine 进行 API 调用时,您可以查看是否为发出命令的用户记录了令牌并使用它,否则显示错误:

    @botcmd
    def do_redmine_thing(self, msg, args):
        if msg.frm.person not in self['tokens']:
            return "I don't have a token for you, please set it with !set_redmine_token <token>"
    
        # Now do your API thing, using the token from
        # self['tokens'][msg.frm.person]
    

请注意,以上是一个非常简单的示例。您可能希望使用 arg_botcmd 而不是普通的 botcmd 以获得更好的参数解析、进行更多的错误检查等。