Skip to content
This repository was archived by the owner on Oct 13, 2022. It is now read-only.
/ PenguinCompiler Public archive

符合OneBot标准的QQ编译代码机器人

License

Notifications You must be signed in to change notification settings

ksgfk/PenguinCompiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PenguinCompiler

这是一个使用OneBot标准QQ聊天机器人,可以以聊天的形式编译运行各种语言的代码并回复结果,使用.Net 5和C# 9

Features

  • 没有第三方库依赖(这是能算特性吗
  • 内置可以编译运行的语言
    • C++ MSVC
    • Python
  • 只实现了HTTP与OneBot通信
  • 只实现了OneBot的消息事件
  • 可用的OneBot API只有send_private_msgsend_group_msg
  • 特化了C++ MSVC的参数,当参数包含oi的时候使用内置模板简化代码
  • 大部分API都是异步的(练习async/await留下的233

Use

  • 启动参数都硬编码在PenguinCompiler/Program.cs里面
    • OneBotHttpApi.SetServerUri设置OneBot的HTTP uri
    • PenguinCompilerService类的构造方法依次填入:源码缓存路径、程序最长运行时间(单位ms)、任务队列最大长度、最多并行程序执行数量
    • OneBotHttpEventDispatcher类的构造方法依次填入:接收OneBot的HTTP消息的uri、PenguinCompilerService实例
    • 可以继承CompilerExecutorSourceCodeSaver并将实例存入PenguinCompilerService来扩展可用语言
  • 由于MSVC的特性,使用cl.exe前要用VS的工具设置编译环境,打开开始菜单-Visual Studio-Tools Command Prompt差不多这种字样的批处理,等它配好了之后,直接在批处理里启动程序就能找到cl.exe
  • 没写GCC编译C++的实现,不会真的有人在Windows下用MingW吧(是我自己啊,那没事了

Structure

  • PenguinCompiler 源码根目录
    • Compile 编译相关目录
      • Compiler.cs 编译器基类
      • Executor.cs 执行源码文件基类
      • SourceCodeSaver.cs 储存源码时行为的基类
    • OneBot OneBot相关目录
      • Event OneBot事件目录
      • Message OneBot消息(指的是这个消息)
      • Net OneBot网络连接目录
    • OneBotHttpEventDispatcher.cs 分发来自OneBot的事件
    • PenguinCompilerService.cs 编译服务
    • Program.cs 程序入口
    • Service.cs 服务的基类
  • 需要注意的是,并没有像一般做法一样,将来自OneBot的事件从Json转化成实例类,而是直接解析成System.Text.Json.JsonDocument并用KSGFK.ChatMessageEventArgs简单包装了一下(目前只接受聊天事件,所以基类就这个233),包装类里也没多少方法,所以要获取某些 类里没有实现读取 的数据,要手动根据Json结构去获取(常用的Json PropertyName名字都放在KSGFK.OneBotMessageKSGFK.OneBotEvent里面了)
  • OneBot的API调用都放在KSGFK.OneBotHttpApi里面

Problem

  • 没有鉴权,接收任何来自可能是OneBot的HTTP请求
  • 没有经过检查就执行代码,很容易被恶意代码攻击
  • OneBot的事件支持快速操作,实际上是一个HTTP response,但是代码中直接把那些包装事件的实例(就是KSGFK.ChatMessageEventArgs)传递给其他服务,response可能会失效,导致调用KSGFK.ChatMessageEventArgs.Reply会抛异常
  • 一大堆hard code(233
  • 代码挺乱的,没整理过(又不是不能用

License

MIT

About

符合OneBot标准的QQ编译代码机器人

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages