MrXiaoM 发布的帖子
-
mirai 消息变量替换工具类
使用 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
)即可。 -
RE: 来博客互换友情链接
来晚了
网站名称:MrXiaoM的博客
地址:https://blog.mrxiaom.top
头像地址:https://blog.mrxiaom.top/logo-64.png
-
WifeYouWant —— 每天随机把群友当老婆
WifeYouWant
项目地址:https://github.com/MrXiaoM/WifeYouWant
「你想要的插件」系列作品
本插件移植自 椛椛 ᴮᴼᵀ
名场面
特性
- 每天可以从群友里随机抽一次老婆 (渣男!)
- 不想要的可以换 (渣男!!)
- 可设置只能抽和自己性别相反的人,也可以无视性别
- 可以设置能抽到自己
- 可以设置能 NTR (重复抽到群友)
安装
到 Releases 下载插件并放入 plugins 文件夹进行安装
2.11 或以上下载 WifeYouWant-*.mirai2.jar
2.11 以下下载 WifeYouWant-legacy-*.mirai.jar
安装完毕后,编辑配置文件作出你想要的修改。在控制台执行/wuw reload
重载配置即可~配置文件内有详细的注释,详见 源码
用法
随机挑选一位群友,在明天之前,无论怎么抽都是那位群友
抽老婆
抛弃老婆,重新抽一位群友
换老婆
关键词可在配置文件中修改
捐助
前往 爱发电 捐助我。
来自群组: SkyNet1748
-
RE: 简单的Rss订阅插件 已添加RssHub支持 番剧订阅Bt种子自动上传
@Moon1995 噢我的上帝啊,为什么不使用开源免费还不用登录查看的
pastebin.pl 呢
好吧我找的这个过不去验证码()
啊,找到了,moz://a 在线剪贴板:https://pastebin.mozilla.org/ -
Mirai 摸鱼&开发交流群 非官方
如果你在玩 mirai 途中遇到问题可以尝试加群
1047497524
询问以快速得到答案。
不要问有没有人,不要不贴截图,不要笼统提问,不要高血压提问,我谢谢你。本群有以下要素
- 转载高血压图片
超超猫猫- 版本过低滚去论坛看223
- 除了mirai以外什么都聊
- 更新进度放送
-
在 mirai-console 插件配置文件中添加注释
有时候我们可能不可避免地要给配置文件添加注释以便提升配置文件可读性,这个时候就要添加注释了。
怎么用
要添加注释,首先导入包 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 的最下面
-
RE: IDEA的mirai console插件有操作说明吗?
说实话mirai的文档藏得挺深的
详见 README 和 MiraiConsoleExtension 的注释
啊上面那个是 Gradle 的,IDEA 的在这里
其实说宽了就只有新建项目目模板和代码检查两个功能 -
RE: 关于基于 Mirai Console 的【经济管理】前置插件的构思
https://github.com/SkyNet1748/mirai-economy-core/pull/1
没看帖子,拿着教室的教学机搓了一晚上写的,感觉和你描述的差不多,只是接口管理器感觉仍不完善
坐等css大佬把我的代码全部覆盖(