Slack API Bolt-JS的app.message触发异常,如何隔离消息处理器?
问题解决方法
你的问题并非say命名空间被占用,Slack Bolt框架默认会按顺序执行所有匹配消息规则的处理器。即便消息看似不匹配第二个规则却触发了它,大概率是事件重复触发或规则匹配逻辑存在隐式问题,以下两种方法可实现处理器隔离:
方法一:终止后续处理器执行
在第一个处理器中调用next(false),阻止后续处理器继续执行:
app.message(/Foo/i, async ({ message, say, next }) => { await say("Bar!"); await next(false); // 停止后续处理链 }) app.message(/Snoo/i, async ({ message, say }) => { await say("Reddit!") })
方法二:使用精确匹配缩小触发范围
如果希望规则仅匹配完整消息内容,可修改正则为精确匹配模式,避免消息中包含目标字符串时误触发其他规则:
app.message(/^Foo$/i, async ({ message, say }) => { await say("Bar!") }) app.message(/^Snoo$/i, async ({ message, say }) => { await say("Reddit!") })
若同时结合next(false),可彻底实现两个处理器的隔离执行。
内容的提问来源于stack exchange,提问作者Trip
相关产品推荐
相关产品推荐

