MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接
    1. 主页
    2. Michael1015198808
    M
    • 资料
    • 关注 1
    • 粉丝 1
    • 主题 4
    • 帖子 21
    • 最佳 1
    • 有争议的 0
    • 群组 0

    Michael1015198808

    @Michael1015198808

    1
    声望
    11
    资料浏览
    21
    帖子
    1
    粉丝
    1
    关注
    注册时间 最后登录

    Michael1015198808 取消关注 关注

    Michael1015198808 发布的最佳帖子

    • RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应

      监听GroupMessagePreSendEvent,然后判定一下该bot的消息是否要发送(另外实现一个插件或者增加一个权限,用权限来判断),如果不需要就intercept() cancel()

      发布在 使用交流
      M
      Michael1015198808

    Michael1015198808 发布的最新帖子

    • RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应

      @Karlatemp 这个是不接收消息,但楼主想要的是不发送消息吧?有的插件可能不是交互式的,比如每日/每周定时发一条什么消息,如果很多机器人装载了这个插件,只是不接收消息不太能处理这种情况

      发布在 使用交流
      M
      Michael1015198808
    • 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!")
              }
          }
      }
      
      发布在 使用交流
      M
      Michael1015198808
    • RE: 新人提问,如何让群主/管理能开关bot在该群的所有响应

      监听GroupMessagePreSendEvent,然后判定一下该bot的消息是否要发送(另外实现一个插件或者增加一个权限,用权限来判断),如果不需要就intercept() cancel()

      发布在 使用交流
      M
      Michael1015198808
    • 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

      发布在 使用交流
      M
      Michael1015198808
    • 求问如何使用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

      发布在 使用交流
      M
      Michael1015198808
    • 机器人编码异常

      在接收到某个含有特殊编码的群后,mcl-2.1.1的输出开始出现乱码,之前使用mcl-1.2.2的时候没遇到过这个问题。

      QQ图片1145141919810.png

      附触发bug的群名

      LUG@NJU<$ǿĀD>

      发布在 BUG反馈
      M
      Michael1015198808
    • RE: English-Helper英语单词竞赛插件

      @tsudzuki 啥问题(现在开学了,我和原插件开发者估计没啥时间能花在这插件上了)

      发布在 插件发布
      M
      Michael1015198808
    • RE: English-Helper英语单词竞赛插件

      @heckerz 要解压

      发布在 插件发布
      M
      Michael1015198808
    • RE: English-Helper英语单词竞赛插件

      @ryan 请问您使用的版本对应哪个commit?动态读取词书的功能是在96b65f49之后提供的,但是当时没有放出支持该功能的release。您可以考虑使用3天前的release试试。

      发布在 插件发布
      M
      Michael1015198808
    • RE: English-Helper英语单词竞赛插件

      @fuyon 请问您使用的版本对应哪个commit?之前有一系列更新没有放出release,您可以考虑使用3天前的release试试。

      发布在 插件发布
      M
      Michael1015198808