Muska-Ami / CatSero

一个基于MiraiMC的QQ群功能&MC功能插件
https://blog.ovome.icu
GNU Affero General Public License v3.0
29 stars 3 forks source link

QQ内容无法转发至游戏 #133

Closed jlxnb closed 1 year ago

jlxnb commented 1 year ago

问题描述

启用插件后,游戏内容可以转发到QQ QQ内容无法转发至游戏 MiraiMC可以显示QQ消息 [CatSero] [Catch] 捕获到一个错误 [CatSero] [Catch] 错误类型: java.lang.NullPointerException [CatSero] [Catch] 捕获消息: Cannot invoke "java.lang.CharSequence.toString()" because "replacement" is null

复现方法

  1. mirai login登录QQ
  2. 修改catsero配置文件
  3. plugman reload catsero

服务端版本

Paper-1.19.4-522

CatSero 版本

2.4-beta

服务端日志

plugman reload catsero
[21:32:18 INFO]: [CatSero] Disabling CatSero v2.4-beta
[21:32:18 INFO]: [CatSero] [Loader] Disabling CatSero.
[21:32:18 INFO]: [CatSero] If you love CatSero, don't forget to give it a Star on GitHub!
[21:32:19 INFO]: [CatSero] Loading server plugin CatSero v2.4-beta
[21:32:19 INFO]: [CatSero] [Loader] Start loading CatSero...
[21:32:19 INFO]: [CatSero] [Loader] Checking server information...
[21:32:19 INFO]: [CatSero] 检测到您已安装Geyser-Spigot,但未安装floodgate,互通服优化将自动禁用
[21:32:19 INFO]: [CatSero] [Loader] Saving files...
[21:32:19 INFO]: [CatSero] [Loader] Saving plugin configuration files...
[21:32:19 INFO]: [CatSero] [Loader] Saved.
[21:32:19 INFO]: [CatSero] [Loader] Saving default i18n locale file...
[21:32:19 INFO]: [CatSero] [Loader] Saved.
[21:32:19 INFO]: [CatSero] [Loader] Saved all files.
[21:32:19 INFO]: [CatSero] [Loader] Loading configurations...
[21:32:19 INFO]: [CatSero] [Loader] Loaded.
[21:32:19 INFO]: [CatSero] [Loader] ===== CatSero Runtime Checker =====
[21:32:19 INFO]: [CatSero] [Loader] Server Version: git-Paper-522 (MC: 1.19.4)
[21:32:19 INFO]: [CatSero] [Loader] Bukkit Version: 1.19.4-R0.1-SNAPSHOT
[21:32:19 INFO]: [CatSero] [Loader] Plugin Version: 2.4-beta
[21:32:19 INFO]: [CatSero] [Loader] Depends:
[21:32:19 INFO]: [CatSero] [Loader] - MiraiMC => true
[21:32:19 INFO]: [CatSero] [Loader] Soft-depends:
[21:32:19 INFO]: [CatSero] [Loader] - PlaceholderAPI => true
[21:32:19 INFO]: [CatSero] [Loader] - TrChat => true
[21:32:19 INFO]: [CatSero] [Loader] - floodgate => false
[21:32:19 INFO]: [CatSero] [Loader] ===================================
[21:32:19 INFO]: [CatSero] Enabling CatSero v2.4-beta
[21:32:19 INFO]: [CatSero] [Loader] Registering Executors...
[21:32:19 INFO]: [CatSero] [Loader] Registered.
[21:32:19 INFO]: [CatSero] [Loader] Registering Listeners...
[21:32:19 INFO]: [CatSero] [Loader] Registered.
[21:32:19 INFO]: [CatSero] [Loader] Registering QQCommands...
[21:32:19 INFO]: [CatSero] [Loader] Registered.
[21:32:19 INFO]: [CatSero] Start bStats.
[21:32:19 INFO]: [CatSero] [Loader] Start TPSCalculator.
[21:32:19 INFO]: [CatSero] [Loader] Start check Notepad++.
[21:32:19 INFO]: [CatSero] [Loader] CatSero loaded.
[21:32:19 INFO]: [CatSero] [Loader] Start checking update.
[21:32:19 INFO]: [CatSero] [Loader] Start filter auto-update.
[21:32:19 INFO]: [PlugMan] CatSero has been reloaded.
[21:32:21 INFO]: [CatSero] [Task] 成功更新了 304 个屏蔽词,当前屏蔽词数量: 304

[21:36:19 INFO]: [MiraiMC] [GroupMessage/2764848922] [PepperCraft1.19.4 第一舰队(522291896)] 屑腐竹(2747789919) -> 1
[21:36:19 WARN]: [CatSero] [Catch] 捕获到一个错误
[21:36:19 WARN]: [CatSero] [Catch] 错误类型: java.lang.NullPointerException
[21:36:19 WARN]: [CatSero] [Catch] 捕获消息: Cannot invoke "java.lang.CharSequence.toString()" because "replacement" is null
[21:36:19 WARN]: [CatSero] [Catch] 详细信息:
     - java.base/java.lang.String.replace(String.java:2956)
     - CatSero-2.4-beta.jar//moe.xmcn.catsero.uses.listeners.chatForward.OnGroupMessageToMC.run(OnGroupMessageToMC.java:150)
     - CatSero-2.4-beta.jar//moe.xmcn.catsero.uses.listeners.chatForward.OnGroupMessageToMC.onGroupMessage(OnGroupMessageToMC.java:91)
     - com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor316.execute(Unknown Source)
     - org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77)
     - co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:77)
     - org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
     - io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54)
     - io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126)
     - org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615)
     - MiraiMC-Bukkit.jar//me.dreamvoid.miraimc.bukkit.MiraiEvent.lambda$startListenEvent$8(MiraiEvent.java:121)
     - MiraiMC-Bukkit.jar//net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:600)
     - MiraiMC-Bukkit.jar//net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:600)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.InterruptibleKt.runInterruptibleInExpectedContext(Interruptible.kt:51)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.InterruptibleKt.access$runInterruptibleInExpectedContext(Interruptible.kt:1)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.InterruptibleKt$runInterruptible$2.invokeSuspend(Interruptible.kt:43)
     - MiraiMC-Bukkit.jar//kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
     - MiraiMC-Bukkit.jar//kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

[21:36:19 WARN]: [CatSero] [Catch] 如您认为这不是配置错误、网络原因导致的问题,请前往此处报告:
[21:36:19 WARN]: [CatSero] [Catch] https://github.com/XiaMoHuaHuo-CN/CatSero/issues

额外说明

配置文件:

# CatSero UsesConfig
# Generate by CatSero v2.4-beta

# 所有的发送至QQ群的消息都支持mirai码
# 参见:
# https://docs.mirai.mamoe.net/Messages.html#mirai-%E7%A0%81
# https://docs.mirai.mamoe.net/Messages.html#%E6%B6%88%E6%81%AF%E5%85%83%E7%B4%A0
# https://docs.mirai.mamoe.net/Messages.html#%E6%B6%88%E6%81%AF%E9%93%BE%E7%9A%84-mirai-%E7%A0%81

# 聊天转发
chat-forward:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 自动清理样式代码
  clean-stylecode:
    to-mc: false
    to-qq: true
  # 消息头检测
  # 只有消息以这个字符串开头才会被转发
  header:
    # 功能开关
    # true | false
    enable: false
    # 消息头设置
    prefix:
      to-mc: '#'
      to-qq: '#'
  # 允许游戏内玩家使用mirai码
  allow-miraicode: false
  # 过滤器
  # 检测到消息内含有列表中的文本
  filter:
    # 功能开关
    # true | false
    enable: false
    # 自动更新列表
    auto-update:
      # 功能开关
      # true | false
      enable: true
      # 更新间隔
      # 单位: 秒
      interval: 300
    # 列表
    list:
      # 原生的列表
      via:
        to-mc: []
        to-qq: []
      # 从外部导入
      import:
        # 本地
        local: []
        # 远程
        # 此处使用的是TrChat的默认远程源
        # 感谢南城提供的词库
        # CDN JsDelivr
        remote:
        - https://cdn.jsdelivr.net/gh/Yurinann/Filter-Thesaurus-Cloud@main/database.json
    # 替换成的字符
    replace: '**'
  # 使用MiraiMC内置绑定数据库查询QQ发言者名称
  use-bind: true
  # 格式
  format:
    # 内置占位符:
    # - %sender_permission%  发言者群权限(member,admin,owner)
    # - %name%  发言者名称
    # - %message%  消息
    to-mc: '&e[&aQQ&e]&b%name%&r: %message%'
    # 内置占位符:
    # - %sender_permission%  发言者权限(player,admin)
    # - %name%  发言者名称
    # - %display_name%  发言者游戏中显示名称
    # - %message%  消息
    to-qq: '[MC]%name%: %message%'

# 发送玩家加入/退出消息
send-player-join-quit:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  # 内置占位符:
  # - %player% 加入玩家名称
  format:
    # 加入
    join: '%player%加入了游戏'
    # 退出
    quit: '%player%退出了游戏'
  # 需要拥有权限才会发送
  need-permission: false

# 发送玩家死亡消息
send-player-death:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  # 内置占位符:
  # - %player%  玩家名
  # - %message%  死亡消息
  format: |-
    %player%死了,因为
    %message%
# 需要拥有权限才会发送
  need-permission: false

# 新人加入群欢迎
new-group-member-notification:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  # 内置占位符:
  # - %at%  @新成员
  # - %code%  新成员QQ号
  format: 欢迎%at%(%code%)加入本群!

# 玩家解锁进度转发
send-advancement:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  # 内置占位符:
  # = %player%  玩家名
  # - %name%  进度名
  # - %description%  进度描述
  format: |-
    %player%达成了进度: %name%
    描述: %description%
# 需要拥有权限才会发送
  need-permission: false

# TPS获取
get-tps:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group

# 在线玩家获取
get-online-list:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  format:
    # 无论是否有玩家在线都会发送
    # 内置占位符:
    # - %count%  当前在线玩家数
    # - %max%  最大在线玩家数
    '0': |-
      当前在线: %count%
      最大在线: %max%
    # 当有玩家在线才发送
    # 内置占位符:
    # - %count%  当前在线玩家数
    # - %max%  最大在线玩家数
    # - %list%  当前在线玩家列表
    '1': '玩家列表: %list%'
# QQ白名单
qwhitelist:
  # 功能开关
  # true | false
  enable: false
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 检查是否在群内
  # 若存在白名单但不在群内则视为无
  check-if-on-group: true
  # 自助申请白名单
  self-application:
    # 功能开关
    # true | false
    enable: false
    # 申请格式
    # 内置占位符:
    # - %name%  玩家名(只能设置一个)
    format: '!申请白名单 %name%'
  # 限制每个QQ只能拥有一个白名单
  a-qq-only-an-account: true
  # 账户名称正则表达式
  regex: ^[A-Za-z0-9_]+$

# 离群提示
group-member-leave-notification:
  # 功能开关
  # true | false
  enable: false
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 格式
  # 内置占位符:
  # - %name%  名称
  # - %code%  QQ号
  format: '%name%(%code%)离开了本群'

# QQ命令执行
qcmd:
  # 功能开关
  # true | false
  enable: true
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group

# QQ群占位符
info-placeholder:
  # 功能开关
  # true | false
  enable: false
  # Bot & Group设置
  var:
    # BotID
    bot: hello-bot
    # GroupID
    groups:
    - hello-group
  # 插件应该自动更新哪个内容的名称
  # (group|bot)
  should-updates:
  - group
  - bot
  # 更新间隔
  # 单位: 秒
  interval:
    # 群名称
    title: 30
    # Bot群名称
    bot-name: 60
  # 群名称格式
  format:
    titles:
      hello-group: '%origin% - 在线: %player_limit%/%player_max%'
    bot-name: '%origin% - TPS: %server_tps%'
Muska-Ami commented 1 year ago

~~您好,请检查您的i18n文件是否包含有 minecraft.call.owner 这个节点~~

2.4已更新,修复该问题