监听GroupMessagePreSendEvent
,然后判定一下该bot的消息是否要发送(另外实现一个插件或者增加一个权限,用权限来判断),如果不需要就intercept()
cancel()
M
Michael1015198808 发布的最佳帖子
-
RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应
Michael1015198808 发布的最新帖子
-
RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应
@Karlatemp 这个是不接收消息,但楼主想要的是不发送消息吧?有的插件可能不是交互式的,比如每日/每周定时发一条什么消息,如果很多机器人装载了这个插件,只是不接收消息不太能处理这种情况
-
RE: 想找一个b站视频下载转发到qq群的助手
我有一个用
you-get
的方法,不过不是很优雅,抛砖引玉吧object YougetCommand: SimpleCommand( owner = PluginMain, "youget", "you-get", description = "you-get" ) { private var cnt = 0 private var lock = Any() private fun getNo(): Int { synchronized(lock) { cnt += 1 return cnt } } private fun get(process: Process): String { return String(process.inputStream.readNBytes(process.inputStream.available())) } @Handler suspend fun CommandSenderOnMessage<GroupMessageEvent>.run(arg: String, refresh: Long? = null) { val cookie = if (arg.contains("bilibili")) { "/home/michael/cookies/bilibili/youget.txt" } else { null } val no = getNo() var cmdline = "you-get $arg -O /tmp/mirai-$no" if (cookie != null) { cmdline += " -c $cookie" } val f = File("/tmp/").listFiles { _, name -> name.contains("mirai-$no") }.firstOrNull() if (f != null) { f.delete() } val process = ProcessBuilder(cmdline.split(' ')).start() var title = "untitled" var s = "" while (!process.waitFor(1, TimeUnit.SECONDS)) { s += get(process) if (s.contains("Downloading ")) { fromEvent.subject.sendMessage(s.substring(0, s.lastIndexOf("\n"))) val titleLine = s.split("\n")[1] title = titleLine.substring(titleLine.lastIndexOf(' ') + 1) "\\/:*?\"<>|".forEach { title = title.replace(it, '_') } s = s.substring(s.lastIndexOf("\n") + 1) } } if (refresh != null) { do { s += get(process) val pos = s.lastIndexOf('\r') if (pos != -1) { val sub = s.substring(0, pos) val pos2 = sub.lastIndexOf('\r') s = s.substring(pos2) fromEvent.subject.sendMessage(sub.substring( pos2 + 1)) } } while(!process.waitFor(refresh, TimeUnit.SECONDS)) } else { while(!process.waitFor(1, TimeUnit.SECONDS)); } val video = File("/tmp/").listFiles { _, name -> name.contains("mirai-$no") }.firstOrNull() if (video != null) { val ext = video.extension // fromEvent.subject.sendMessage("Uploading ...") println(video.length()) fromEvent.group.files.uploadNewFile( "/$title.$ext", video.toExternalResource(ext).toAutoCloseable(), object : ProgressionCallback<AbsoluteFile, Long> { var last = 0 val tot = video.length() } ) // video.delete() } else { fromEvent.subject.sendMessage("file not found!") } } }
-
RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应
监听
GroupMessagePreSendEvent
,然后判定一下该bot的消息是否要发送(另外实现一个插件或者增加一个权限,用权限来判断),如果不需要就intercept()
cancel()
-
RE: 求问如何使用Python的requests库mirai-api-http中上传图片
file_path = "/tmp/c_exam.png" with open(file_path, "rb") as f: imageUrl = json.loads(requests.post( "http://localhost:9999/uploadImage", files = { "sessionKey":(None, session_key), "type":(None, "friend"), "img": (file_path, f.read()) } ).text)["url"]
解决了解决了orz
-
求问如何使用Python的requests库mirai-api-http中上传图片
查阅文档之后看到需要以
multipart/form-data
格式上传,然后查了一下怎么用requests上传这种格式,写出了如下代码with open("/tmp/c_exam.png", "rb") as f: res = requests.post( "http://localhost:9999/uploadImage", headers={ "sessionKey":session_key, "type":"friend", }, files = { "img": ("/tmp/c_exam.png", f.read()) # "img": ("/tmp/c_exam.png", b"") } )
然而res.text内容为
{"code":400,"msg":"无效参数"}
实在想不出如何解决,用Google搜索mirai-api-http
+requests
+图片
也没找到合适的解法orz -
RE: English-Helper英语单词竞赛插件
@ryan 请问您使用的版本对应哪个commit?动态读取词书的功能是在
96b65f49
之后提供的,但是当时没有放出支持该功能的release。您可以考虑使用3天前的release试试。 -
RE: English-Helper英语单词竞赛插件
@fuyon 请问您使用的版本对应哪个commit?之前有一系列更新没有放出release,您可以考虑使用3天前的release试试。