MiraiForum

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

    Mirai Administrator 机器人管理插件,好友/群管理,黑名单,宵禁

    插件发布
    群管 黑名单 群发消息 宵禁 进群审核
    62
    335
    75564
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • cssxsh
      cssxsh 最后由 cssxsh 编辑

      Mirai Administrator

      基于 Mirai Console 的 管理员 Bot 及其标准

      Release
      Downloads
      maven-central
      Codacy Badge

      使用前应该查阅的相关文档或项目

      • User Manual
      • Permission Command
      • Chat Command

      本插件实现的功能有:

      • 联系人相关 自动审批,指令查看,用户留言
      • 消息相关 发送消息,撤回消息
      • 群管理相关 群消息审核,自动宵禁,自动清理不发言,禁言自动退群

      本插件提供服务接口以供其他插件拓展功能
      例如使用 Mirai Content Censor 依靠百度API审查群消息
      例如使用 Mirai Authenticator 验证加群请求

      MCL 指令安装

      请确认 mcl.jar 的版本是 2.1.0+
      ./mcl --update-package xyz.cssxsh.mirai:mirai-administrator --channel maven-stable --type plugin

      指令

      注意: 使用前请确保可以 在聊天环境执行指令
      <...>中的是指令名
      [...]表示参数,当[...]后面带?时表示参数可选

      本插件指令权限ID 格式为 xyz.cssxsh.mirai.plugin.mirai-administrator:command.*, * 是指令的第一指令名
      例如 /send to 12345 的权限ID为 xyz.cssxsh.mirai.plugin.mirai-administrator:command.send
      对 机器人发送的联系人请求通知消息 回复 同意 或 不同意 或 拉黑 即可处理
      插件提供黑名单功能,使用指令 /contact black u12345, 即可拉黑用户,Bot将不响应用户动作(包括其他插件的功能)

      AdminContactCommand

      Command Description
      /<contact> <delete> [contact] 删除联系人
      /<contact> <handle> [id] [accept]? [black]? 处理联系人申请
      /<contact> <request> 查看申请列表
      /<contact> <black> {permitteeIds} 拉黑
      /<contact> <white> {permitteeIds} 取消拉黑
      /<contact> <backup> 触发备份功能
      1. id 是 事件id 或 好友id 或 群id
      2. accept 和 black 参数为 true, yes, enabled, on, 1 时表示 true (不区分大小写)
      3. 对 机器人发送的新联系人通知消息 回复 同意 或 不同意 或 拉黑 即可处理,详见 联系人审批配置
      4. permitteeIds 是 权限系统的用户标识符,例如 m12345.6789, 可以提供多个 PermitteeId 一次性拉黑/取消拉黑
      5. 黑名单通过 @EventHandler(priority = EventPriority.HIGH, concurrency = ConcurrencyKind.LOCKED) 拦截消息

      AdminFriendCommand

      Command Description
      /<friend> <list> 好友列表
      /<friend> <delete> [friend] 删除好友

      AdminGroupCommand

      Command Description
      /<group> <list> 群列表
      /<group> <member> [group] 群成员
      /<group> <quit> [group] 退出群聊
      /<group> <kick> [member] [reason]? [black]? 踢出群员
      /<group> <nick> [member] [nick] 群昵称
      /<group> <title> [member] [title] 群头衔
      /<group> <mute> [member] [second] 禁言
      /<group> <quiet> [group] [open]? 全体禁言
      /<group> <admin> [member] [operation]? 设置管理员
      /<group> <announce> [group] 设置公告
      /<group> <rank> [group] {levels} 设置等级头衔

      AdminRecallCommand

      Command Description
      /<recall> [contact]? 撤回消息
      1. 不指定contact时,可以通过回复消息指定要撤销的消息,如果没有指定,将尝试撤销最后一条不是由指令发送者发送的消息
      2. contact是群员时,将尝试撤销这个群员的最后一条消息
      3. contact是群或好友时,将尝试撤销bot的最后一条消息

      AdminRegisteredCommand

      Command Description
      /<registered> 查看已注册指令
      /<reg> 查看已注册指令

      AdminSendCommand

      Command Description
      /<send> <groups> [bot]? [at]? [second]? 发送给所有群
      /<send> <friends> [bot]? [second]? 发送给所有好友
      /<send> <to> [contact] [at]? 发送给指定联系人
      /<send> <nudge> [user] 戳一戳指定联系人
      /<send> <log> {addresses} 备份日志到邮箱
      1. bot 参数在命令行模式下需要指定
      2. at 参数为 true, yes, enabled, on, 1 时表示 true, 将附加一个At
      3. second 参数为 延迟的秒数 例如 /send groups 123456 false 10
      4. addresses 参数为 邮箱地址

      AdminTimerCommand

      Command Description
      /<timer> <config> 显示当前设置
      /<timer> <mute> [moment] [cron] [group]? 宵禁
      /<timer> <cleaner> [day] [cron] [group]? 清理不发言
      /<timer> <status> [cron] [bot]? 定时发送机器人状态
      /<timer> <message> [cron] [target] [at] 定时发送消息
      1. group 为 要操作的群,在群聊中可以不指定

      2. cron, 为 CRON 表达式, 由 秒 分钟 小时 日 月 周 组成
        例如 0 0 1 * * ? 表示每天 01:00 执行一次,0 30 2 ? * 2-6 表示星期一至星期五 每天 02:30 执行一次
        可以使用在线编辑器生成 https://www.bejson.com/othertools/cron/
        为防止被 空格 分成多个参数,请使用 " 包裹参数

      3. moment 为 DURATION 表达式, 由 PnDTnHnMn.nS 组成
        例如 P1DT2H3M4.5S 表示 一天二小时三分钟四点五秒,PT5H 表示 五小时

      4. mute 指令,moment 小于 0 宵禁就会关闭
        例如 /timer mute PT5H "0 0 1 ? * 2-6", 将会在 星期一到星期五的凌晨01:00 禁言 5 小时
        例如 /timer mute PT0S "0 0 0 1 * ?", 将会 取消 禁言定时器

      5. day 单位为天数的发言期限, 小于 0 宵禁就会关闭
        例如 /timer cleaner 365 "0 0 12 ? * 0", 将会 取消 禁言定时器

      配置

      联系人审批配置

      1. AdminAutoApproverConfig.yml

      禁言自动退群配置

      1. AdminAutoQuitConfig.yml
      2. mute_limit 大于这个设置秒数的禁言会触发自动退群

      留言配置

      1. AdminCommentConfig.yml
      2. xyz.cssxsh.mirai.plugin.mirai-administrator:comment.include 作用: 拥有此权限的用户,可以给机器人留言

      机器人上线消息配置

      1. AdminOnlineMessageConfig.yml
      2. xyz.cssxsh.mirai.plugin.mirai-administrator:online.include 作用: 拥有此权限的群,会发送上线通知

      消息审查及机器人所有者

      1. AdminSetting.yml
      2. censor_types 可选值 IMAGE, FLASH, SERVICE, APP, AUDIO, FORWARD, VIP, MARKET, MUSIC, POKE
      3. 正则词库, 须手动添加,将会加载 censor 文件夹中的 txt 文件,每一行对应一个正则匹配,会监听文件改动,无需重启

      邮件配置

      1. AdminMailConfig.yml 配置一些默认的发送对象
      2. admin.mail.properties 配置邮箱账号等

      格式参考

      mail.host=smtp.mail.qq.com
      mail.auth=true
      mail.user=xxx
      mail.password=***
      mail.from=cssxsh@qq.com
      mail.store.protocol=smtp
      mail.transport.protocol=smtp
      # smtp
      mail.smtp.starttls.enable=true
      mail.smtp.auth=true
      mail.smtp.timeout=15000
      

      QQ邮箱帮助: https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

      K A A S X 5 条回复 最后回复 回复 引用 3
      • S
        sanctuary 最后由 编辑

        太6了66666666666666

        1 条回复 最后回复 回复 引用 0
        • K
          kissqianfu321 @cssxsh 最后由 编辑

          @cssxsh {[0]P_BT7C0.png 有个小BUG 对所有人群发消息后 还会跟着提示信息

          cssxsh 1 条回复 最后回复 回复 引用 0
          • cssxsh
            cssxsh @kissqianfu321 最后由 编辑

            @kissqianfu321
            1.0.1 修复,重复读取消息了

            K 1 条回复 最后回复 回复 引用 0
            • K
              kissqianfu321 @cssxsh 最后由 编辑

              @cssxsh 好 不过 gitee上的包 最好能及时更新 因为主仓在Gitee啊 ○| ̄|_

              1 条回复 最后回复 回复 引用 0
              • C
                CLanmao 摸鱼 最后由 编辑

                和AutoGroup 折磨群友插件一起用的时候,AutoGroup 折磨群友插件的戳一戳会导致插件报错
                AutoGroup 折磨群友插件

                2022-02-07 11:06:15 V/Bot.3517372535: Event: NudgeEvent(from=Bot(3517372535), target=NormalMember(3565601730), subject=Group(1039019092), action=戳了戳, suffix=的0x0000006E)
                2022-02-07 11:06:15 W/mirai-administrator: MiraiAdministrator with NudgeEvent(from=Bot(3517372535), target=NormalMember(3565601730), subject=Group(1039019092), action=戳了戳, suffix=的0x0000006E)
                java.lang.reflect.InvocationTargetException
                        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
                        at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
                        at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113)
                        at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
                        at kotlin.reflect.full.KCallables.callSuspend(KCallables.kt:56)
                        at net.mamoe.mirai.internal.event.JvmMethodListenersInternalKt.registerEventHandler$callFunction(JvmMethodListenersInternal.kt:80)
                        at net.mamoe.mirai.internal.event.JvmMethodListenersInternalKt.access$registerEventHandler$callFunction(JvmMethodListenersInternal.kt:1)
                        at net.mamoe.mirai.internal.event.JvmMethodListenersInternalKt$registerEventHandler$8.invokeSuspend(JvmMethodListenersInternal.kt:110)
                        at net.mamoe.mirai.internal.event.JvmMethodListenersInternalKt$registerEventHandler$8.invoke(JvmMethodListenersInternal.kt)
                        at net.mamoe.mirai.internal.event.JvmMethodListenersInternalKt$registerEventHandler$8.invoke(JvmMethodListenersInternal.kt)
                        at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:455)
                        at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
                        at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
                        at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:50)
                        at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
                        at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
                        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
                        at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
                        at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
                        at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:50)
                        at net.mamoe.mirai.internal.event.InternalEventListenersKt.process(InternalEventListeners.kt:166)
                        at net.mamoe.mirai.internal.event.InternalEventListenersKt.callAndRemoveIfRequired(InternalEventListeners.kt:115)
                        at net.mamoe.mirai.event._EventBroadcast.broadcastImpl(Event.kt:174)
                        at net.mamoe.mirai.IMirai.broadcastEvent(IMirai.kt:318)
                        at net.mamoe.mirai.internal.MiraiImpl.broadcastEvent$suspendImpl(MiraiImpl.kt:308)
                        at net.mamoe.mirai.internal.MiraiImpl.broadcastEvent(MiraiImpl.kt)
                        at net.mamoe.mirai.event._EventBroadcast.broadcastPublic$suspendImpl(Event.kt:161)
                        at net.mamoe.mirai.event._EventBroadcast.broadcastPublic(Event.kt)
                        at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:146)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invokeSuspend(EventDispatcher.kt:90)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invoke(EventDispatcher.kt)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invoke(EventDispatcher.kt)
                        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
                        at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
                        at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcast$suspendImpl(EventDispatcher.kt:89)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcast(EventDispatcher.kt)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invokeSuspend(EventDispatcher.kt:105)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invoke(EventDispatcher.kt)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invoke(EventDispatcher.kt)
                        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
                        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
                        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
                        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
                        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
                        at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcastAsync-kKe4JaQ(EventDispatcher.kt:102)
                        at net.mamoe.mirai.internal.network.components.EventDispatcher.broadcastAsync-kKe4JaQ$default(EventDispatcher.kt:35)
                        at net.mamoe.mirai.internal.network.components.EventBroadcasterPacketHandler.impl(PacketHandler.kt:87)
                        at net.mamoe.mirai.internal.network.components.EventBroadcasterPacketHandler.impl(PacketHandler.kt:80)
                        at net.mamoe.mirai.internal.network.components.EventBroadcasterPacketHandler.handlePacket(PacketHandler.kt:73)
                        at net.mamoe.mirai.internal.network.components.PacketHandlerChain.handlePacket(PacketHandler.kt:42)
                        at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invokeSuspend(NetworkHandlerSupport.kt:84)
                        at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invoke(NetworkHandlerSupport.kt)
                        at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invoke(NetworkHandlerSupport.kt)
                        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
                        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
                        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
                        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
                        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
                        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
                        at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source)
                        at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport.collectReceived$mirai_core(NetworkHandlerSupport.kt:82)
                        at net.mamoe.mirai.internal.network.impl.netty.NettyNetworkHandler$PacketDecodePipeline$send$1.invokeSuspend(NettyNetworkHandler.kt:178)
                        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
                        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
                        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
                        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
                        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
                        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
                        at java.base/java.lang.Thread.run(Unknown Source)
                Caused by: java.lang.ClassCastException: class net.mamoe.mirai.internal.QQAndroidBot cannot be cast to class net.mamoe.mirai.contact.Member (net.mamoe.mirai.internal.QQAndroidBot and net.mamoe.mirai.contact.Member are in unnamed module of loader 'app')
                        at xyz.cssxsh.mirai.plugin.MiraiAdministrator.mark$mirai_administrator(MiraiAdministrator.kt:298)
                        ... 75 more
                
                cssxsh 1 条回复 最后回复 回复 引用 0
                • cssxsh
                  cssxsh @CLanmao 最后由 编辑

                  @clanmao
                  1.0.2 修复

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

                    1.png

                    每次启动机器人后都会推送一次状态 启动之后每间隔1小时推送一次 如果是专门加的 当我没说orz

                    cssxsh 1 条回复 最后回复 回复 引用 0
                    • cssxsh
                      cssxsh @kissqianfu321 最后由 编辑

                      @kissqianfu321
                      专门加的功能,用于定期查阅机器人的状态

                      K 1 条回复 最后回复 回复 引用 0
                      • K
                        kissqianfu321 @cssxsh 最后由 编辑

                        @cssxsh 好的

                        1 条回复 最后回复 回复 引用 0
                        • G
                          greenhandzdl 摸鱼 最后由 编辑

                          MA 似乎连AdminSetting.yml生成不了,而且lp也查不到该插件的权限

                          cssxsh 1 条回复 最后回复 回复 引用 0
                          • A
                            atonioy @cssxsh 最后由 cssxsh 编辑

                            @cssxsh

                            加载这个插件的时候报的错,好像AdminSetting.yml也没生成

                            2022-02-08 15:00:51 E/mirai-administrator: java.lang.NoSuchMethodError: 'kotlin.reflect.KType kotlin.jvm.internal.Reflection.mutableCollectionType(kotlin.reflect.KType)'
                            java.lang.NoSuchMethodError: 'kotlin.reflect.KType kotlin.jvm.internal.Reflection.mutableCollectionType(kotlin.reflect.KType)'
                                    at xyz.cssxsh.mirai.plugin.data.AdminRequestEventData.<clinit>(AdminRequestEventData.kt:107)
                                    at xyz.cssxsh.mirai.plugin.MiraiAdminPlugin.onEnable(MiraiAdminPlugin.kt:25)
                                    at net.mamoe.mirai.console.internal.plugin.JvmPluginInternal.internalOnEnable$mirai_console(JvmPluginInternal.kt:113)
                                    at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.enable(BuiltInJvmPluginLoaderImpl.kt:158)
                                    at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.enable(JvmPluginLoader.kt)
                                    at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.enable(JvmPluginLoader.kt:36)
                                    at net.mamoe.mirai.console.plugin.PluginManager.enablePlugin(PluginManager.kt:129)
                                    at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.enableAllLoadedPlugins$mirai_console(PluginManagerImpl.kt:172)
                                    at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:214)
                            
                            cssxsh 1 条回复 最后回复 回复 引用 0
                            • cssxsh
                              cssxsh @atonioy 最后由 编辑

                              @atonioy
                              mirai 版本是多少?检查一下是不是版本太旧了

                              A 1 条回复 最后回复 回复 引用 0
                              • A
                                atonioy @cssxsh 最后由 编辑

                                @cssxsh 好了,蟹蟹大佬

                                1 条回复 最后回复 回复 引用 0
                                • cssxsh
                                  cssxsh @greenhandzdl 最后由 编辑

                                  @greenhandzdl
                                  版本?

                                  A G 2 条回复 最后回复 回复 引用 0
                                  • A
                                    atonioy @cssxsh 最后由 编辑

                                    @cssxsh 是mirai版本问题,沃更了最新就可以,顺便问下,那个关闭自动宵禁的指令是啥,那个重复设置的宵禁时间是覆盖的吗

                                    cssxsh 1 条回复 最后回复 回复 引用 0
                                    • cssxsh
                                      cssxsh @atonioy 最后由 编辑

                                      @atonioy
                                      会覆盖, 把开始时间和结束时间设置成一样就会关闭

                                      A 1 条回复 最后回复 回复 引用 0
                                      • A
                                        atonioy @cssxsh 最后由 编辑

                                        @cssxsh 大佬那个自动宵禁怎么总是多次执行,沃设置的是00:30到06:00,它每六分钟就给我执行一次宵禁

                                        cssxsh 1 条回复 最后回复 回复 引用 0
                                        • cssxsh
                                          cssxsh @atonioy 最后由 编辑

                                          @atonioy
                                          写代码的时候草率了,下个版本修复

                                          A 1 条回复 最后回复 回复 引用 0
                                          • G
                                            greenhandzdl 摸鱼 @cssxsh 最后由 编辑

                                            @cssxsh
                                            MiraiCore v2.9.0
                                            MiraiConsole v2.9.0

                                            cssxsh 1 条回复 最后回复 回复 引用 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 16
                                            • 17
                                            • 1 / 17
                                            • First post
                                              Last post
                                            Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact