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

2024-09-28 05:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

有人能给我建议一种方法,让用户可以存储和更新他们的用户令牌,插件获取相同的令牌并使用它来调用api吗?你知道吗

顺便说一句,我刚被介绍认识Chatops/Errbot并尝试了一些东西。如果有更好的方法,请告诉我。你知道吗


Tags: 方法用户插件api信息方式redmine用例
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:33

您询问如何存储所有插件都可以访问的信息。这可以通过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只是在用户配置文件设置中提供了一个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来更好地解析参数,进行更多的错误检查,等等

相关问题 更多 >

    热门问题