YuQWorks / YuQ-Mirai

GNU Affero General Public License v3.0
80 stars 14 forks source link

bot登录后重复调用上一次登录处理过的信息 #12

Closed jasonren0403 closed 3 years ago

jasonren0403 commented 4 years ago

bot上线调用第一条命令时,会把上一次登录最后的2-3条命令一起带出来,不知道是mirai本身还是yuq-mirai框架的问题。 该控制器有这样的定义

@Path("lethe \\(arc|arcaea|韵律源点)\\")
@Action("\\(绑定|bind)\\ {arcID}")
    public String arcbind(String arcID) {
        if (!arcID.matches("\\d{9}")) {
            return "arcID格式不对哦~应该是9位数字吧?";
        }
        return "你要绑定的arcID是 " + arcID;
    }

消息流是这样的,可以看到bot重发了上一次登录时的命令响应!

Bot ============================= 我
(不响应,因为不匹配) <-----lethe arc 绑定
                                         <-----lethe arc bind 000000009
 你要绑定的arcID是 000000009-------->
 (不响应,因为不匹配)<----ccc
=============断开一次登录============
                                         <-----lethe arc bind 123456789
你要绑定的arcID是 000000009 (!)--------->
你要绑定的arcID是 123456789---------->

从log来看,应该是上次登录时用户给bot发送的信息被重新分配了过来,从而会让框架中的相应逻辑处理一下,造成额外的输出

2020-08-11 10:10:21,757 INFO  c.i.y.m.l.Network@[DefaultDispatcher-worker-5] - ConfigPushSvc.PushReq: Success
2020-08-11 10:10:56,820 INFO  c.i.y.RainBot@[DefaultDispatcher-worker-4] - Receive Private Message: Friend(Gz♬☆J.R.best(*)), Message([ "lethe arc bind 000000009" ])  <-------注意,这条是上次bot登录时发送的!
------ Log Debug ------:: JrbotAPP:MessageEvent     : 消息来自:*
2020-08-11 10:10:57,025 INFO  c.i.y.m.e.ContactImpl@[DefaultDispatcher-worker-4] - Friend(Gz♬☆J.R.best(*)) <- Message([ "你要绑定的arcID是 000000009" ])    <---------根据那一条信息进行路由处理
2020-08-11 10:10:57,029 INFO  c.i.y.RainBot@[DefaultDispatcher-worker-4] - Receive Private Message: Friend(Gz♬☆J.R.best(*)), Message([ "lethe arc bind 123456789" ])
------ Log Debug ------:: JrbotAPP:MessageEvent     : 消息来自:*
2020-08-11 10:10:57,121 INFO  c.i.y.m.e.ContactImpl@[DefaultDispatcher-worker-4] - Friend(Gz♬☆J.R.best(*)) <- Message([ "你要绑定的arcID是 123456789" ])