hubot - Hubot错误识别单个用户
问题描述
我有一个 Hubot 连接到我们的 Rocket.Chat 服务器。我们有一个 Cards Against Humanity 的游戏脚本。有一天,我和另一位玩家几乎同时加入,从那时起,Hubot 就认为我是另一位玩家。
使用下面的脚本对此进行测试,hubot 使用其他用户的名称和 ID 进行响应,而不是我自己的(也响应他而不是我):
return robot.respond(/who am i(\?)?/ig, function(msg) {
return msg.reply("*Id: *" + msg.message.user.id + "\n*Name: *" + msg.message.user.name);
});
我已尝试停止 hubot 进程并重新部署,但这并不能解决问题。它似乎在所有 Hubot 脚本中都存在,因为从那时起制作的其他脚本将我视为另一个玩家。
有什么方法可以撤消 Hubot 制作的任何玩家映射,或者有什么方法可以“重置”它,这样这个问题就消失了吗?我找不到有关用户存储不同步或其他任何人发生此问题的任何文档。
编辑:我还应该提到日志和控制台输出中的用户 ID 和名称(手动测试时)显示正确的名称和 ID(我自己的)。它只是不正确的,因为它被“解释”并发布到频道。我没有修改消息对象的代码。
解决方案
想通了这个问题。我们使用的是 MySQL Hubot Brain 适配器。由于某种原因,它覆盖了大脑数据中的用户名。通过更新大脑修复。
考虑到我看不到任何更新用户名的代码,不确定它是如何做到的。我猜它不是线程安全的,两个调用太靠近会导致问题。
推荐阅读
- r - 计算一组特定列的异常值,然后识别具有 >5 列的异常值的 id
- scala - 类型参数以确保关系运算符
- qt - 如何使 setWindowIcon 在独立的可执行文件(Qt5.14 + VS2019)中正常工作?
- javascript - 事务中的 Firebase 函数 admin.database() 空参数
- c# - C# Caliburn Micro 管理窗口/视图
- python - 返回函数是干什么用的?
- mysql - 如何在 MySQL 视图中安全地将名称转换为“经过清理的别名”?
- google-bigquery - BigQuery API 可以使用 create_table()(表插入)覆盖现有表/视图吗?
- c - 代码块运行我的代码并提供所需的输出,但随后说 link.exe 已停止工作
- powershell - Get-Command -Module MicrosoftTeams 不包括 Get-TeamChannelUser cmdlet