让玩家在服务器内聊天
在游戏内与服务器账号对话,相当于发送到世界频道,服务器内所有玩家均可收到消息。
- 玩家间聊天
- 聊天管理命令
- 发言频率限制
- 聊天api (OneBot)
- 玩家上下线提醒
- 指定管理账号在群内执行控制台命令
- 聊天内容审查
- 聊天api (Minimal)
- 在 Release 下载
jar
- 放入
plugins
文件夹即可
玩家用:
/chat on
接受聊天消息(默认)/chat off
屏蔽聊天消息
管理用(需要 server.chat.others
权限):
/serverchat on
启用服务器聊天(默认)/serverchat off
关闭服务器聊天/serverchat ban @uid [时间(分钟)]
禁言指定玩家/serverchat unban @uid
解除指定玩家禁言/serverchat limit <次每分钟>
设置发消息频率限制/serverchat reload
重载配置文件/serverchat group <groupId>
设置互联群号/serverchat op|deop <userId(QQ)>
设置或解除管理员- 设置为管理的账号可以在指定群内直接用管理前缀执行命令
- 命令前缀可在配置文件中设置
adminPrefix
,默认为/
,例/sc ban @10002
- 目前在群内执行命令暂时没有回复,因为控制台执行过程只会log到控制台,不好捕获
/serverchat
可用别名 /sc
,例如 /sc ban @xxx
除了登录设置外,需配置 config.yml
中以下内容
access-token: ''
为插件配置中的tokenws-reverse:
universal: ws://your_websocket_universal.server
为OpenChat地址,例如ws://127.0.0.1:443/openchat
建议使用 Android Watch
协议登录(在 device.json
中 "protocol": 5
修改为 "protocol": 2
)
- 装好插件启动后,记录下首次生成的
Token
,或者自己填写一个Token
- 下载 go-cqhttp 并初始化配置,打开配置文件
config.yml
- 在
access-token: ''
填写前面所述的Token
内容 - 在
ws-reverse
选项下的universal
填写GC的服务器地址加路径,例如ws://127.0.0.1:443/openchat
- 配置你的Bot账号和登录协议,建议使用
Android Watch
登录。具体参考文档 配置。(在device.json
中"protocol": 5
修改为"protocol": 2
) - 在GC中使用
/sc group <groupId>
来设置要互联的群聊 - 在GC中使用
/sc op <userId(QQ)>
来设置管理员账号 - 现在,理论上已经完成了群服互联,在群里可以看到玩家上下线和聊天,同时玩家也可以在游戏里看到群里聊天,
你还可以在群里用默认前缀
/
来执行命令,
值得注意的是,本插件支持的是 OneBot-v11 协议,理论上所有支持OneBot-v11 反向WebSocket 的机器人框架都可以连接,不仅限于cqhttp。
- 创建 WebSocket Client
- 添加请求头
Authorization: Bearer **token**
用于认证连接 - 添加请求头
X-Self-ID: 123456
用来标识连接的bot账号 (可选) - 连接到
/openchat
,例如ws://127.0.0.1:443/openchat
以下仅列出插件需要的字段
{
"post_type": "message",
"message_type": "group",
"sub_type": "normal",
"group_id": 123456,
"raw_message": "Plain Message",
"sender": {
"role": "member",
"level": "71",
"user_id": 123456789,
"nickname": "NickName",
"title": "UserTitle",
"card": "UserCard"
}
}
{
"action": "send_group_msg",
"params": {
"group_id": 123456,
"message": "Plain Message",
"auto_escape": true
}
}
{
"post_type": "message",
"message_type": "group",
"sub_type": "normal",
"guildId": "123456",
"channel_id": "1234",
"user_id": "123456789",
"message": "Plain Message",
"sender": {
"user_id": 123456789,
"nickname": "NickName"
}
}
{
"action": "send_guild_channel_msg",
"params": {
"guild_id": "123456",
"channel_id": "1234",
"message": "Plain Message",
"auto_escape": true
}
}
{
// 服务器聊天开关
"serverChatEnabled": true,
// 服务器聊天消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
// {message} 为消息内容
"serverChatFormat": "<color=#99CC99>{nickName}({uid})</color>: {message}",
// 每分钟发言消息数限制
"messageFreLimitPerMinute": 20,
// 是否在玩家加入时发送消息
"sendJoinMessage": true,
// 玩家加入时发送消息
"joinMessage": "本服已启用聊天,/chat on 开启(默认),/chat off 屏蔽",
// 被禁言反馈消息
"bannedFeedback": "你已经被禁言!",
// 消息太频繁反馈消息
// {limit} 服务器设置的限制次数
"msgTooFrequentFeedback": "服务器设置每分钟仅允许发言{limit}次",
// 是否将聊天log
"logChat": true,
// WebSocket Access Token
// 安全令牌,仅允许授权的连接
// 如果为空将会在启动时自动生成一个32位随机令牌并显示在控制台
"wsToken": "",
// WebSocket Path
// 反向WS的路径,即机器人连接到本插件开放的WS接口路径
// 若不想开放WS,则留空,默认为 /openchat
// OneBot设置示例:ws://127.0.0.1:443/openchat
"wsPath": "/openchat",
// // WebSocket Address
// // 正向WS的地址,即本插件主动连接机器人开放的WS接口地址
// // 示例:ws://127.0.0.1:8080
// // 若不需要,则留空
// // TODO:由于需要引入外部依赖,正向WS方式暂不实现
// public String wsAddress: "",
// 群ID
// 可以使用指令 `/sc group <groupId>` 设定
"groupId": 0,
// 群消息格式化
// {id} 为QQ号
// {name} 为群名片,如果为空则显示昵称
// {message} 为消息
"groupToGameFormat": "<color=#6699CC>[QQ]</color><color=#99CC99>{name}</color>: {message}",
// 服务器聊天消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
// {message} 为消息内容
"gameToGroupFormat": "[GC]{nickName}({uid}): {message}",
// /**
// * 频道ID
// */
// public String guildId: "",
// /**
// * 子频道ID集
// */
// public List<String> channelIds: new ArrayList<>(),
// 是否将游戏里的聊天转发到群聊
"isSendToBot": true,
// 是否接收群消息并发送到游戏里
"isSendToGame": true,
// 管理员账号
"adminIds": [0],
// 管理员执行命令前缀
"adminPrefix": "/",
// 是否启用登录消息
// 当玩家登录服务器时,发送消息通知到群里
"sendLoginMessageToBot": true,
// 玩家登录服务器消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
"loginMessageFormat": "{nickName}({uid}) 加入了服务器",
// 是否启用登录消息
// 当玩家登录服务器时,发送消息通知到游戏里
"sendLoginMessageToGame": true,
// 玩家登录服务器消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
"loginMessageFormatInGame": "<color=#99CC99>{nickName}({uid}) 加入了游戏</color>",
// 是否启用登出消息
// 当玩家离开服务器时,发送消息通知到群里
"sendLogoutMessageToBot": true,
// 玩家登出服务器消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
"logoutMessageFormat": "{nickName}({uid}) 离开了服务器",
// 是否启用登出消息
// 当玩家离开服务器时,发送消息通知到群里
"sendLogoutMessageToGame": true,
// 玩家登出服务器消息格式
// {nickName} 为玩家昵称
// {uid} 为玩家UID
"logoutMessageFormatInGame": "<color=#99CC99>{nickName}({uid}) 离开了游戏</color>",
}
目前实现了一个最基础的敏感词过滤功能, 并附带了一个精简的敏感词库, 在首次启动时会把词库释放到插件数据目录下。
文件名叫 SensitiveWordList.txt
,每行包含一个敏感词,你可以自己维护这个文件,修改后可以用 /sc reload
重新读取。
当检测到游戏内玩家聊天中包含敏感词,将不会进行转发,并且会在控制台中打印。
目前暂未设定惩罚机制,仅仅只是发出去别人看不到,自己不知道这个没发出去。
如果你有更好的建议,欢迎提交 issue