CMHopeSunshine / nonebot-plugin-learning-chat

Nonebot2插件,让Bot学习群友的发言和表情包。/ Nonebot2 plugin to learn what your group members say.
GNU Affero General Public License v3.0
164 stars 5 forks source link

主动发言连续多次发同一内容 #18

Closed YaoKong closed 9 months ago

YaoKong commented 1 year ago

群聊参数:回复阈值设为2 问题描述: 机器人每隔一段时间就主动发同一句话,这句话之前在群里只出现过一次。 我查了下数据库,发现count >= 2的answer在该群只有几条,我猜测,一开始随机选择一条count为1的消息发出去后,插件没有屏蔽机器人自己发送的消息,导致该消息的count+1,权重提高后机器人越来越倾向于选这条消息,最后变为必选。 如果确实这样,希望别改成屏蔽机器人自己发的消息,因为有时候要自己上号发消息让机器人学习,改成加入speak_list前把count减一就行了。 为了避免每次都主动发同一句话,我想了几个办法供参考:

如果大佬有更好的办法,千万不要拘泥于我的想法

CMHopeSunshine commented 1 year ago

https://github.com/CMHopeSunshine/nonebot-plugin-learning-chat/blob/1c9d2ed9895311b1ee1c370d2a6e3d5fc5bb87e3/nonebot_plugin_learning_chat/handler.py#L404 一开始是取出所有>=count的context,从中随机发送一条,而不是随机选count为1的。 如果用的是go-cqhttp,gocq默认是不会上报自身消息的,nonebot2也不会处理自身消息(因此您说的不屏蔽自己发的消息是做不到的),本插件只会将自己的发言存到聊天消息库了,只有别人的发言才会触发on_message()这个matcher使count+1,所以应该不是您想的这种情况,我觉得单纯只是因为该群>=阈值的context太少,对于这种情况,会根据第二条建议,降低下第一条answer的count限制,感谢建议。

YaoKong commented 1 year ago

感谢回答,确实我理解错了,我还以为主动发言的回复阈值也会受到回复阈值权重的影响

watershed117 commented 10 months ago

我全部默认设置也是一直只发一条固定消息

YaoKong commented 10 months ago

我全部默认设置也是一直只发一条固定消息

更新下插件,实在不行把发言条件去掉,改成随机发送