由于 recaptcha.net 被屏蔽导致本站所有验证码可能都无法加载。
我们正在考虑切换验证码服务提供商,如果您无法注册和发帖请自行解决,带来的不便请谅解。
请阅读: 论坛规则 常见问题QA
源代码和文档: mamoe/mirai, docs.mirai.mamoe.net
闲聊TG群: @mirai_mamoe, Gitter群 mamoe/mirai
V2.5已更新
项目链接
(初学,写的很烂)
使用前应该查阅的相关文档: Permission Command chat-command也可以通过指令
(/)来点 xx涩图 来通过loliconapi搜涩图(需要权限"com.alins.simplesendphoto:来点")具体见README.md
使用示例:M`EEKTU~1KXW91O9RD0TQVQ.png
使用示例2:
56a90f2b-5e7e-48c0-93ca-c4ae7fb65020-image.png
(随机从自定义的文件夹中抽取一张图片发送)
fd412d33-0a46-4375-98f1-2e095d289d79-1%E7GN_DJHSTA}`(2LT~D(B.png
mirai-console 的扫码登录命令 临时实现。
https://github.com/MrXiaoM/mirai-console-dev-qrlogin
最近已知的风控
服务器最近似乎针对手表协议进行了更新,发送消息过快可能会导致机器人被风控无法再发送群消息。 该风控可通过让机器人频繁发送消息复现。一般来说通过密码登录皆为 code=45 若机器人无法发送群消息,请删除 cache 和 device.json 重新登录再试。 请尝试寻找降低消息发送速度的措施。请等待密码登录相关协议的更新。
这是什么最近二维码登录的 PR 合并了,但是我并没有找到登录命令,所以我打算写一份暂时用着。为了较快地能写出一套登录命令,大部分代码是抄的mirai原来的自动登录系统。
用法在 mirai 版本大于或等于 2.15.0-dev-27 的控制台中安装该插件,如果你不会下载开发版本,可在本文末尾加群下载一键包。你也可以使用最近的一个测试版本 2.15.0-M1
安装插件后启动,在控制台输入命令
qrlogin <QQ号>即可进行二维码登录,第一次进行二维码登录要求使用手机QQ扫码二维码确认,第二次及以后可自动使用登录会话来登录而无需扫码。建议在第一次登录后添加自动登录。
如果看不清控制台输出的二维码图片,可以在 ./data/top.mrxioam.qrlogin/ 找到二维码图片文件。
使用 ANDROID_WATCH 协议进行扫码登录时,需要 mirai 与你的手机处于同一网络环境,可以通过连接同一 WiFi 来实现。
如果你的 mirai 在服务器上,可尝试在服务器上搭建代理服务器,手机连接代理服务器再扫码。
你页可以在本地电脑扫码登录完成后退出登录,在服务器删除 ./bots/机器人QQ号 文件夹,将本地的 ./bots/机器人QQ号 文件夹传输到服务器,至少等待半小时再登录。
等待足够长的时间避免短时间内异地登录造成风控要求重新扫码,这个方法大概率可以成功,在已被标记风控的IP地址可能无法成功。
和 mirai-console 自带命令基本一致,只是命令前缀多了 qr,选项少了密码。
/qrLogin <qq> [protocol] # 扫码登录,协议可用 ANDROID_WATCH 和 MACOS,默认 ANDROID_WATCH /qrAutoLogin add <account> # 添加(扫码登录)自动登录 /qrAutoLogin clear # 清除(扫码登录)自动登录的所有配置 /qrAutoLogin list # 查看(扫码登录)自动登录账号列表 /qrAutoLogin remove <account> # 删除一个(扫码登录)自动登录账号 /qrAutoLogin removeConfig <account> <configKey> # 删除一个账号(扫码登录)自动登录的一个配置项 /qrAutoLogin setConfig <account> <configKey> <value> # 设置一个账号(扫码登录)自动登录的一个配置项添加 jvm 参数 -Dmirai.no-desktop 可以禁用窗口式扫码登录处理器。
添加 jvm 参数 -Dqrlogin.no-solver 可以禁止本插件修改登录解决器。
./gradlew buildPlugin非开发者可无视此部分。
对于想要使用 扫码登录 的 mirai-core 用户,请见 mirai 2.15.0-M1 的 Release Note,里面有扫码登录的操作方法。
或者参考本插件源码:
扫码登录版本一键包下载登录命令: QRLoginCommand.kt
修改登录解决器: QRLoginSolver.kt
加入群 1047497524 在群文件 Mirai 一键包 文件夹下载。
如果你觉得有用,请给本贴点赞,或到 Github 项目地址点一个标星 (Star)
捐助前往 爱发电 捐助我。
头部sign
sign,extra,token
0c07
0c09
有在研究的大佬吗
我已经根据论坛公告上最新发布的关于解决"code=45"的办法去进行调整了。
但是很遗憾,还是"code=45"(233
现在,我想了解一下,在用基于Mirai框架的机器人的同学们,你们还有能正常使用的吗?
我这里指的能正常使用是指机器人可以正常登录上。
注册bot bean的代码
@Bean public Bot bot(){ //创建bot配置类 BotConfiguration botConfiguration = new BotConfiguration(); //设置配置 botConfiguration.setCacheDir(new File(BOT_PATH)); //BOT_PATH 为定义好的常量 botConfiguration.setHeartbeatStrategy(BotConfiguration.HeartbeatStrategy.REGISTER); botConfiguration.setProtocol(BotConfiguration.MiraiProtocol.IPAD); botConfiguration.setWorkingDir(new File(BOT_PATH)); File logdir = new File(BOT_PATH+"log"); if (!logdir.isDirectory()) logdir.mkdirs(); botConfiguration.redirectBotLogToDirectory(logdir); botConfiguration.redirectNetworkLogToDirectory(logdir); botConfiguration.fileBasedDeviceInfo(); botConfiguration.enableContactCache(); botConfiguration.getContactListCache().setSaveIntervalMillis(60000*30); //配置完成,注册bot Bot bot = BotFactory.INSTANCE.newBot(QQ,PASSWORD,botConfiguration); //QQ,PASSWORD也是定义好的常量 //注册监听 messageListener需要继承SimpleListenerHost类 bot.getEventChannel().parentScope(messageListener).registerListenerHost(messageListener); return bot; }在2.12.3包括之前的任意版本都可以正常工作,但是更新至2.13.x之后的任何版本,都会出现
Caused by: java.util.ServiceConfigurationError: net.mamoe.mirai.IMirai: Provider net.mamoe.mirai.internal.MiraiImpl could not be instantiated at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586) ~[na:na] at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813) ~[na:na] at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729) ~[na:na] at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403) ~[na:na] at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:270) ~[kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)] at net.mamoe.mirai.utils.ServicesKt.loadService(Services.kt:18) ~[mirai-core-utils-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.Mirai.findMiraiInstance(IMirai.kt:357) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai._MiraiInstance.get(IMirai.kt:348) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.Mirai.getInstance(IMirai.kt:39) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.message.MessageSerializersImpl.getSerializersModule(MessageSerializersImpl.kt:65) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.message.MessageSerializersImpl.registerSerializers(MessageSerializersImpl.kt:76) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.message.MessageSerializers$INSTANCE.registerSerializers(MessageSerializers.kt) ~[mirai-core-api-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacade.<clinit>(MessageProtocolFacade.kt:165) ~[mirai-core-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.MiraiImplKt._MiraiImpl_static_init(MiraiImpl.kt:25) ~[mirai-core-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.MiraiImpl.<clinit>(MiraiImpl.kt:87) ~[mirai-core-jvm-2.13.0.jar:2.13.0] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789) ~[na:na] ... 53 common frames omitted Caused by: java.lang.NoClassDefFoundError: net/mamoe/mirai/internal/deps/io/ktor/client/engine/okhttp/OkHttp at net.mamoe.mirai.internal.MiraiImplKt.createDefaultHttpClient(MiraiImpl.kt:29) ~[mirai-core-jvm-2.13.0.jar:2.13.0] at net.mamoe.mirai.internal.MiraiImpl.<init>(MiraiImpl.kt:97) ~[mirai-core-jvm-2.13.0.jar:2.13.0] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789) ~[na:na] ... 72 common frames omitted Caused by: java.lang.ClassNotFoundException: net.mamoe.mirai.internal.deps.io.ktor.client.engine.okhttp.OkHttp at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] ... 80 common frames omitted 进程已结束,退出代码1我添加了 okhttp 的依赖项也无法解决 pom文件:
<properties> <mirai.version>2.13.0</mirai.version> </properties> <dependency> <groupId>net.mamoe</groupId> <artifactId>mirai-core-jvm</artifactId> <version>${mirai.version}</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> <scope>compile</scope> </dependency>我不知道如何解决 Okhttp 的依赖冲突(如果问题是这个的话,因为看包名net/mamoe/mirai/internal/deps/io/ktor/client/engine/okhttp/OkHttp似乎是在mirai自己内部实现了,不应该外部管理?)
98da046b-1895-404b-91ba-d9d07fd51169-image.png
-------------2023-------------
2022-06-07,支持扫码登录
调整了权限和指令编写方式,更方便的编写插件
完整的程序可到qq群获取 : 786310882
2022-03-12
协议升级和设备信息完善后,几个45,235错误码的号码可以登录了
升级协议:https://gitee.com/shr25/protocol-version-plugin
通过命令创建(已包含升级后协议)
mvn archetype:generate -B
-DarchetypeGroupId=com.shr25.robot
-DarchetypeArtifactId=qq-robot-plugin-maven
-DarchetypeVersion=2.0.2
-DgroupId=com.shr25.robot.plugin
-DartifactId=fastPlugin
** 插件编写 **https://gitee.com/shr25/shr25-qq-robot/wikis/插件/插件编写?sort_id=5988851
05c9e08a-17b4-4186-8f93-325b3fd1d43a-image.png
-----------------------------2022-----------------------------
适合于java程序猿的一款小框架,shr25-qq-robot
有单独的启动器,lib分离,自动监测新增插件。
采用mybatis-plugin作为数据源,目前支持sqlite,mysql
相信会java的同学大多都了解或者使用spring boot,本项目使用了spring boot+mirai-core。可以很快上手
可以单独调整核心插件或自定义开发插件
项目地址:https://gitee.com/shr25/shr25-qq-robot
启动项目:https://gitee.com/shr25/shr-qq-robot-start
已编写部分插件:发布在:https://gitee.com/shr25
“不好!这里要撑不下去了”
“A4 求救,A4 求救,A32 地区的沙雕数量超过阈值,即将突破防线!”
“什么!?啧。。”
“B8 已完成沙雕清除任务,现赶往 A32 地区”
“这样。。什么时候是个头啊。。”
如果想订阅本贴更新可以点击右上角铃铛🔔按钮
【持续时间】
1970.1.1 ~ 114514.12.31
【活动内容】
糟糕!沙雕小别墅遭到了从未知之处涌出的沙雕攻击,防御工事濒临崩溃,如果能用其他的方法击退它们的话。。
对了!沙雕图!
【参与方式】
在本贴中回复沙雕图,协助沙雕防御工事击退沙雕。
【活动奖励】
从其他 miraier 获取的沙雕图!是不是非常丰厚呢?
【注意事项】
遵守摸鱼区规则。
是沙雕图不是涩图!
【样例】
3c2dfb62-5555-4c00-a17b-d76715bf2088-image.png
基于 Mirai Console 的 管理员 Bot 及其标准
Release
Downloads
maven-central
Codacy Badge
使用前应该查阅的相关文档或项目
User Manual Permission Command Chat Command本插件实现的功能有:
联系人相关 自动审批,指令查看,用户留言 消息相关 发送消息,撤回消息 群管理相关 群消息审核,自动宵禁,自动清理不发言,禁言自动退群本插件提供服务接口以供其他插件拓展功能
例如使用 Mirai Content Censor 依靠百度API审查群消息
例如使用 Mirai Authenticator 验证加群请求
请确认 mcl.jar 的版本是 2.1.0+
./mcl --update-package xyz.cssxsh.mirai:mirai-administrator --channel maven-stable --type plugin
注意: 使用前请确保可以 在聊天环境执行指令
<...>中的是指令名
[...]表示参数,当[...]后面带?时表示参数可选
本插件指令权限ID 格式为 xyz.cssxsh.mirai.plugin.mirai-administrator:command.*, * 是指令的第一指令名
例如 /send to 12345 的权限ID为 xyz.cssxsh.mirai.plugin.mirai-administrator:command.send
对 机器人发送的联系人请求通知消息 回复 同意 或 不同意 或 拉黑 即可处理
插件提供黑名单功能,使用指令 /contact black u12345, 即可拉黑用户,Bot将不响应用户动作(包括其他插件的功能)
group 为 要操作的群,在群聊中可以不指定
cron, 为 CRON 表达式, 由 秒 分钟 小时 日 月 周 组成
例如 0 0 1 * * ? 表示每天 01:00 执行一次,0 30 2 ? * 2-6 表示星期一至星期五 每天 02:30 执行一次
可以使用在线编辑器生成 https://www.bejson.com/othertools/cron/
为防止被 空格 分成多个参数,请使用 " 包裹参数
moment 为 DURATION 表达式, 由 PnDTnHnMn.nS 组成
例如 P1DT2H3M4.5S 表示 一天二小时三分钟四点五秒,PT5H 表示 五小时
mute 指令,moment 小于 0 宵禁就会关闭
例如 /timer mute PT5H "0 0 1 ? * 2-6", 将会在 星期一到星期五的凌晨01:00 禁言 5 小时
例如 /timer mute PT0S "0 0 0 1 * ?", 将会 取消 禁言定时器
day 单位为天数的发言期限, 小于 0 宵禁就会关闭
例如 /timer cleaner 365 "0 0 12 ? * 0", 将会 取消 禁言定时器
格式参考
mail.host=smtp.mail.qq.com mail.auth=true mail.user=xxx mail.password=*** mail.from=cssxsh@qq.com mail.store.protocol=smtp mail.transport.protocol=smtp # smtp mail.smtp.starttls.enable=true mail.smtp.auth=true mail.smtp.timeout=15000QQ邮箱帮助: https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
没有风控,大部分指令发出去之后隔半天才有反应,要不就无反应。插件的消息控制台能看到发出去了实际上群里or单聊都接收不到,请问是咋回事
java对MessageSource序列化怎么操作,用那个类
点歌插件的纯JVM实现。
支持发送小程序、获取外链、发送语音、XML等形式分享。
支持QQ音乐、酷狗、千千、网易、网易电台、B站音频等平台。
有高度自定义的系统、可以进行高度自定义。
如果不使用语音功能,则不需要下载额外的运行库。
项目地址:github:khjxiaogu/MiraiSongPlugin gitee(不及时更新)
GitHub stars
GitHub All Releases
GitHub tag (latest by date)
详细介绍与安装说明见readme。
一切疑问和bug请前往github发送issue,在其他平台询问解答时间可能延迟。
在新设备上登陆之后骰子被cod235风控了,需要更换登录协议解决,想问一下mirai安卓端有更换协议的方法吗
[ERROR]自动登录失败net.mamoe.mirai.network.WrongPasswordException:Error(bot=Bot(3588137263), code=235,title=温馨提示,message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo=)
[ERROR]net.mamoe.mirai.netw
ork.WrongPasswordException:
Error(bot=Bot(3588137263), code=235,title=温馨提示,message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面,errorlnfo=)
[ERROR]at
net.mamoe.mirai.internal.network.components. SsoProcessorlmpl$SlowL oginlmpl.doLogin(SsoProcessor.kt:265)
[ERROR]at
net.mamoe.mirai.internal.network.components. SsoProcessorlmpl$SlowL oginlmpl$doL .ogin$1.invokeSuspend(UnknownSource:14)
[ERROR]at
kotlin.coroutines.jvm.internal.BaseContinuationlmpl.resumeWith(Continuationlmpl.kt:33)
[ERROR]at
kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:33)
[ERROR]at
kotlinx.coroutines. AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102)
[ERROR]at
kotlin.coroutines.jvm.internal.BaseContinuationlmpl.resumeWith(Continuationlmpl.kt:46)
[ERROR]at
kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
[ERROR]at
kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
[ERROR]at
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
[ERROR]at
kotlinx.coroutines. scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
[ERROR]at
kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
[ERROR]Suppressed:
net.mamoe.mirai.utils. StacktraceException: Unwrapped exception:
java.util.concurrent.CancellationException: Bot closed
对于任意好友消息,引用文本消息的targetId都为0
图1
图2
但是对于ForwardMessage,targetId就是正确的,如问题2的第一张图
对于任意好友消息,无论对方消息还是自己的消息,无论转发消息还是文本消息,均出现ids对不上号的问题
图1
图2
对于任意监听到的好友消息,MessageChain的source中的Target都是不正确的
图1
正确的应该如下图这样
图2
还有个概率存在的问题,机器人发送的消息中
log.trace("MessagePostSendEvent..."); OnlineMessageSource.Outgoing source = Objects.requireNonNull(event.getReceipt()).getSource(); source.getIds() // source.getIds() 有时候会返回一个空的int[]数组mirai-core-jvm 2.15.0-M1 | mirai-console 2.15.0-M1 | mirai-console-dev-qrlogin-0.1.7.mirai2 | mirai-login-solver-sakura-0.0.10.mirai2 | fix-protocol-version-1.5.1.mirai2
bot.getEventChannel().subscribeAlways(GroupMessageEvent.class, event -> {
System.out.println(event.getMessage().contentToString());
event.getGroup().sendMessage(event.getMessage().contentToString());
})
2023-06-02 13:41:13 V/Bot xxx: [xxx(xxx)] (xxx) -> 1
1
2023-06-02 13:41:13 V/Net xxx: Send: MessageSvc.PbSendMsg(MessageSvc.PbSendMsg)
2023-06-02 13:41:13 V/Net xxx: Recv: MessageSvc.PbSendMsg
2023-06-02 13:41:16 V/Bot xxx: Group(xxx) <- 1
接收消息正常的救救孩子吧,搞了1小时了
用mirai-http-api插件发送消息,返回值提示成功,mirai控制台上面也有显示,但是实际上却是没发出去消息,并且返回的messageId也为-1,请问有大佬知道怎么解决吗