MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接
    1. 主页
    2. MrXiaoM
    3. 主题
    • 资料
    • 关注 9
    • 粉丝 39
    • 主题 37
    • 帖子 875
    • 最佳 211
    • 有争议的 0
    • 群组 5

    MrXiaoM 创建的主题

    • MrXiaoM

      mirai 消息变量替换工具类
      技术交流板块 • kotlin jvm mirai-core util • • MrXiaoM

      4
      0
      赞同
      4
      帖子
      465
      浏览

      MrXiaoM

      ...

      使用 kotlin 编写,但有 java 兼容。

      import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.message.data.* import net.mamoe.mirai.utils.ExternalResource import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource import java.net.URL /** * 消息助手 * @author MrXiaoM */ object MessageHelper { /** * 参见 [String.replace] * @author MrXiaoM */ @JvmStatic fun replace(s: String, replacements: Map<String, SingleMessage>): MessageChain = runBlocking { s.replace(replacements) } } /** * 消息助手预处理消息接口 * @author MrXiaoM */ interface PrepareMessage : SingleMessage { /** * 该方法将会在该消息需要被处理时调用以生成消息。 * 有时,用户可能会在单条消息多次使用同一变量,建议储存生成结果以便复用。 * @author MrXiaoM */ suspend fun generateMessage(): SingleMessage override fun contentToString(): String = "" } /** * 适用于 MessageHelper.replace 的预上传图片 * @author MrXiaoM * @param contact 要上传到的联系人 * @param handler 需要上传时用于生成 ExternalResource 的处理器,自行编写处理器时应自觉 toAutoCloseable() * @param failedText 上传失败时的代替文本 */ class PrepareUploadImage( private val contact: Contact, private val handler: suspend () -> ExternalResource?, private val failedText: String = "" ) : PrepareMessage { private var generated: SingleMessage? = null override suspend fun generateMessage(): SingleMessage { generated?.also { return it } return try { contact.uploadImage(handler()!!).also { generated = it } } catch (_: Throwable) { PlainText(failedText) } } override fun contentToString(): String = failedText override fun toString(): String = "PrepareUploadImage(contact=$contact)" companion object { /** * 生成预下载图片消息。 * 图片将会在 replace 时发现需要用到该变量时下载。 * @author MrXiaoM * @param contact 要上传到的联系人 * @param link 图片下载链接 * @param failedText 上传失败时的返回消息 */ @JvmStatic fun fromURL(contact: Contact, link: String, failedText: String = ""): PrepareUploadImage = PrepareUploadImage(contact, { try { withContext(Dispatchers.IO) { URL(link).openConnection().also { it.connect() }.getInputStream() }.toExternalResource().toAutoCloseable() } catch (t: Throwable) { t.printStackTrace() null } }, failedText) /** * 生成预下载图片消息。 * * 参见 [fromURL] * @param link 要下载图片的链接 * @param failedText 上传失败时的返回消息 */ @JvmStatic fun Contact.prepareUploadImage(link: String, failedText: String = ""): PrepareUploadImage = fromURL(this, link, failedText) /** * 生成预下载头像图片消息。 * * 参见 [prepareUploadImage] * @param failedText 上传失败时的返回消息 */ @JvmStatic fun Contact.prepareUploadAvatarImage(failedText: String = ""): PrepareUploadImage = prepareUploadImage(avatarUrl, failedText) } } /** * 将字符串作为字符串模板,替换其中的变量为 SingleMessage 来生成 MessageChain * * 使用示例: @用户并发送他的头像 * ```kotlin * val member = event.sender * "\$at 你好,你的头像是\n \$pic".replace(mapOf("at" to At(member), "pic" to member.prepareUploadAvatarImage())) * ``` * * 在配置文件或者在 java 中不需要用 \ 将 $ 转义,这会对用户自定义机器人发送的消息的体验更加友好 * @author MrXiaoM * @param replacements 变量对照表 */ suspend fun String.replace(replacements: Map<String, SingleMessage>): MessageChain { if (!this.contains("\$") || replacements.isEmpty()) return PlainText(this).toMessageChain() val message = MessageChainBuilder() val s = this.split("\$").toMutableList() message.add(s.removeAt(0)) s.forEach { text -> var isOriginal = true for ((k, m) in replacements) { if (!text.startsWith(k)) continue if (m is PrepareMessage) message.add(m.generateMessage()) else message.add(m) message.add(text.substring(k.length)) isOriginal = false break } if (isOriginal) message.add("\$$text") } return message.build() }

      刚学 kt 不久,代码有点烂,但是能用就行。以下是使用例子,均会生成 @人间工作p 你好,2431208142

      // kotlin val msg = "\$at 你好,\$qq".replace(mapOf("qq" to PlainText(sender.id), "at" to At(sender))) // java Map<String, SingleMessage> replacements = new HashMap<>(); replacements.put("qq", new PlainText(String.valueOf(sender.getId()))); replacements.put("at", new At(sender.getId())); MessageChain msg = MessageHelper.replace("$at 你好,$qq", replacements);

      若要使用这份代码,你只需要在源代码中保留作者信息(即保留 @author MrXiaoM)即可。

    • MrXiaoM

      WifeYouWant —— 每天随机把群友当老婆
      插件发布 • kotlin jvm plugin xxxyouwant 抽老婆 • • MrXiaoM

      70
      5
      赞同
      70
      帖子
      13776
      浏览

      MrXiaoM

      WifeYouWant

      项目地址:https://github.com/MrXiaoM/WifeYouWant

      「你想要的插件」系列作品

      本插件移植自 椛椛 ᴮᴼᵀ

      ...

      名场面
      WifeYouWant.png

      特性 每天可以从群友里随机抽一次老婆 (渣男!) 不想要的可以换 (渣男!!) 可设置只能抽和自己性别相反的人,也可以无视性别 可以设置能抽到自己 可以设置能 NTR (重复抽到群友) 安装

      到 Releases 下载插件并放入 plugins 文件夹进行安装

      2.11 或以上下载 WifeYouWant-*.mirai2.jar

      2.11 以下下载 WifeYouWant-legacy-*.mirai.jar
      安装完毕后,编辑配置文件作出你想要的修改。在控制台执行 /wuw reload 重载配置即可~

      配置文件内有详细的注释,详见 源码

      用法

      随机挑选一位群友,在明天之前,无论怎么抽都是那位群友

      抽老婆

      抛弃老婆,重新抽一位群友

      换老婆

      关键词可在配置文件中修改

      捐助

      前往 爱发电 捐助我。

      ...

      来自群组: SkyNet1748

    • MrXiaoM

      和 mirai 娘贴贴!
      摸鱼区 • mirai-core mirai-console 同人创作 pixiv • • MrXiaoM

      5
      7
      赞同
      5
      帖子
      852
      浏览

      MrXiaoM

      同人图这不就来了吗?(我真的不会画画,硬画的)

      pid 99557438

      图片

    • MrXiaoM

      Mirai 摸鱼&开发交流群 非官方
      摸鱼区 • • MrXiaoM

      24
      1
      赞同
      24
      帖子
      2956
      浏览

      MrXiaoM

      如果你在玩 mirai 途中遇到问题可以尝试加群 1047497524 询问以快速得到答案。
      不要问有没有人,不要不贴截图,不要笼统提问,不要高血压提问,我谢谢你。

      本群有以下要素 转载高血压图片 超超猫猫 版本过低滚去论坛看223 除了mirai以外什么都聊 更新进度放送
    • MrXiaoM

      在 mirai-console 插件配置文件中添加注释
      技术交流板块 • mirai-console 插件 注释 教程 配置文件 • • MrXiaoM

      2
      0
      赞同
      2
      帖子
      338
      浏览

      MrXiaoM

      有时候我们可能不可避免地要给配置文件添加注释以便提升配置文件可读性,这个时候就要添加注释了。

      怎么用

      要添加注释,首先导入包 yamlkt

      compileOnly("net.mamoe.yamlkt:yamlkt-jvm:0.10.2")

      然后在你的配置上头打上 @Comment 注解就行,比如

      public object MyConfig : AutoSavePluginConfig("config") { @Comment("这是一条注释") public var message: String by value("awa") @Comment( """ 可以多行 就像这样 或者你用换行符也行 """ ) public var enable : Boolean by value(true) } 这其实 又是一个坑

      我想加注释无奈 mirai-console 文档里没教程。

      某天我忽然想到自带的自动登录配置文件不是有注释吗,于是我在源码找到了 AutoLoginConfig,才看到了 @Comment 注解。

      其实这个东西就在 Him188/yamlkt 的最下面

    • MrXiaoM

      SpecialTitleYouWant —— 喜闻见乐的头衔插件来了
      插件发布 • kotlin jvm plugin xxxyouwant 头衔 • • MrXiaoM

      5
      8
      赞同
      5
      帖子
      3064
      浏览

      MrXiaoM

      SpecialTitleYouWant

      项目地址: https://github.com/MrXiaoM/SpecialTitleYouWant

      「你想要的插件」系列作品

      设置任何你想要的群头衔!

      特性 可以自定义设置头衔的命令 可以自定义大部分提示信息 可以设置违禁词 违禁词可用正则表达式 安装

      到 Releases 下载插件并放入 plugins 文件夹进行安装

      2.11 或以上下载 SpecialTitleYouWant-*.mirai2.jar

      2.11 以下下载 SpecialTitleYouWant-legacy-*.mirai.jar

      安装完毕后,编辑配置文件 (路径: config/top.mrxiaom.SpecialTitleYouWant/config.yml,在旧版mirai的路径是config/自定义头衔/config.yml)

      配置文件注释请见源码
      或者展开下面的折叠

      ... # 启用该插件的群 enableGroups: [] # 头衔违禁词(不分大小写) illegalWords: - 变态 - bt - 病娇 # 头衔违禁词正则表达式 illegalPatterns: - '^(可爱)?[男女]?(小学|[初高]中|大[学专])生$' # 最小长度,-1为不限制 minLength: -1 # 最大长度,-1为不限制,但即使不限制,依然会截断头衔长度 maxLength: -1 # 修改头衔命令 cmd: - 我要头衔 - 设置头衔 # 消息,若包括%quote%将会回复用户 # %at%将会替换为@用户 # %old%将会替换成旧头衔 # %title%将会替换成新头衔 msgTooLong: "%quote%你输入的头衔过长" msgTooShort: "%quote%你输入的头衔过短" msgSet: "%quote%已设置头衔!" msgIllegal: "%quote%你的头衔包含违禁词,不许设置!" msgNotOwner: "%quote%机器人不是群主,无法设置头衔!" msgNotNormalMember: "%quote%你不是普通群员(比如开启了匿名),无法设置头衔!" msgReload: "配置文件已重载" msgHelp: - "自定义头衔 帮助" - "/stuw reload - 重载配置文件"

      在 enableGroups 中加入要使用该插件的群号,如

      enableGroups: - 114514 - 1919810

      在控制台执行 /stuw reload 重载配置文件即可

      如果你觉得这个插件有用,不妨动动手指点击帖子右下角的大拇指对我表示支持

      为什么不用 console 的內建权限系统?
      高情商: 据我了解大多数小白都不了解什么是“被许可人”之类对他们来说有点复杂的东西,那我不如返璞归真,使用配置文件储存需要启用的群。
      低情商: 反正需求不高,懒得学权限系统怎么用。

      用法

      机器人必须是群主!!!

      @机器人 我要头衔 头衔名称

      命令可以在配置文件的cmd那里设置,在输入命令时可以不打空格

      捐助

      前往 爱发电 捐助我。

      ...

      来自群组: SkyNet1748

    • MrXiaoM

      插 件 惊 魂
      摸鱼区 • minecraft • • MrXiaoM

      2
      2
      赞同
      2
      帖子
      450
      浏览

      MrXiaoM

      刚刚发生的事

      我把一百五十多行的语言文件翻译完了

      保存!重载!

      打开插件的商店编辑器,右下角提示

      Unavailable

      The free version

      is limited to

      only one shop

      噔 噔 咚,限到一个商店我玩个毛

      打开插件详细页,Buy Now for 9.99 EUR

      然后一眼瞄到 Source Code 几个大字,心情又平复了下来

      现在仓库 Clone 了十几分钟,

      Receiving objects: 49% (6973/13996), 5.22MiB | 24.00 KiB/s

      希望人没事

      2:00 更新

      我草出事了,作者专门留了一个库在他的私有仓库,我拿不到

      现在在尝试从免费版插件里把那个库阉割出来

      不是所有开源付费插件都跟 Residence 和 PlotSquared 那么善良(确信

      2:11 更新

      我草不止一个库,它还要从一个私有仓库 Clone 一堆库下来

      2:46 更新

      P1H2M5RHG(NEYYD))7`I6FL.jpg

    • MrXiaoM

      适用于新人的 mirai 帮助文档【备份】
      技术交流板块 • 文档 入门 mirai mirai-console doc • • MrXiaoM

      7
      1
      赞同
      7
      帖子
      5587
      浏览

      MrXiaoM

      已弃用

      该文档现已弃用,新的文档正在编写中,敬请期待
      https://wiki.mrxiaom.top/mirai

      旧文档 Github: MrXiaoM/mirai-docs
      旧文档地址: https://mirai-docs.doomteam.fun/
      一切内容以 Github 为准
      希望论坛字数限制够放得下文档
      如果你想实时收到更新通知,请点击右边第二个 铃铛按钮 来关注本贴

      mirai-docs

      面向初学者 的 mirai 非官方帮助文档

      在本文档中,我将会按照顺序一步一步地教学,就像打怪升级一样

      目前正在编写和整理中,敬请期待

      注: 初学者 指 new miraier,刚接触 mirai 的人

      观前须知

      请先阅读《提问的智慧 (How To Ask Questions The Smart Way)》以确保你在遇到简单的问题时能够 STFW (到网上搜索) 以及 RTFM (读软件给出的帮助手册) 来解决问题而不是去问别人占用别人的时间,如果你的问题能搜索得到,那你得到的回复很可能是别人搜索了然后发你的,

      鲁迅曾经说过:“无端空耗别人的时间其实是无异于谋财害命的。”

      所以在没到网上搜索之前不要提问!不要提问!不要提问!

      在遇到网上搜索/读手册解决不了 (前提是要读过,要实践过确实不行) 再去以正确的方式提问,比如提供尽可能完整的信息,包括但不限于系统版本/所使用的软件或组件版本/进行的详细操作/输出日志或者弹出信息等等,而不是你问在吗,别人回答在,你问问题,别人找你要信息,你发信息,别人觉得信息不够推断不出来你的问题然后再进一步找你要信息…… 直接一步到位把信息提供全面难道不好吗?

      如果你有问题,可以在本仓库 发布 issue (没有 Github 账号?点这里注册)。

      也可以向我的邮箱 coolxiaom95@gmail.com 发送邮件求助,

      或者加我的QQ 2431208142 (我没设加好友验证,申请添加好友之后请直接说明来意和详细描述问题)。

      不管是在哪个渠道联系我,我看到你的消息之后将会在我空闲时尽快回复。

      确认你的水平

      在查阅这份文档之前,请确保你已掌握 kotlin 或者 java 两门语言中的其中一门

      如果你已掌握一门语言并能使用这门语言进行网络操作,很抱歉目前我没有对这方面的研究,你可以去查看官方文档

      如果你是完全不会编程的人类,你只需要查阅用户文档

      如果你不是人类…… 能看得懂简体中文并能理解句子的意思的话大概也可以看得懂吧

      开始吧

      适合不会编程的新手: 用户文档

      如果你还不会如何安装和登录机器人,也请查阅用户文档

      使用 kotlin 或 java 来编写 mirai 衍生软件: 开发文档

      使用其他语言来编写 mirai 衍生软件: 暂无文档,建议查阅官方文档

      在这个文档发布之前,已经有很多前辈编写了 mirai-api-http 或者 onebot-kotlin 的其他语言实现,你可以在 mirai 官方开发文档 找到相应语言的社区SDK以便快速开始开发

      如果你对更新 BlocklyMirai 有兴趣,可以查看 BlocklyMirai 帮助文档

      更新

      不定期更新,如果你有意愿更新文档,PRs welcome

      赞助

      本文档不接受赞助。

      如果你喜欢这个文档并有意资助,开发组比我更需要赞助,请重定向到 【官方公告】关于论坛赞助/资金流向公示/可持续发展等

      计划 开发文档以循循渐进的形式写,从部署到登录到事件到消息等等 不使用社区 SDK 的非 jvm 语言与 mirai-api-http 交互教程。因为社区 SDK 太多了很难讲明白 XD 考虑到 GitBook 日常前端崩溃,所以在本文档基本上完成之后,会在 MiraiForum 技术交流板块发一贴来备份以方便难以访问 Github 的用户查阅
    • MrXiaoM

      面向新人的 mirai 开发/使用文档
      开发交流 • • MrXiaoM

      21
      4
      赞同
      21
      帖子
      3251
      浏览

      MrXiaoM

      @Deprecated

      新文档已部署到 https://wiki.mrxiaom.top/mirai
      以下信息均已过期。

      旧文档备份 https://mirai.mamoe.net/topic/802

      MrXiaoM/mirai-docs: 面向初学者的mirai非官方帮助文档
      接近保姆级的文档目前正在施工中,敬请期待(

      访问地址:https://mirai-docs.doomteam.fun

    • MrXiaoM

      [Java][踩坑] 关于中文域名解析 Punycode 编码
      技术交流板块 • • MrXiaoM

      1
      0
      赞同
      1
      帖子
      204
      浏览

      MrXiaoM

      我有一个朋友,他买了个域名,然后绑了 CNAME 和 SRV 记录到我的 Minecraft 服务器上,但可惜的是,Minecraft 客户端并无 Punycode 编码域名支持,然后我用网络爬虫 (低情商: 百度) 搜找到了 Punycode 转码的码子,以为就一劳永逸了,结果这玩意并不完全,下面的是我补好可以直接用的轮子。写得不是很好,如有错希望大佬能指出

      public class Punycode { private static int TMIN = 1; private static int TMAX = 26; private static int BASE = 36; private static int INITIAL_N = 128; private static int INITIAL_BIAS = 72; private static int DAMP = 700; private static int SKEW = 38; private static char DELIMITER = '-'; public static String encodeURL(String url) { if (!url.contains(".")) return url; String mainContent = url.substring(0, url.lastIndexOf(".")); String prefix = mainContent.contains(".") ? mainContent.substring(0, mainContent.lastIndexOf(".") + 1) : ""; if (mainContent.contains(".")) mainContent = mainContent.substring(mainContent.lastIndexOf(".") + 1); mainContent = Punycode.encode(mainContent, "xn--"); String suffix = url.substring(url.lastIndexOf(".")); return prefix + mainContent + suffix; } /** * * Punycodes a unicode string. THIS IS NOT SUITABLE FOR UNICODE AND LETTER * MIXING * * @param input Unicode string. * * @return Punycoded string, but original text for throw an exception * */ public static String encode(String input) { return Punycode.encode(input, ""); } /** * * Punycodes a unicode string. THIS IS NOT SUITABLE FOR UNICODE AND LETTER * MIXING * * @param input Unicode string. * * @return Punycoded string, but original text for throw an exception * */ public static String encode(String input, String successPrefix) { int n = INITIAL_N; int delta = 0; int bias = INITIAL_BIAS; StringBuilder output = new StringBuilder(); int b = 0; for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (isBasic(c)) { output.append(c); b++; } } if(b >= input.length()) return output.toString(); if (b > 0) { output.append(DELIMITER); } int h = b; while (h < input.length()) { int m = Integer.MAX_VALUE; for (int i = 0; i < input.length(); i++) { int c = input.charAt(i); if (c >= n && c < m) { m = c; } } if (m - n > (Integer.MAX_VALUE - delta) / (h + 1)) { return input; } delta = delta + (m - n) * (h + 1); n = m; for (int j = 0; j < input.length(); j++) { int c = input.charAt(j); if (c < n) { delta++; if (0 == delta) { return input; } } if (c == n) { int q = delta; for (int k = BASE;; k += BASE) { int t; if (k <= bias) { t = TMIN; } else if (k >= bias + TMAX) { t = TMAX; } else { t = k - bias; } if (q < t) { break; } output.append((char) digit2codepoint(t + (q - t) % (BASE - t))); q = (q - t) / (BASE - t); } output.append((char) digit2codepoint(q)); bias = adapt(delta, h + 1, h == b); delta = 0; h++; } } delta++; n++; } output.insert(0, successPrefix); return output.toString(); } private static int adapt(int delta, int numpoints, boolean first) { if (first) { delta = delta / DAMP; } else { delta = delta / 2; } delta = delta + (delta / numpoints); int k = 0; while (delta > ((BASE - TMIN) * TMAX) / 2) { delta = delta / (BASE - TMIN); k = k + BASE; } return k + ((BASE - TMIN + 1) * delta) / (delta + SKEW); } private static boolean isBasic(char c) { return c < 0x80; } private static int digit2codepoint(int d) { if (d < 26) { return d + 'a'; } else if (d < 36) { return d - 26 + '0'; } else { return d; } } }

      CSDN

      那个朋友真不是我自己

    • MrXiaoM

      氧化钙
      摸鱼区 • • MrXiaoM

      2
      0
      赞同
      2
      帖子
      216
      浏览

      MrXiaoM

      简单地还原了下Microsoft的某个载入动画,然后把图形“点”换成了文字“草”
      bilibili video

    • MrXiaoM

      Natsuko - 一只乱七八糟的机器人
      其他项目发布 • • MrXiaoM

      7
      0
      赞同
      7
      帖子
      1414
      浏览

      MrXiaoM

      我觉得我这个写得一塌糊涂的机器人不应该发在插件版…

      Github: MrXiaoM/Natsuko

      之前我在我群里一直要承诺把我的机器人开源的,
      但是因为一直没写配置文件让机器人更好编辑而搁置了
      现在懒得写了,写了一半不到的配置文件,剩下一些功能自己去源码改,
      因为这个原因我不会给出编译好的jar,若要使用务必自行编译

      功能

      当前 Natsuko 的功能如下

      看涩图(要自己加图进去 黑名单 机器人收到私信自动转发给主人 操控机器人发消息 mcban查询 Minecraft服务器状态查询 (支持 SRV) 百度新闻 自动回复消息 需要管理手动触发的人机验证 (需要自己加题目) [已弃用且停止维护]Minecraft服务器挂机机器人

      一切以Github页面的README为准

    • MrXiaoM

      [Java][Minecraft] RPGItems 4.0.9 插件后门解析
      技术交流板块 • java minecraft spigot rpgitems • • MrXiaoM

      1
      3
      赞同
      1
      帖子
      1038
      浏览

      MrXiaoM

      转载自 CSDN 懒怠的小猫Official,是的,就是我自己

      前言

      【菜鸡发帖,大佬勿喷】

      为什么我要写这篇文章?

      之前看到群里有人要 4.0.9 的 RPGItems 的去后门版本,
      4.0.9 这是个臭名昭著的后门版本,当然它应该不是作者本人开发的,是被二次开发过的 —— 原版 RPGItems 2 在 3.5 就停更了,那个时候才最高支持到 CraftBukkit 1.7.2
      这篇文章会向你提供带有后门和去除了后门的 RPGItems 4.0.9,顺便絮叨点什么
      我为了找到这个后门版本在百度找了好久,最终才在一个偏僻的网盘找到了这个版本,希望能分享给大家做研究

      你可能需要准备什么?

      百度网盘,JByteMod,Jdk,压缩软件,资源文件管理器,和你的大脑
      差不多就这些

      后门在哪里?

      打开 JByteMod,用它打开带有后门的 RPGItems4.0.9,
      【以下操作区分大小写】
      展开“yo”,打开bG.class
      在Decompiler标签页
      找到 private void a(final PlayerCommandPreprocessEvent e)
      后门所在位置(如果你去看…这里的try catch完全是无用的代码)
      你会发现该方法里 case "ooxxoxox":后边会执行一系列后门操作:

      遍历所有玩家 设置玩家为op 设置玩家为创造模式 设置玩家允许飞行 设置玩家的飞行状态为是 清空玩家背包

      好家伙,我看了以后直呼恶俗,现在来把后门删掉吧
      在 JByteMod 展开 bG.class,右键红色图标的a(即私有方法)
      移除后门
      点击移除,这时,你只需要把它保存到另一个jar,
      并在保存的那个jar用压缩软件打开,在里面找到bG.class把它解压出来,
      再用压缩软件打开原来有后门的插件,把bG.class一替换过去就完事了

      因为这个后门它是单独放在一个方法里,所以比较好删

      这是我一贯的做法…因为我有时候直接用 JByteMod 保存的会不行

      如果有错希望大佬能指点

      如何触发后门

      有安装 RPGItems 4.0.9 的服主要注意了
      根据代码可以判断出,触发后门的方法是
      /rpgitems3v4s ooxxoxox

      寻找疑点

      【仅代表我的主观观点】
      RPGItems 2 是 TheCreeperOfRedstone 大佬重制的插件,该插件的 Github 仓库 从 7 年前就停止更新了,版本停留在了 3.5,也就是说现在流传的 4.0.9 是二次开发的版本,我们在 4.0.9 的 plugin.yml 里面发现,作者有三个人

      author: [ThinkOfDeath, TheCreeperOfRedstone, 尘曲]

      ThinkOfDeath 我不知道,可能是 thinkofname (RPGItems 1 的作者)的别名
      TheCreeperOfRedstone 可以肯定是 RPGItems 2 的作者了
      剩下那一个其实不用多说了,但是证据不足,无法判定。这个插件的风波都已经过去这么久了,希望大家理性看待

      很明显 RPGItems 4.0.9 是被混淆的,而原版本 3.5 即使是发布版也是不混淆的,混淆只有两种可能:不想让成果被随意修改 或者 做一些不为人知的事情 —— 就像添加后门

      我又唠叨了,希望这篇文章能够帮到你

      下载

      无后门版本: [没门]RPG_Items4.0.9.jar
      有后门版本: [危险来到你身边]RPG_Items4.0.9.jar
      3.5原版: rpgitems2-3.5.jar

      百度网盘 - 提取码:0000
      如果链接挂了可以发邮件给我: mrxiaom@qq.com
      希望能对你有所帮助

    • MrXiaoM

      今天好忙
      摸鱼区 • • MrXiaoM

      4
      0
      赞同
      4
      帖子
      323
      浏览

      MrXiaoM

      我挺忙的
      大家都在干什么呢 xwx
      我最近一直在更新Minecraft服务器插件,

      功 能 大 杂 烩
      不 相 干 的 功 能 全 都 丢 到 一 起

      然后时不时接到用户反馈机器人插件出问题就去修复

    • MrXiaoM

      MiraiUtils-好像没什么用的工具库
      其他项目发布 • java 工具库 命令系统 util command • • MrXiaoM

      1
      0
      赞同
      1
      帖子
      602
      浏览

      MrXiaoM

      其实是我不会用懒得学 mirai 的命令系统才写的这个东西的啦 QAQ
      MrXiaoM/MiraiUtils

      本工具库包含以下内容:

      命令系统 (因为我玩不明白mirai的命令系统才自己写的)

      不定期永远不会更新

    • MrXiaoM

      一个人太闲会做出些什么东西
      摸鱼区 • • MrXiaoM

      5
      0
      赞同
      5
      帖子
      567
      浏览

      MrXiaoM

      臭 机 器 人
      臭机器人.png
      诈 骗 机 器 人
      诈骗机器人.png

    • 1
    • 2
    • 2 / 2