MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    请问大佬们有什么屏蔽消息的思路吗

    开发交流
    6
    18
    2367
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • PiCpo
      PiCpo 最后由 编辑

      比如设定在某个群设定不接受某几个人的消息,而可以正常接受其他人的消息并执行相关指令

      1 条回复 最后回复 回复 引用 0
      • Karlatemp
        Karlatemp 最后由 Karlatemp 编辑

        你可以使用 最高优先级 监听 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()
            }
        }
        
        PiCpo 1 条回复 最后回复 回复 引用 1
        • PiCpo
          PiCpo @Karlatemp 最后由 编辑

          @karlatemp f06022d3-aee7-4167-a646-a6e582413a71-图片.png
          咱这还出现Unresolved reference: EventPriority的问题,能帮我康康哪里错了吗QAQ

          1 条回复 最后回复 回复 引用 0
          • Karlatemp
            Karlatemp 最后由 编辑

            priority = EventPriority.HIGHEST, 没有 @ 的

            PiCpo 1 条回复 最后回复 回复 引用 0
            • PiCpo
              PiCpo @Karlatemp 最后由 编辑

              @karlatemp 在 请问大佬们有什么屏蔽消息的思路吗 中说:

              priority = EventPriority.HIGHEST

              啊这,其实编译的时候没有@,是编译出错后不小心按到了@qwqwq
              所以还是Unresolved reference: EventPriority的问题orz

              1 条回复 最后回复 回复 引用 0
              • Karlatemp
                Karlatemp 最后由 编辑

                Alt+Enter, 等 IDEA 补全导入相关 import

                1 条回复 最后回复 回复 引用 0
                • Karlatemp
                  Karlatemp 最后由 编辑

                  RVI.png

                  PiCpo 1 条回复 最后回复 回复 引用 0
                  • PiCpo
                    PiCpo @Karlatemp 最后由 编辑

                    @karlatemp 谢谢大佬,虽然咱最后还是没能成功,最后用了个很蠢很蠢的方法,在外面套一层if来解决的(つд⊂)

                    MrXiaoM 1 条回复 最后回复 回复 引用 0
                    • MrXiaoM
                      MrXiaoM 童心未泯 @PiCpo 最后由 编辑

                      @picpo 很蠢的方法…难道是跟我一样吗(

                      // onGroupMessage(GroupMessageEvent event)
                      if(this.main.getConfig().isBlackList(sender.getSenderID())) return;
                      // do sth
                      
                      PiCpo X 2 条回复 最后回复 回复 引用 0
                      • PiCpo
                        PiCpo @MrXiaoM 最后由 编辑

                        @mrxiaom 草,还真一样

                        1 条回复 最后回复 回复 引用 1
                        • X
                          Xing-C @MrXiaoM 最后由 编辑

                          @mrxiaom
                          完全不会写...想拦截某群成员(其他机器人)的消息,让其他的插件不去处理某群员的消息.
                          试了QQ自带的屏蔽功能,在手机上确实有用但是到了机器人内还是能接受消息.
                          大佬能不能帮帮俺(真的属于小白 还没搞懂怎么写).

                          MrXiaoM 1 条回复 最后回复 回复 引用 0
                          • MrXiaoM
                            MrXiaoM 童心未泯 @Xing-C 最后由 编辑

                            @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;
                            	}
                            

                            只要多看文档都能写出来的,建议问前多翻阅文档 ✓

                            X W 2 条回复 最后回复 回复 引用 1
                            • X
                              Xing-C @MrXiaoM 最后由 编辑

                              @mrxiaom 蟹蟹蟹蟹!

                              1 条回复 最后回复 回复 引用 0
                              • W
                                wuxianggujun @MrXiaoM 最后由 编辑

                                @MrXiaoM 大佬有完整代码吗

                                1 条回复 最后回复 回复 引用 0
                                • daisy524
                                  daisy524 最后由 编辑

                                  此回复已被删除!
                                  1 条回复 最后回复 回复 引用 0
                                  • W
                                    wuxianggujun 最后由 编辑

                                    大佬,为什么删除了

                                    daisy524 1 条回复 最后回复 回复 引用 0
                                    • daisy524
                                      daisy524 @wuxianggujun 最后由 编辑

                                      @wuxianggujun 想说帖子里有人做了屏蔽某人的插件的,不过你们在讨论实现的方法。还是自己弄更有成就感XD

                                      W 1 条回复 最后回复 回复 引用 0
                                      • W
                                        wuxianggujun @daisy524 最后由 编辑

                                        @daisy524 大佬,我使用intercept()拦截了自己消息,但是不管谁发送命令都没有反应*

                                        1 条回复 最后回复 回复 引用 0
                                        • Referenced by  Karlatemp Karlatemp 
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact