Skip to content
This repository has been archived by the owner on Oct 19, 2021. It is now read-only.

dezhishen/MiraiGo-Bot

Repository files navigation

MiraiGo-Bot

增强MiraiGo-Template,开箱可用,降低使用成本,降低开发成本

计划

1.0.完成基础能力

已完成

2.0.拓展bot平台

  • 剥离bot依赖,将bot内核作为接口注册引入
    • 制定标准接口
    • 使用MiraiGo-Template作为默认实现
    • 尝试增加电报

功能

  • 实现MiraiGo-Template
  • 提供plugins接口
    • plugin基类
      • PluginInfo()插件基础信息
      • PluginInit()插件初始化
    • OnMessagePlugins消息处理插件
      • 接口设计
        • SortNum()触发的顺序
        • IsFireEvent(msg *MessageRequest) bool是否触发
        • OnMessageEvent(msg *MessageRequest) (*MessageResponse, error)方法
        • IsFireNextEvent(msg *MessageRequest) bool是否继续触发后续的插件
      • 注册功能
    • SchedulerPlugins定时器插件
      • 接口设计
        • Cron() 返回cron表达式
        • Run(bot *bot.Bot) error 执行回调
      • 注册功能
    • GoroutinePlugins协程插件
      • Run(bot *bot.Bot)error 协程启动的回调方法
      • 注册功能
  • 提供工具类
    • 键值对持久化存储 storage
      • 数据隔离
    • 键值对缓存 cache
    • 命令行Parse工具 command
    • 全局键值对
  • MiraiGo-Template插入中间层,调用实现的插件
    • 消息监听插件支持
      • 中间层将按照插件的顺序,依次触发插件的OnMessageEvent方法
      • 中间层的可配置
    • 定时任务插件支持
      • 启动和运行定时任务
  • 健康检查 运行目录下,文件/data/health是否存在

部分功能使用说明

命令行解析

使用https://github.com/jessevdk/go-flags实现

查看示例:command_test.go

  • 首先定义一个struct
  • 补充 short,long,default,description等关键字信息
    type opts struct {
      Name string `short:"n" long:"name" description:"姓名"`
    }
    
  • 调用
    func Test_Parse(t *testing.T) {
      var o = opts{}
      args, _ := Parse(&o, []string{"doSomething", "-n", "test"})
      print(len(args))
      print(o.Name)
    }
    

运行

编写启动类,引入需要加载的插件,调用启动方法

package main

import (
// 引入插件
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/calendar"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/haimage"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/hitokoto"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/jrrp"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/lpl"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/mc"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/pixiv"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/random"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/thecat"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/thedog"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/tips"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/caihongpi"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/dujitang"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/weather"
	_ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/sovietjokes"
 //启动入口
	"github.com/dezhiShen/MiraiGo-Bot/pkg/server"
)

func main() {
//启动
	server.Start()
}

插件仓库

https://github.com/dezhiShen/MiraiGo-Bot-Plugins

二次开发

  1. 引入本项目,实现一个或者多个plugin

  2. init()方法中调用注册方法plugins.RegisterXXXPlugin(YourPlugin{}),将当前插件注册到系统中

  3. 启动

    package main
    
    import (
      _ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/hitokoto"
      _ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/random"
      _ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/tips"
      _ "github.com/dezhiShen/MiraiGo-Bot-Plugins/pkg/plugins/weather"
      "github.com/dezhiShen/MiraiGo-Bot/pkg/server"
    )
    
    func main() {
      server.Start()
    }
    
    
    

依赖项目