这个插件专注于实现更好的消息显示, 并以模块的方式集成了一些其他的功能
- 🚧 说明
- ApliNi/Chat2QQ 是包含 DreamVoid/Chat2QQ 几乎所有功能的插件, 经过重写并添加了许多功能.
- 如果你有任何想法请点击
Issues
, 打开一个功能请求. 如果我能做到就会去实现出来. - 如果您使用默认配置, 那么还需要开启 MiraiMC 插件配置中的
bot.contact-cache.enable-group-member-list-cache
, 才能保证软件正常运行.
- 📄 其他
- 订阅更新: 点击右上角
Watch
按钮, 选择Custom
中的Releases
! - 使用量统计: bStats
- 订阅更新: 点击右上角
-
聊天消息转发
- 格式化
- 多群组支持
- 消息预处理功能
- 多行文本和长文本显示优化
- 引用回复显示优化
- 群名片过滤
- 艾特显示优化
- 用户黑名单
-
事件处理
- 玩家加入退出
这些功能在可配置的模块中
-
运行指令
- 返回指令输出消息
- 更好的等待指令返回
- 权限管理
- 继承
- 指令黑名单
-
从群名片中匹配游戏名称
-
消息预处理
- 匹配方式: 前缀 / 包含 / 相等 / 正则
- 支持让匹配到的消息完全不发送
-
按行预处理指令的返回消息
- 支持(匹配方式)
-
按合并后的完整消息预处理指令返回消息
- 支持(匹配方式)
- 添加一些特殊的占位符
-
预设的格式调整功能
- 删除消息中的格式化字符
- 删除消息前后空格和空行
- 删除群名片中的格式化代码
- 将长文本转换为鼠标悬浮显示文本
- 更好的多行消息
- 将聊天消息转发到控制台
-
引用回复优化
- 格式化
- 删除重复的艾特
-
/qchat
- 区分玩家运行指令和控制台运行指令
-
群成员信息缓存 [前置]
- 自动更新数据
- 支持使用外部 Mirai 的缓存文件
-
艾特显示优化
-
事件任务
- 群成员加入
- 群成员退出
-
自动回复
- 支持(匹配方式)
- 支持 PAPI
运行指令
群名片过滤
特殊消息预处理
多行文本和长文本显示优化
引用回复显示优化
更好的名称显示
自动回复
# 游戏内配置
# 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: # 群主
#- 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
## 5
# 引用回复
# 添加变量: %_reply_%
# 如果是回复消息, 则为变量赋值并为消息添加悬浮文本框用于显示内容. 可以将鼠标悬停在消息上查看回复的内容
reply-message:
# 可用变量:
# %qq% - 被回复的消息的发送者QQ号
# %c_name% - 群名片 - 需要开启 aplini.format-qq-id
var: '§f[§7回复 @%c_name%§f] '
# 可用变量:
# %_/n_% - 换行
# %qq% - 被回复的消息的发送者QQ号
# %c_name% - 群名片 - 需要开启 aplini.format-qq-id
# %message% - 回复内容
# %main_message% - 当前消息内容
message: '§f[§7引用 @%c_name%§f]%_/n_%§7%message%§r%_/n_%%_/n_%§f——%main_message%'
# 删除重复@ :: 如果引用回复对象等于消息开头的@对象, 则删除消息开头的 @
del-duplicates-at: true
## 6
# 发送消息的指令
# /qchat <消息> - 使用此指令
qchat:
# 使用上方 general.group-ids 中配置的群
use-general-group-ids: true
# 消息转发到哪些群, 需要 use-general-group-ids: false
group-ids:
- 1000000
# 如果是玩家使用指令
player:
# 转发到QQ群的格式
# %name% - 玩家名称
# %message% - 消息
qq-format: '[%name%] %message%'
# 是否同时将消息广播到MC服务器
mc-broadcast: true
# 广播到MC服务器的
mc-format: '§f[§7%name%§f] §7%message%'
# 如果是控制台或插件使用指令, 同时绕过关键词和玩家黑名单
console:
# %message% - 消息
qq-format: '%message%'
## 7
# [前置] 群成员信息缓存
# ! 需要开启 MiraiMC 配置中的 bot.contact-cache.enable-group-member-list-cache
player-cache:
# 在机器人登录和服务器启动时运行此程序
enabled: true
# 在玩家群名片修改时更新缓存
auto-update: true
# 在玩家发送消息时更新缓存
auto-update-form-msg: true
# 群名片修改时发出日志
auto-update-log: true
# 使用上方 general.group-ids 中配置的群
use-general-group-ids: true
# 缓存哪些群, 需要 use-general-group-ids: false
group-ids:
- 1000000
# MiraiMC 群缓存文件路径, 如果你修改了插件目录相关的配置, 才需要修改它
# %qq% - 机器人账号
# %group% - 群号
mirai-cache-path: "plugins/MiraiMC/MiraiBot/bots/%qq%/cache/contacts/groups/%group%.json"
## 8
# 将 %message% 中的 @qqID 替换为 @名称
# 需要开启前置: aplini.player-cache
format-qq-id:
enabled: true
# 用于匹配 @qqID 的正则
regular: '(@[0-9]{5,11})'
# 格式
# %qq% - qq号
# %name% - 名称
format: '§f[§7@%name%§f]§7'
# 一条消息最多匹配几次, 防止刷屏浪费性能
max-cycles-num: 10
## 9
# 事件任务
event-func:
# enable 修改后需要重启服务器
enable: false
# 使用上方 general.group-ids 中配置的群
use-general-group-ids: true
# 启用在哪些群, 需要 use-general-group-ids: false
group-ids:
- 1000000
# 每个事件可用的任务不同, 这里列出了所有任务的使用方法:
# - command: 'command' - 发送指令
# - message-text: '消息' - 向事件来源发送消息, 群 或 好友/私聊
# - message-group: 1000000 - 向指定群发送消息
# message-text: '消息'
# - message-friend: 2000003 - 向指定好友发送消息
# message-text: '消息'
MiraiMemberJoinEvent: # 群成员加入
# 可使用: command, message-text, message-group
# 一个事件中可添加多个相同或不相同的任务, 就像这样:
#- message-text: '欢迎'
#- command: 'tps'
#- command: 'mspt'
#- message-group: 1000000
# message-text: '消息'
MiraiMemberLeaveEvent: # 成员退出
# 可使用: command, message-text, message-group
## 10
# 自动回复
# 当QQ群中的消息匹配时发送自定义消息
auto-response:
enable: true
# 使用上方 general.group-ids 中配置的群
use-general-group-ids: true
# 回复哪些群的消息, 需要 use-general-group-ids: false
group-ids:
- 1000000
# 为此功能启用PAPI, 需要安装PAPI插件
enable-papi: false
# **使用方法**
# list:
# - 匹配方式: prefix (前缀匹配)
# contain (包含)
# equal (完全相等)
# regular (正则匹配, send 中可使用正则变量)
# send (发送的消息内容)
#
# > 正则的性能较差, 请尽量避免使用很多正则
# !! 请小心使用正则拼接PAPI变量, 如果正则设计有问题则可能出现注入漏洞 !!
# - 提示: 应指定匹配的字符范围和最小最大次数, 要绝对的防止输入PAPI变量的保留符号: %
# - 比如: - regular: '^\#ping ([a-zA-Z0-9_]{3,16})$'
# send: '$1 的延迟为: %player_ping_$1%ms'
# 示例配置, 默认配置了一些可能有用的功能:
list:
# 使用PAPI获取在线玩家数量, 需要启用 aplini.auto-response.enable-papi
# PlayerList: /papi ecloud download playerlist
- equal: '#list'
send: '在线玩家: [%playerlist_online,normal,yes,amount%] \n%playerlist_online,normal,yes,list%'
# 使用PAPI获取服务器TPS, 需要启用 aplini.auto-response.enable-papi
# Server: /papi ecloud download Server
- equal: '#tps'
send: 'TPS [1m, 5m, 15m]: %server_tps_1% / %server_tps_5% / %server_tps_15%'
# 指令列表
- equal: '#help'
send: '指令列表:
\n - #list - 显示在线玩家列表
\n - #tps - 显示服务器TPS'
# @一个QQ号时发送消息
- contain: '@2000000'
send: 'OwO'
# <- 至此, 您已经完成了所有配置, 部分功能使用 /chat2qq reload 重载插件即可应用 uwu
qchat <消息>
- 发送消息到群, 详细配置在aplini.qchat
chat2qq
- 插件主命令 & 帮助信息chat2qq setgroupcacheall
- 重建群成员缓存数据chat2qq outgroupcacheall
- 打印群成员缓存数据
plugin.yml
commands:
qchat:
description: 发送聊天消息到QQ群
permission: chat2qq.command.qchat
chat2qq:
description: Chat2QQ 插件主命令
permissions:
chat2qq.qq.receive:
description: 允许收到来自QQ群的消息
default: true
chat2qq.chat.requite:
description: 允许使用前缀符号转发消息到QQ群
default: true
chat2qq.join.silent:
description: 允许悄悄加入服务器
default: false
chat2qq.quit.silent:
description: 允许悄悄离开服务器
default: false
chat2qq.command.qchat:
description: 允许使用 /qchat
default: op
chat2qq.command.chat2qq:
description: 允许使用 /chat2qq
default: op
chat2qq:.command.setgroupcacheall:
description: 允许使用 /chat2qq setgroupcacheall
default: op