2 |

3 |
4 |

5 |
6 | ----
7 |
8 | [](https://gitter.im/mamoe/mirai?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
9 |
10 | Mirai 是一个在全平台下运行,提供 QQ Android 和 TIM PC 协议支持的高效率机器人框架
11 |
12 | 这个项目的名字来源于
13 |
京都动画作品《境界的彼方》的栗山未来(Kuriyama Mirai)
14 |
CRYPTON以初音未来为代表的创作与活动(Magical Mirai)
15 | 图标以及形象由画师
DazeCake绘制
16 |
17 |
18 | # mirai-console-addition
19 | mirai-console的扩展插件,提供对console功能的增强
20 |
21 | ### 其他插件开发与获取
22 | [插件中心](https://github.com/mamoe/mirai-plugins)
23 | [mirai-console插件开发快速上手](PluginDocs/ToStart.MD)
24 |
25 | ### 使用
26 |
27 | 将该插件放入`plugins`目录下,并修改`plugins/ConsoleAddition`目录下的配置文件
28 |
29 | ### 功能一览
30 |
31 | + [x] [MD5密码登录](#md5密码登录)
32 | + [x] [保存MD5密码,并自动登录](#自动登录)
33 | + [ ] [多账号登录时管理员共享](#管理员共享) 兼容性问题,暂时关闭该功能
34 | + [ ] 简易定时任务
35 | + [ ] 更好的验证码输入方式
36 | + [ ] Bot智能重启
37 | + [ ] [欢迎讨论和贡献代码][Issue]
38 |
39 |
40 |
41 | ### 全局配置
42 | ```yaml
43 | ## plugin/ConsoleAddition/main.yml
44 | auto-login: true
45 | md5-login: true
46 | share-manager: true
47 |
48 | ```
49 |
50 | > 设置为false关闭指定子功能
51 |
52 |
53 | ### md5密码登录
54 |
55 | `Console Addition`提供了新的Command进行md5登录
56 |
57 | ```
58 | /login-md5 qq md5
59 | ```
60 |
61 | > md5密码为32位md5。
62 | > md5密码是QQ的登录方式,相对于明文密码较安全。
63 | > 但md5密码的丢失,依旧会导致QQ被他人登录。
64 |
65 | ### 自动登录
66 |
67 | `Console Addition`提供了新的Command进行自动保存密码,并在下次启动时,对于保存密码的账号进行自动登录
68 |
69 | ```
70 | /auto-login qq password
71 | ```
72 |
73 | > 为保留正常登录(不保存密码)的模式,自动登录采用了新的命令作为入口。
74 | > 自动登录保存的是用户的md5密码,保存在plugin/ConsoleAddition/auto-login.yml内
75 |
76 | ```yaml
77 | ## plugin/ConsoleAddition/auto-login.yml
78 |
79 | bots:
80 | '123456789':
81 | md5: 41D2821CBFC5C789DAC7D18B28EF87BD
82 |
83 | '987654321':
84 | md5: B6BFAFDA4BA9CCED6846839C6D7B2AD6
85 |
86 | ```
87 |
88 | > 该文件保存自动登录的信息,不建议手动修改
89 |
90 | ### 管理员共享
91 |
92 | 管理员是bot的可执行账户。处理可以在console的终端输入命令外,console还支持在群聊、私聊中监听命令。但命令的发送者账号必须具有bot的管理员权限。
93 | 通过`manager add [botId] [manageId]`为bot添加管理员,详情查看`/manager`命令。
94 | 大多数插件可通过`manager`进行鉴权,但管理员账户时根据单个bot进行配置的。
95 | `管理员共享`则将所有登录的bot进行管理员同步。
96 |
97 | ```yaml
98 | ## plugins/ConsoleAddition/share-manager.yml
99 |
100 | managers:
101 | - 142857
102 | - 428571
103 | - 285714
104 |
105 | ```
106 |
107 | > 可在plugins/ConsoleAddition/share-manager.yml中手动添加管理员。
108 | > 也可以在运行过程中通过/manager命令添加管理员。
109 | > 管理员将会被保存在share-manager.yml文件中,下次启动时自动同步
110 |
111 |
112 |
113 | ### FAQ.
114 |
115 | #### 开发该插件的目的
116 |
117 | [Console-Addition][Console-Addition]是对[Mirai-Console][Mirai-Console]功能的扩展,方便插件开发者和使用者。
118 | 同时该项目可以作为一个插件开发的例子,供想要对`Mirai`贡献插件的开发者参考。
119 |
120 |
121 | #### 为什么没有某某某功能
122 |
123 | 这里,并不实现复杂的逻辑功能。只针对日常开发测试和使用中,能够方便开发者和使用者的功能,进行补充。
124 | 如您需要高定制化的功能,可以寻找其他插件,或在[Issue][Issue]中进行讨论。
125 |
126 | #### 某某功能会被移除吗
127 |
128 | 随着[Mirai-core][Mirai-core]和[Mirai-Console][Mirai-Console]的完善,[Console-Addition][Console-Addition]的功能会逐步被取代。
129 |
130 |
131 |
132 | [Console-Addition]: https://github.com/ryoii/mirai-console-addition
133 | [Mirai-core]: https://github.com/mamoe/mirai
134 | [Mirai-Console]: https://github.com/mamoe/mirai-console
135 | [Issue]: https://github.com/ryoii/mirai-console-addition/issues
136 |
--------------------------------------------------------------------------------
/src/main/kotlin/com/github/ryoii/subplugins/Md5Login.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("EXPERIMENTAL_API_USAGE")
2 |
3 | package com.github.ryoii.subplugins
4 |
5 | import com.github.ryoii.ConsoleAdditionBase
6 | import net.mamoe.mirai.Bot
7 | import net.mamoe.mirai.console.MiraiConsole
8 | import net.mamoe.mirai.console.command.*
9 | import net.mamoe.mirai.console.utils.checkManager
10 | import net.mamoe.mirai.event.subscribeMessages
11 | import net.mamoe.mirai.utils.SimpleLogger
12 |
13 | object Md5Login : SubPlugin {
14 |
15 | override val name = "md5-login"
16 | override var on = false
17 |
18 | override fun onLoad() {
19 | ConsoleAdditionBase.registerCommand {
20 | name = "login-md5"
21 | description = "[console addition]使用md5作为密码登录"
22 | usage = """
23 | /login-md5 qq md5
24 | """.trimIndent()
25 |
26 | onCommand {
27 | if (this !is ConsoleCommandSender) {
28 | sendMessage("请在后台使用该指令")
29 | return@onCommand false
30 | }
31 | if (it.size < 2) {
32 | ConsoleAdditionBase.logger.info("\"/login-md5 qq md5 \" to login a bot")
33 | ConsoleAdditionBase.logger.info("\"/login-md5 qq号 qq密码md5 \" 来登录一个BOT")
34 | return@onCommand false
35 | }
36 | val qqNumber = it[0].toLong()
37 | val md5 = it[1]
38 | ConsoleAdditionBase.logger.info("[Bot md5 Login] login...")
39 | try {
40 | MiraiConsole.frontEnd.prePushBot(qqNumber)
41 | val bot = Bot(qqNumber, md5.chunkedHexToBytes()) {
42 | fileBasedDeviceInfo()
43 | this.loginSolver = MiraiConsole.frontEnd.createLoginSolver()
44 | this.botLoggerSupplier = {
45 | SimpleLogger("[BOT $qqNumber]") { _, message, e ->
46 | ConsoleAdditionBase.logger.info("[BOT $qqNumber] $message")
47 | if (e != null) {
48 | ConsoleAdditionBase.logger.info("[BOT ERROR $qqNumber] $e")
49 | e.printStackTrace()
50 | }
51 | }
52 | }
53 | this.networkLoggerSupplier = {
54 | SimpleLogger("BOT $qqNumber") { _, message, e ->
55 | ConsoleAdditionBase.logger.info("[NETWORK] $message")
56 | if (e != null) {
57 | ConsoleAdditionBase.logger.info("[NETWORK ERROR] $e")
58 | e.printStackTrace()
59 | }
60 | }
61 | }
62 | }
63 | bot.login()
64 | bot.subscribeMessages {
65 | startsWith("/") { message ->
66 | if (bot.checkManager(this.sender.id)) {
67 | val sender = ContactCommandSender(bot, this.subject)
68 | CommandManager.runCommand(
69 | sender, message
70 | )
71 | }
72 | }
73 | }
74 | sendMessage("$qqNumber login successes")
75 | MiraiConsole.frontEnd.pushBot(bot)
76 | } catch (e: Exception) {
77 | sendMessage("$qqNumber login failed -> " + e.message)
78 | }
79 | true
80 | }
81 | }
82 | }
83 |
84 | override fun onEnable() {}
85 | override fun onDisable() {}
86 | override fun onCommand(command: Command, sender: CommandSender, args: List