SkillAgentSearch skills...

Chat2QQ

为 Chat2QQ 添加更多功能的非官方分支

Install / Use

/learn @ApliNi/Chat2QQ
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Chat2QQ+

这个插件专注于实现更好的消息显示, 并以模块的方式集成了一些其他的功能

  • 🚧 说明
    • ApliNi/Chat2QQ 是包含 DreamVoid/Chat2QQ 几乎所有功能的插件, 经过重写并添加了许多功能.
    • 如果你有任何想法请点击 Issues, 打开一个功能请求. 如果我能做到就会去实现出来.
    • 如果您使用默认配置, 那么还需要开启 MiraiMC 插件配置中的 bot.contact-cache.enable-group-member-list-cache, 才能保证软件正常运行.
<p></p>
  • 📦 下载
    • Releases 中下载最新的jar文件.
    • 如果需要开发版本, 可以点击 Actions, 打开第一个, 找到最下面的jar文件.
<p></p>
  • 📄 其他
    • 订阅更新: 点击右上角 Watch 按钮, 选择 Custom 中的 Releases !
    • 使用量统计: bStats
<p></p>

<a href="https://bstats.org/plugin/bukkit/ApliNi-Chat2QQ/17587"></a>

<br />

更新计划

  • [x] 聊天消息转发

    • [x] 格式化
    • [x] 多群组支持
    • [x] 消息预处理功能
    • [x] 多行文本和长文本显示优化
    • [x] 引用回复显示优化
    • [x] 群名片过滤
    • [x] 艾特显示优化
    • [x] 用户黑名单
  • [x] 事件处理

    • [x] 玩家加入退出

这些功能在可配置的模块中

  • [x] 运行指令

    • [x] 返回指令输出消息
    • [x] 更好的等待指令返回
    • [x] 权限管理
      • [x] 继承
    • [x] 指令黑名单
  • [x] 从群名片中匹配游戏名称

  • [x] 消息预处理

    • [x] 匹配方式: 前缀 / 包含 / 相等 / 正则
    • [x] 支持让匹配到的消息完全不发送
  • [x] 按行预处理指令的返回消息

    • [x] 支持(匹配方式)
  • [x] 按合并后的完整消息预处理指令返回消息

    • [x] 支持(匹配方式)
    • [x] 添加一些特殊的占位符
  • [x] 预设的格式调整功能

    • [x] 删除消息中的格式化字符
    • [x] 删除消息前后空格和空行
    • [x] 删除群名片中的格式化代码
    • [x] 将长文本转换为鼠标悬浮显示文本
    • [x] 更好的多行消息
    • [x] 将聊天消息转发到控制台
  • [x] 引用回复优化

    • [x] 格式化
    • [x] 删除重复的艾特
  • [x] /qchat

    • [x] 区分玩家运行指令和控制台运行指令
  • [x] 群成员信息缓存 [前置]

    • [x] 自动更新数据
    • [x] 支持使用外部 Mirai 的缓存文件
  • [x] 艾特显示优化

  • [x] 事件任务

    • [x] 群成员加入
    • [x] 群成员退出
  • [x] 自动回复

    • [x] 支持(匹配方式)
    • [x] 支持 PAPI
<br />

✨ 图片

运行指令

image

群名片过滤

image image

特殊消息预处理

image image

多行文本和长文本显示优化

image image

image image

引用回复显示优化

image image

image image

image image

更好的名称显示

image image

自动回复

image

完整配置和功能


# 游戏内配置
# QQ -> MC 的消息
general:
  # 转发哪些QQ群的消息
  group-ids:
    - 1000000
    - 1000001

  # 群聊天前缀 (聊天需要带有指定前缀才能发送到服务器)
  requite-special-word-prefix:
    enabled: false
    prefix:
      - '#'

  # 当群名片不存在时是否尝试获取昵称
  use-nick-if-namecard-null: true

  # QQ群消息广播到游戏内聊天的格式 格式化代码: §
  # %groupname% - 群名称
  # %groupid% - 群号
  # %nick% - 发送者群名片
  # %regex_nick% - 使用正则匹配到的名称, 需要开启 aplini.cleanup-name 模块
  # %qq% - 发送者QQ号
  # %message% - 消息内容, 支持预处理模块 aplini.pretreatment
  # %_reply_% - 如果是回复消息..., 配置在 aplini.reply-message 模块
  in-game-chat-format: '§f[§7%nick%§r§f] %_reply_%§7%message%'
  # 为每个群使用不同的格式, 如果没有则使用上方的 in-game-chat-format
  special:
    1000000: '§f[§7主群 %nick%§r§f] %_reply_%§7%message%'
    1000001: '§7[外群 %nick%] %_reply_%%message%'

  # 启用 MiraiMC 内置的QQ绑定
  use-miraimc-bind: false
  # 已绑定玩家的广播消息格式
  bind-chat-format: '§f[§7%nick%§r§f] %_reply_%§7%message%'
  # 为每个群使用不同的格式, 如果没有则使用上方的 bind-chat-format
  special-bind:
    1000000: '§f[§7主群 %nick%§r§f] %_reply_%§7%message%'



# 机器人配置
# MC -> QQ 的消息
bot:
  # 使用哪些QQ号处理消息
  # 只能添加一个
  bot-accounts:
    - 2000000

  # 将消息转发到那些QQ群
  group-ids:
    - 1000000

  # 玩家在以下世界中聊天才会被转发
  available-worlds:
    #- world
  # 将以上配置作为黑名单, 玩家不在以上世界中聊天才会被转发
  available-worlds-use-as-blacklist: true

  # 游戏聊天前缀 (聊天需要带有指定前缀才能发送到QQ群) 
  requite-special-word-prefix:
    enabled: true
    prefix:
      - '#'

  # 是否转发被其他插件取消过的聊天消息事件, 用于修复一些兼容性问题
  ignoreCancelled: false

  # 服务器消息发送到QQ群的格式
  # %player% - 玩家名称
  # %message% - 消息内容
  group-chat-format: '[%player%] %message%'


  # 是否发送玩家进出服务器的消息
  # %player% - 玩家显示昵称
  send-player-join-quit-message: false
  # 加入
  player-join-message: '%player% 进入服务器'
  # 退出
  player-quit-message: '%player% 离开服务器'
  # 防刷屏, 在此时间内多次进出服务器不会发送消息 (秒
  player-join-quit-message-interval: 0



# 黑名单, 可用于添加其他QQ机器人
# 优先级大于上方配置
blacklist:
  # 不转发以下QQ号的聊天消息
  qq:
  #- 2000001

  # 不转发以下玩家名的聊天消息
  player:
  #- playerName


# ############### #
# 以下为功能模块配置 #
# ############### #

aplini:

  ## 1
  # 在QQ群中运行指令 [需要单独添加QQ群]
  # 此模块不处理黑名单 blacklist
  run-command:
    enabled: false
    # 启用的 QQ群
    qq-group:
      - 1000001

    # 指令前缀, 可以是多个字符, 比如 "~$"
    command-prefix: '/'
    # 指令最大长度 (不包括指令前缀)
    command-max-length: 255
    # 获取指令的正则表达式, 当第一个捕获组的内容与指令白名单中的匹配时则允许运行 (不带斜杠或前缀)
    regex-command-main: '^([^ ]+)'
    # 判断指令返回为空的正则, 匹配多行文本. (经过 pretreatment-command-message 处理后)
    return-isNull: '^\s*$'
    # 是否将主命令转换为小写再执行
    always-lowercase: false

    # 是否发送指令的输出, 关闭可提高性能或解决一些兼容性问题
    return: true
    # 等待指令运行多长时间再将结果发送到QQ群 (毫秒), 需要开启 run-command.return
    # 如果你遇到了一些提前输出类似 "正在运行...请稍等" 消息的插件, 可以在 pretreatment-command-message 中配置完全删除这条消息. 然后 return-sleep-min 保持不变 :)
    return-sleep-min: 14 # 最小等待时间
    return-sleep-max: 5346 # 最大等待时间, 如果一些长耗时指令没有输出请增大此值
    return-sleep-sampling-interval: 172 # 输出内容检查间隔, 如果经常执行长耗时指令可以增大此值
    # 是否将指令的输出打印到控制台和日志
    return-log: true

    # 执行不在白名单中的指令时发送返回消息
    message-miss: '未命中的指令'
    # 运行无返回指令的消息
    message-no-out: '运行无返回指令'

    # 设置各组可执行的主命令白名单 (不带斜杠或前缀)
    # 权限更高的用户将可以使用更低的用户的指令
    # 如果添加一条 ___ALL_COMMAND___ 作为指令, 则表示此组可以使用所有指令, 此功能请勿随意使用 !
    group:
      # permission_<int> 是 MiraiMC 获取到的权限数字, 以后更新了其他权限只需要以此格式添加即可使用
      permission_2: # 群主
        #- ___ALL_COMMAND___
        #- chat2qq
      permission_1: # 管理员
        #- spark
      permission_0: # 成员
        #- list
        #- tps

    # 特殊指令配置
    special:
      no-return: # 这些指令始终不输出消息
        #- plugins
        #- version


  ## 2
  # 从 群名片(%nick%) 中匹配 MC 可用的游戏名称
  # 添加变量: %regex_nick% - 使用正则匹配到的名称, 需要开启 cleanup-name 功能
  cleanup-name:
    enabled: false
    # 程序取第一个捕获组的结果
    regex: '([a-zA-Z0-9_]{3,16})'
    # 如果匹配不到, 则使用以下字符串
    # %nick% - 群名片
    # %qq% - qq号
    not-captured: '%nick%'


  ## 3
  # 预处理 %message% 中的消息
  pretreatment:
    enabled: true
    # **使用方法**
    # list:
    #   - 匹配方式: prefix (前缀匹配), 处理方式: to_all, to_replace
    #              contain (包含), 处理方式: to_all, to_replace
    #              equal (完全相等), 处理方式: to_all
    #              regular (正则匹配), 处理方式: to_all, to_regular
    #
    #     处理方式: to_all (替换整条消息)
    #              to_replace (替换匹配到的部分)
    #              to_regular (使用正则替换, 可使用正则变量)
    #
    #     是否发送: send (填写 send 配置将取消转发送匹配到的消息, 不需要时请忽略)

    # 示例配置, 默认配置了一些可能有用的功能:
    list:

      # 群公告, JSON
      - prefix: '{"app":"com.tencent.mannounce"'
        to_all: '[群公告]'

      # 视频, 字符串
      - prefix: '你的QQ暂不支持查看视频短片'
        to_all: '[视频]'

      # 使中括号与文本的前后始终有空格
      - regular: '\[([^\]]+)\]([^\s])'
        to_regular: '[$1] $2'
      - regular: '([^\s])\[([^\]]+)\]'
        to_regular: '$1 [$2]'

      # 转发消息使用前缀, 在群中使用 # 前缀将改变消息格式
      - regular: '^\s*(?:#|#)'
        to_regular: '§7> §f'

      # 示例: 取消发送包含此内容的消息
      #- contain: '此内容'
      #  send: false


  ## 3.1
  # 按行预处理指令返回消息, 用于处理返回到QQ群的消息
  pretreatment-command-message:
    enabled: true
    # 使用方法: 如上
    list:
      # 删除格式化字符
      - regular: '§[a-z0-9]'
        to_regular: ''

      # 示例: co插件翻页消息处理
      #- regular: '◀? ?第 (.*) 页 ▶? ?\((.*)\)'
      #  to_regular: '第 $1 页,  使用 /co page <页码> 翻页'


  ## 3.2
  # 按多行文本预处理指令返回消息
  # 可使用占位符:
  #   - %command% :: 用户运行的指令原文(不带斜杠/前缀)
  #   - %time% :: 指令运行耗时
  #   - %qq% :: 执行指令的qq号
  #   - %group% :: 执行指令的群号
  pretreatment-command-message-all:
    enabled: false
    enabled-placeholder: false # 关闭占位符可提高性能
    # 使用方法: 如上
    list:
      # 示例: 显示指令运行时间, 需要开启占位符
      #- regular: '([\s\S]+)'
      #  to_regular: '$1\n  - 运行耗时: %time%ms'


  ## 4
  # 预设的格式调整功能
  other-format-presets:
    # 是否删除 %message% 消息 中的格式化字符
    render-message_format-code: false
    # 删除 %message% 消息 前后的空格和空行
    message-trim: true
    # 是否删除 %nick% 群名片 中的格式化字符
    render-nick_format-code: true

    # 聊天消息过长时转换为悬浮文本
    long-message:
      enabled: true
      # 以下任意一个条件成立时被判定为长消息, 若需取消一个, 请改为很大的数
      # 条件1: 消息长度达到此值
      condition-length: 210
      # 条件2: 换行数量达到此值, 在 message-trim 之后运行
      condition-line_num: 6
      # 显示为
      message: '§f[§7长消息§f]'

    # 是否启用 "更好的多行消息"
    multiline-message:
      enabled: true
      line-0: '' # [多行消息]
      line-prefix: '  '

    # 是否将聊天消息转发到控制台/日志
    message-to-log: true


 
View on GitHub
GitHub Stars23
CategoryDevelopment
Updated1mo ago
Forks1

Languages

Java

Security Score

95/100

Audited on Feb 23, 2026

No findings