1

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

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

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

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

PS我刚刚被介绍给Chatops/Errbot并尝试了一些东西。请让我知道是否有更好的方法。

4

1 回答 1

2

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

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

首先,这取决于您的插件需要如何向 Redmine 进行身份验证。根据您的问题,我假设 Redmine 只是在您需要存储和使用的用户配置文件设置中提供了一个 API 密钥,所以我会继续这样做,但如果获取所述令牌的方法涉及更多,它会变得更加复杂。

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

  1. 为用户提供一个命令来设置他们的 API 令牌,使用内置的持久性存储它:

    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_botcmdover plainbotcmd来更好地解析参数、进行更多错误检查等。

于 2016-12-14T16:10:22.237 回答