DreamVoid
本帖最后由 DreamVoid 于 2022-9-6 04:04 编辑


Whitelist4QQ —— 在QQ群内自助申请Minecraft白名单


介绍

什么是 Whitelist4QQ?

Whitelist4QQ 是一个基于 MiraiMC 的 Bukkit 插件,能够让玩家在 QQ 群内自助申请 Minecraft 白名单。

这和 QWhiteList 有什么关系?这个插件的作者参与了 W4Q 的开发吗?

最开始我想基于这款插件进行 MiraiMC 的适配,plugin.yml 的 authors 是一开始就写好的。然后我写着写着发现我没有用一行这个插件的代码,但是我还是保留了他的 ID,毕竟是这款插件给了我灵感和思路(好像没有思路)。

开始使用

服主

  • 下载插件,并将插件文件放入 plugins 文件夹;
  • 下载 MiraiMC 插件(如果尚未下载),并将插件文件放入 plugins 文件夹;
  • 启动服务端(如果尚未启动)或使用诸如PlugMan的插件加载插件;
  • 使用指令“/mirai login <账号> <密码>”登录你的机器人账号;
  • 调整插件的配置文件;
  • 重新启动服务器(请不要热重载,可能会出现问题);
  • 享受插件吧!

玩家

  • 加入服主指定的 QQ 群;
  • 在群内发送消息“申请白名单+你的ID”或是服主指定的消息前缀加上你的ID。例如:“申请白名单Steve”

配置文件
  1. #  _          __  _   _   _   _____   _____   _       _   _____   _____   _   _   _____     _____
  2. # | |        / / | | | | | | |_   _| | ____| | |     | | /  ___/ |_   _| | | | | /  _  \   /  _  \
  3. # | |  __   / /  | |_| | | |   | |   | |__   | |     | | | |___    | |   | |_| | | | | |   | | | |
  4. # | | /  | / /   |  _  | | |   | |   |  __|  | |     | | \___  \   | |   \___  | | | | |   | | | |
  5. # | |/   |/ /    | | | | | |   | |   | |___  | |___  | |  ___| |   | |       | | | |_| |_  | |_| |_
  6. # |___/|___/     |_| |_| |_|   |_|   |_____| |_____| |_| /_____/   |_|       |_| \_______| \_______|
  7. #  Whitelist4QQ 配置文件
  8. #
  9. # 作者:xingxing520, DreamVoid
  10. # Github: https://github.com/DreamVoid/Whitelist4QQ

  11. # 插件配置
  12. general:
  13.   # 允许 bStats 统计
  14.   bStats: true

  15.   # 白名单范围
  16.   # join - 加入服务器 - 玩家加入服务器时检测是否在 MiraiMC 的绑定数据库,如果不在则踢出
  17.   # action - 操作 - 玩家可以加入服务器,但如果不在 MiraiMC 的绑定数据库中则会阻止玩家进行任何操作
  18.   # spec - 旁观者 - 玩家可以加入服务器,但游戏模式将设为旁观者模式。如果 action 同时启用,则不阻止玩家移动。获取白名单后游戏模式将设为 server.prop 设置的默认模式。
  19.   # 注:join 只在玩家加入服务器时检测1次。action 和 spec 在玩家不在数据库中时每 10 秒检测 1 次,如果在数据库就只检测 1 次。
  20.   check-range:
  21.     join: true
  22.     action: false
  23.     spec: false

  24.   # 阻止已经绑定过 QQ 的 ID 重复绑定
  25.   prevent-id-rebind: true

  26.   # 阻止已经绑定过 ID 的 QQ 重复绑定
  27.   prevent-qq-rebind: true

  28.   # 踢出信息。在踢出不在 MiraiMC 数据库的玩家时显示的踢出消息
  29.   # 默认提示消息使用的是 YAML 换行符,如果想使用单行消息可以设为 kick-message: "消息内容"
  30.   kick-message: |-
  31.     &c你不在本服的白名单中,请加入我们的QQ群进行申请
  32.     &cQQ群:123456

  33.   # 游戏内消息提示。仅当 check-range 中的 join 设为 false(即允许玩家进入服务器)时才会出现。
  34.   # 默认每3秒提示一次
  35.   notify-message: |-
  36.     &b========================================
  37.     &e你不在本服的白名单内,将无法进行绝大多数操作
  38.     &e要获取本服的白名单,请加入我们的QQ群进行申请
  39.     &eQQ群:123456
  40.     &e如果你已经获取白名单,请稍等片刻或重新进入服务器
  41.     &b========================================

  42.   # 验证成功提示
  43.   bind-success-message: "&a你成功获取了白名单,现在可以正常游玩服务器了!"
  44.   
  45.   # 是否不使用MiraiMC的数据库而改为插件自存储
  46.   use-self-data: false
  47.   
  48.   # 是否使用玩家名存储数据而非UUID
  49.   # 由于MiraiMC特性,此项只会在use-self-data为true时生效
  50.   use-player-name: false
  51. # 机器人配置
  52. bot:
  53.   # 用于接收验证的 QQ,只有存在于以下列表的机器人 QQ 的消息才会被处理
  54.   # 请至少填写一个
  55.   used-bot-accounts:
  56.     - 123456
  57.     - 789012

  58.   # 用于接收验证的 QQ 群,只有存在于以下列表的 QQ 群的消息才会被处理
  59.   # 请至少填写一个
  60.   used-group-numbers:
  61.     - 123456
  62.     - 789012

  63.   # 检测玩家绑定的 QQ 是否在群内,如果不在视为没有白名单
  64.   check-qq-in-group: true

  65.   # 有 QQ 退群时自动移除相应的绑定
  66.   # 建议设为 false,这样一来就算熊孩子搞完事退群也有 QQ 留着做记录
  67.   remove-bind-when-qq-quit: false

  68.   # 让 Whitelist4QQ 处理 QQ 群内的绑定命令消息
  69.   # 如果启用,请勿安装 Link2QQ 插件,避免玩家通过 Link2QQ 插件更换绑定从而绕过服务器管理员的审查
  70.   # 如果禁用,除非管理员手动为玩家添加绑定,否则玩家将无法自行绑定 QQ,也就无法获得白名单
  71.   use-group-message-command: true

  72.   # 添加绑定消息前缀
  73.   # 玩家需要发送“消息前缀+自己的ID”才会添加绑定
  74.   # 例如:下方设置为“申请白名单”,玩家的ID是“123456”,则玩家需要在群内发送消息“申请白名单123456”
  75.   bind-command-prefix: "申请白名单"

  76.   # 消息
  77.   # 插件向群内发送的所有消息都在这里配置
  78.   messages:
  79.     # 绑定成功
  80.     bind-success: "绑定成功,现在你可以游玩本服务器了!"

  81.     # 绑定失败
  82.     # 无论绑定失败的原因是什么,都只会发这一条
  83.     # 可用变量:%id% - QQ绑定的ID
  84.     bind-failed: |-
  85.       绑定失败,此ID可能已经绑定另一个QQ,或你的QQ已经绑定了一个ID,请联系管理员处理!
  86.       此QQ绑定的ID:%id%
  87.    
  88.     # 由于数据库原因绑定失败
  89.     # 只会出现在use-self-data为true时
  90.     bind-failed-selfdata: |-
  91.       绑定失败,在保存白名单文件时出现异常!
  92.       请联系管理员查看控制台处理!
复制代码


效果展示

  • 没有绑定的玩家不允许进入服务器:
  • 没有绑定的玩家允许进入服务器,但不允许进行任何操作:
  • 玩家成功绑定:
    • 服务器:
    • QQ群:


指令与权限

指令

命令描述权限别名
/whitelist4qq插件主命令whitelist4qq.command.whitelist4qqqwl, qwhitelist
/whitelist4qq reload重新加载配置文件whitelist4qq.command.whitelist4qq.reload
/whitelist4qq remove <玩家名>移除玩家的绑定whitelist4qq.command.whitelist4qq.remove

权限

权限节点描述默认
whitelist4qq.command.whitelist4qq允许使用 /whitelist4qqYES
whitelist4qq.command.whitelist4qq.reload允许使用 /whitelist4qq reloadOP
whitelist4qq.command.whitelist4qq.remove允许使用 /whitelist4qq removeOP


下载(正式版:,测试版:


开源


更多帮助&外部链接



本插件所用所有代码均为原创,不存在借用/抄袭等行为

感谢你的阅读,你评分的人气就是我不断开发的动力(评分人气不消耗自己的人气)


更新日志
可移步Github查看更为完整的更新日志:https://github.com/DreamVoid/Whitelist4QQ/releases

来自群组: Complex Studio

名副其实
错误原因全部归结成一条未免有些太粗暴
建议还是分开来写比较好,万一碰上内部错误还反馈这一条 就不好弄 会对辅助追查造成不便

DreamVoid
名副其实 发表于 2021-10-22 23:51
错误原因全部归结成一条未免有些太粗暴
建议还是分开来写比较好,万一碰上内部错误还反馈这一条 就不好弄  ...

实际上,发出绑定失败消息的情况只会是 prevent-id-rebind 和 prevent-qq-rebind 被检测到
内部错误什么的除了瞎改配置文件是不会出现的,出现内部错误一般都是 MiraiMC 数据库出问题

Yuban-Network
这插件看起来不错哎

二哈大魔王
这种自助白名单不要太舒服了 先收藏一波 回头研究

langyo
早就有在考虑拿 Mirai 和 Bukkit 配合做一套自助白名单发放服务了,这正好可以用作我这边后续开发的范本


HaPi_r
感谢分享
暂时用不上.
收藏夹吃灰

KoGetu37
呃 如果有人恶意绑定咋办?比如有人退群,别人占用他的号。

DreamVoid
KoGetu37 发表于 2021-10-28 16:27
呃 如果有人恶意绑定咋办?比如有人退群,别人占用他的号。

一个服务器至少是有管理员的

1123714557
感谢分享 好人一生平安 版本好全

江祈言
好耶!不错的插件!!

煦归QAQ
拿走了谢谢

江祈言
很不错的插件,不过可否uuid绑定改为id绑定?

DreamVoid
本帖最后由 DreamVoid 于 2021-11-10 00:10 编辑
江祈言 发表于 2021-11-8 01:52
很不错的插件,不过可否uuid绑定改为id绑定?

下个版本会弄

Edit: 用第三方客户端回的帖子,没显示封禁状态,刚刚看了一下发现回帖的全部寄了

MintManatee
支持bc就好了

小扬china
very goog 呀

半世丶233
        好东西!

XiaoCoaiX
很好用,但是每次启动服务器都要手动登录吗,有点麻烦orz

DreamVoid
XiaoCoaiX 发表于 2021年11月16日 中国标准时间 下午9:57:57
很好用,但是每次启动服务器都要手动登录吗,有点麻烦orz

miraimc有自动登录

582098774123
小服专用,收藏了

SailYu
测试了很多遍还是不行  机器人是绑定上去了

by皮卡
谢谢楼主很好用

叶青3366
比如玩家绑定错误我是需要去数据库删除还是有特别的指令呀

冷い桜_
本帖最后由 冷い桜_ 于 2021-12-4 00:34 编辑

请问兼容1.18吗厉害

水煮清娃
以下描述与展望(吐槽)基于我目前在用的并且已经不再支持1.18+的白名单插件得出(不难看出更多是出于私心),作为一个白嫖党我怕自己的言论显得太理直气壮,一直很羡慕会编程自己写插件的大神,在这里先请楼主大人海涵.

刚开始这个白名单插件我用的有点迷茫,我不知道如何让管理员绑定特定的ID和QQ号,后来研究了一下发现是在MiraiMC里进行后台命令的绑定,并不能让管理员直接在QQ群里进行相关的添加和删除操作(或者我眼拙没看到?).个人愚见,我感觉MiraiMC作为一个自我理解属于依赖库性质的插件,关于绑定QQ和ID的事情应该让附属插件去操作和存储相关的数据,MiraiMC的作用应该是监测玩家是否在群里以及对群里出现的特定口令进行相关的回应,这样会获得更高的自由度,互不影响.



白名单插件应该自己接管玩家QQ和ID的绑定,独立保存为一个数据文件(允许服主手动编辑增删数据)与配置文件分隔. 允许禁止玩家自助申请白名单,允许管理员设置一个QQ多个ID,允许管理员添加不需要绑定QQ的例外性白名单,白名单的添加不局限于只能在群里添加,应当加入后台命令.(例如:/wl add ID QQ)
允许机器人在玩家离群删白名单后发出自定义提醒,警示其它人不要随便退群,内容可以加入变量允许显示ID和QQ号等信息.

目前我自己遇到的困扰是我有一个曾经满员的QQ主群和一个后续补充的二群,玩家需要填写白名单经过审核筛查才会给予白名单,并且群里人数多并不希望玩家在群里自助申请白名单,否则交流群都被白名单申请刷屏了,我想让管理员和机器人在一个特定的群里,没有太多其它的外人的情况下,指定的管理员可以通过命令完成绑定和删除白名单操作,并支持其它后台命令的执行.

最后,唯恐冒昧,还请见谅!


DreamSoulFlame
大佬真的很厉害,感谢大佬的插件

MintManatee
能否可选择改为id绑定并非uuid,插件很好用,uuid有点问题

buchaosi
谢谢楼主分享 啊 终于啊 不用一个一个加白名单了

DreamVoid
MintManatee 发表于 2021-12-5 15:05
能否可选择改为id绑定并非uuid,插件很好用,uuid有点问题

可以,下个版本加

DreamVoid
水煮清娃 发表于 2021-12-4 12:26
以下描述与展望(吐槽)基于我目前在用的并且已经不再支持1.18+的白名单插件得出(不难看出更多是出于私心),作 ...

感谢你的建议,我一般优先考虑正版服务器,使用miraimc的数据库就不需要额外管理,也更方便。不过你的建议我会慢慢考虑的

奈粤粤粤粤
强悍啊大佬,

1514601770

MCBBS有你更精彩

你丨造丨吗
绑定错名字了咋办

美丽的胖次
1.18.1版本使用该白名单插件以及前置MiraiMC,两个插件均无法被服务器识别加载,服务器核心paper,连加载信息都没有,开服成功后台可以正常删除这两个插件【证明并没有被加载出来】,使用PlugManX加载的话会显示该文件不是有效的插件。

流过来的给我星
哇哇哇哇哇哇哇哇哇哇

丨叶白丨
群里绑定了进不去,是什么原因,再发绑定显示已绑定

llf0421

进数据库 直接把他qq号对应的那条数据删了 让他重新绑定就行

llf0421
叶青3366 发表于 2021-11-22 14:07
比如玩家绑定错误我是需要去数据库删除还是有特别的指令呀

只有进数据库删,貌似没指令

XIAO_LANG__
好像只有我不懂咋加嘛

MCCOMMAND
我刚把插件安上,然后绑定我的号,结果他提示已经绑定了.删除命令也没有,数据库我也找不到,请问怎么办?

DreamVoid
MCCOMMAND 发表于 2022-1-13 19:41
我刚把插件安上,然后绑定我的号,结果他提示已经绑定了.删除命令也没有,数据库我也找不到,请问怎么办?{:7 ...

删除数据是miraimc的功能,可以在这个插件的帮助找到

[email protected]
好评!!!!插件对我太有用了

xingxing520
原来你已经写出来了嘛,那我就不写了()
寒假回来想填坑的来说

littledaidai
感谢制作和分享,很需要这个插件

wangjinang
        MCBBS有你更精彩~

wykwey
玩家绑定错id怎么办,能不能自定义白名单指令,不通过原版的,通过其他的插件指令

2847278003
挺实用的,感谢分享

Building1
MCBBS有你更精彩~

sdderfg
抱歉  打扰一下  我这边服务器安装以后一直报错,服务器核心为catserver,游戏版本1.12.2。报错内容如下

[00:04:41] [DefaultDispatcher-worker-1/INFO]: [MiraiMC] ECDH key is invalid, start to fetch ecdh public key from server.
[00:04:41] [DefaultDispatcher-worker-1/ERROR]: [MiraiMC] Failed to fetch ECDH public key from server, using default key instead
java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
        at io.ktor.utils.io.bits.MemoryJvmKt.sliceSafe(MemoryJvm.kt:211) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.utils.io.bits.Memory.slice-SK3TCg8(MemoryJvm.kt:47) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.utils.io.charsets.CharsetJVMKt.encodeImpl(CharsetJVM.kt:356) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.utils.io.charsets.EncodingKt.encodeToImpl(Encoding.kt:204) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.utils.io.charsets.EncodingKt.encode(Encoding.kt:62) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.utils.io.charsets.EncodingKt.encode$default(Encoding.kt:57) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.CodecsKt.encodeURLParameter(Codecs.kt:123) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.HttpUrlEncodedKt$formUrlEncodeTo$1.invoke(HttpUrlEncoded.kt:68) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.HttpUrlEncodedKt$formUrlEncodeTo$1.invoke(HttpUrlEncoded.kt:67) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at kotlin.text.StringsKt__AppendableKt.appendElement(Appendable.kt:85) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at kotlin.collections.CollectionsKt___CollectionsKt.joinTo(_Collections.kt:3347) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at kotlin.collections.CollectionsKt___CollectionsKt.joinTo$default(_Collections.kt:3341) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.HttpUrlEncodedKt.formUrlEncodeTo(HttpUrlEncoded.kt:67) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.HttpUrlEncodedKt.formUrlEncodeTo(HttpUrlEncoded.kt:108) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.HttpUrlEncodedKt.formUrlEncodeTo(HttpUrlEncoded.kt:90) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.URLUtilsKt.appendUrlFullPath(URLUtils.kt:101) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.URLUtilsKt.getFullPath(URLUtils.kt:79) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.http.Url.toString(URLBuilder.kt:169) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.client.engine.okhttp.OkHttpEngineKt.convertToOkHttpRequest(OkHttpEngine.kt:183) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.client.engine.okhttp.OkHttpEngineKt.access$convertToOkHttpRequest(OkHttpEngine.kt:1) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.client.engine.okhttp.OkHttpEngine.execute(OkHttpEngine.kt:71) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at io.ktor.client.engine.HttpClientEngine$executeWithinCallContext$2.invokeSuspend(HttpClientEngine.kt:85) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) [mirai-core-all-2.10.0-RC2.jar:?]
[00:04:41] [nioEventLoopGroup-160-2/ERROR]: [MiraiMC] Exception in decoding packet.
java.lang.IllegalStateException: Cannot find error message, unknown login result type: 180, TLVMap = {353=[B@811fcd0}
        at net.mamoe.mirai.internal.network.protocol.packet.login.WtLogin$Login.decode(WtLogin.kt:188) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at net.mamoe.mirai.internal.network.components.PacketCodecImpl.processBody(PacketCodec.kt:368) ~[mirai-core-all-2.10.0-RC2.jar:?]
        at net.mamoe.mirai.internal.network.impl.netty.NettyNetworkHandler$PacketDecodePipeline$send$1.invokeSuspend(NettyNetworkHandler.kt:175) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [mirai-core-all-2.10.0-RC2.jar:?]
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) [mirai-core-all-2.10.0-RC2.jar:?]
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [AbstractEventExecutor.class:4.1.24.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) [SingleThreadEventExecutor.class:4.1.24.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) [NioEventLoop.class:4.1.24.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [SingleThreadEventExecutor$5.class:4.1.24.Final]
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [FastThreadLocalRunnable.class:4.1.24.Final]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_161]

DreamVoid
sdderfg 发表于 2022-1-31 00:05
抱歉  打扰一下  我这边服务器安装以后一直报错,服务器核心为catserver,游戏版本1.12.2。报错内容如下

[ ...

请前往MiraiMC的Github Issue反馈问题

第一页 上一页 下一页 最后一页