请问大佬们有什么屏蔽消息的思路吗
-
比如设定在某个群设定不接受某几个人的消息,而可以正常接受其他人的消息并执行相关指令
-
你可以使用 最高优先级 监听
MessageEvent
, 判断相关环境然后中断事件广播即可, 或者你可以尝试使用 QQ 自带的 屏蔽 功能Event 原型定义:
public interface Event { /** * 事件是否已被拦截. * * 所有事件都可以被拦截, 拦截后低优先级的监听器将不会处理到这个事件. * * @see intercept 拦截事件 */ public val isIntercepted: Boolean /** * 拦截这个事件 * * 当事件被 [拦截][Event.intercept] 后, 优先级较低 (靠右) 的监听器将不会被调用. * * 优先级为 [EventPriority.MONITOR] 的监听器不应该调用这个函数. * * @see EventPriority 查看优先级相关信息 */ public fun intercept() }
Example:
eventChannel.subscribeAlways<MessageEvent>(priority = EventPriority.HIGHEST) { // this: MessageEvent if (sender.id == 1234567890L) { intercept() } }
-
@karlatemp
咱这还出现Unresolved reference: EventPriority的问题,能帮我康康哪里错了吗QAQ -
priority = EventPriority.HIGHEST
, 没有@
的 -
@karlatemp 在 请问大佬们有什么屏蔽消息的思路吗 中说:
priority = EventPriority.HIGHEST
啊这,其实编译的时候没有@,是编译出错后不小心按到了@qwqwq
所以还是Unresolved reference: EventPriority的问题orz -
Alt+Enter, 等 IDEA 补全导入相关 import
-
-
@karlatemp 谢谢大佬,虽然咱最后还是没能成功,最后用了个很蠢很蠢的方法,在外面套一层if来解决的(つд⊂)
-
@picpo 很蠢的方法…难道是跟我一样吗(
// onGroupMessage(GroupMessageEvent event) if(this.main.getConfig().isBlackList(sender.getSenderID())) return; // do sth
-
@mrxiaom 草,还真一样
-
@mrxiaom
完全不会写...想拦截某群成员(其他机器人)的消息,让其他的插件不去处理某群员的消息.
试了QQ自带的屏蔽功能,在手机上确实有用但是到了机器人内还是能接受消息.
大佬能不能帮帮俺(真的属于小白 还没搞懂怎么写). -
@xing-c
因为上面已经有 kotlin 的示例了,这里只提 java 的示例。
所在环境是插件主类,所以可以用this.getCoroutineContext()
获取到当前协程,用 bot 实例的协程应该也是可以的。
Example1 - 使用事件频道注册单个事件eventChannel.subscribeAlways(GroupMessageEvent.class, this.getCoroutineContext(), ConcurrencyKind.CONCURRENT, EventPriority.HIGHEST, e ->{ if(e.getSender().getId() == 114514L) { e.intercept(); return; } });
Example2 - 在EventHost內注册事件
@EventHandler(priority = EventPriority.HIGHEST) public ListeningStatus onGroupMsg(GroupMessageEvent event) { if(event.getSender().getId() == 114514L) { event.intercept(); return ListeningStatus.LISTENING; } return ListeningStatus.LISTENING; }
只要多看文档都能写出来的,建议问前多翻阅文档 ✓
-
@mrxiaom 蟹蟹蟹蟹!
-
@MrXiaoM 大佬有完整代码吗
-
此回复已被删除! -
大佬,为什么删除了
-
@wuxianggujun 想说帖子里有人做了屏蔽某人的插件的,不过你们在讨论实现的方法。还是自己弄更有成就感XD
-
@daisy524 大佬,我使用intercept()拦截了自己消息,但是不管谁发送命令都没有反应*
-