mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-18 20:50:12 +08:00
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
325 lines
16 KiB
Go
325 lines
16 KiB
Go
// Package main ZeroBot-Plugin main file
|
||
package main
|
||
|
||
import (
|
||
"encoding/json"
|
||
"flag"
|
||
"fmt"
|
||
"math/rand"
|
||
"os"
|
||
"runtime"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/console" // 更改控制台属性
|
||
|
||
"github.com/FloatTech/ZeroBot-Plugin/kanban" // 打印 banner
|
||
|
||
// ---------以下插件均可通过前面加 // 注释,注释后停用并不加载插件--------- //
|
||
// ----------------------插件优先级按顺序从高到低---------------------- //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// ----------------------------高优先级区---------------------------- //
|
||
// vvvvvvvvvvvvvvvvvvvvvvvvvvvv高优先级区vvvvvvvvvvvvvvvvvvvvvvvvvvvv //
|
||
// vvvvvvvvvvvvvv高优先级区vvvvvvvvvvvvvv //
|
||
// vvvvvvv高优先级区vvvvvvv //
|
||
// vvvvvvvvvvvvvv //
|
||
// vvvv //
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/antiabuse" // 违禁词
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat" // 基础词库
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/chatcount" // 聊天时长统计
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/sleepmanage" // 统计睡眠时间
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/atri" // ATRI词库
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/manager" // 群管
|
||
|
||
_ "github.com/FloatTech/zbputils/job" // 定时指令触发器
|
||
|
||
// ^^^^ //
|
||
// ^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^高优先级区^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^高优先级区^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^高优先级区^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
|
||
// ----------------------------高优先级区---------------------------- //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// ----------------------------中优先级区---------------------------- //
|
||
// vvvvvvvvvvvvvvvvvvvvvvvvvvvv中优先级区vvvvvvvvvvvvvvvvvvvvvvvvvvvv //
|
||
// vvvvvvvvvvvvvv中优先级区vvvvvvvvvvvvvv //
|
||
// vvvvvvv中优先级区vvvvvvv //
|
||
// vvvvvvvvvvvvvv //
|
||
// vvvv //
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/ahsai" // ahsai tts
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/aifalse" // 服务器监控
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/aiwife" // 随机老婆
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/alipayvoice" // 支付宝到账语音
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/autowithdraw" // 触发者撤回时也自动撤回
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/baiduaudit" // 百度内容审核
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/base16384" // base16384加解密
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/base64gua" // base64卦加解密
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/baseamasiro" // base天城文加解密
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili" // b站相关
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/bookreview" // 哀伤雪刃吧推书记录
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/chess" // 国际象棋
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/choose" // 选择困难症帮手
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/chouxianghua" // 说抽象话
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/chrev" // 英文字符翻转
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/coser" // 三次元小姐姐
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/cpstory" // cp短打
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/dailynews" // 今日早报
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/danbooru" // DeepDanbooru二次元图标签识别
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/diana" // 嘉心糖发病
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/dish" // 程序员做饭指南
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/drawlots" // 多功能抽签
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/driftbottle" // 漂流瓶
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix" // 合成emoji
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/event" // 好友申请群聊邀请事件处理
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/font" // 渲染任意文字到图片
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune" // 运势
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/funny" // 笑话
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/genshin" // 原神抽卡
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/gif" // 制图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/github" // 搜索GitHub仓库
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/guessmusic" // 猜歌
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/hitokoto" // 一言
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/hs" // 炉石
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/hyaku" // 百人一首
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/inject" // 注入指令
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/jandan" // 煎蛋网无聊图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/jptingroom" // 日语听力学习材料
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/kfccrazythursday" // 疯狂星期四
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolicon" // lolicon 随机图片
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolimi" // 桑帛云 API
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/magicprompt" // magicprompt吟唱提示
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/mcfish" // 钓鱼模拟器
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/midicreate" // 简易midi音乐制作
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/moegoe" // 日韩 VITS 模型拟声
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyu" // 摸鱼
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyucalendar" // 摸鱼人日历
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/music" // 点歌
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nativesetu" // 本地涩图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nbnhhsh" // 拼音首字母缩写释义工具
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nihongo" // 日语语法学习
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/niuniu" // 牛牛大作战
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/novel" // 铅笔小说网搜索
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nsfw" // nsfw图片识别
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nwife" // 本地老婆
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/omikuji" // 浅草寺求签
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/poker" // 抽扑克
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife" // 一群一天一夫一妻制群老婆
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/qzone" // qq空间表白墙
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/realcugan" // realcugan清晰术
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/reborn" // 投胎
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/robbery" // 打劫群友的ATRI币
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/runcode" // 在线运行代码
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/saucenao" // 以图搜图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/score" // 分数
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/setutime" // 来份涩图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao" // 沙雕app
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/shindan" // 测定
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/steam" // steam相关
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot" // 抽塔罗牌
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou" // 舔狗日记
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/tracemoe" // 搜番
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation" // 翻译
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/vitsnyaru" // vits猫雷
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wallet" // 钱包
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wantquotes" // 据意查句
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/warframeapi" // warframeAPI插件
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinvilg" // 百度文心AI画图
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wife" // 抽老婆
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordcount" // 聊天热词
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordle" // 猜单词
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo" // 游戏王相关插件
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/ymgal" // 月幕galgame
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/yujn" // 遇见API
|
||
|
||
// _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf" // 鬼东西
|
||
|
||
// ^^^^ //
|
||
// ^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^中优先级区^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^中优先级区^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^中优先级区^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
|
||
// ----------------------------中优先级区---------------------------- //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// ----------------------------低优先级区---------------------------- //
|
||
// vvvvvvvvvvvvvvvvvvvvvvvvvvvv低优先级区vvvvvvvvvvvvvvvvvvvvvvvvvvvv //
|
||
// vvvvvvvvvvvvvv低优先级区vvvvvvvvvvvvvv //
|
||
// vvvvvvv低优先级区vvvvvvv //
|
||
// vvvvvvvvvvvvvv //
|
||
// vvvv //
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/curse" // 骂人
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/aireply" // 人工智能回复
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/thesaurus" // 词典匹配回复
|
||
|
||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/breakrepeat" // 打断复读
|
||
|
||
// ^^^^ //
|
||
// ^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^低优先级区^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^低优先级区^^^^^^^^^^^^^^ //
|
||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^低优先级区^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
|
||
// ----------------------------低优先级区---------------------------- //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// //
|
||
// -----------------------以下为内置依赖,勿动------------------------ //
|
||
"github.com/FloatTech/floatbox/file"
|
||
"github.com/FloatTech/floatbox/process"
|
||
"github.com/sirupsen/logrus"
|
||
zero "github.com/wdvxdr1123/ZeroBot"
|
||
"github.com/wdvxdr1123/ZeroBot/driver"
|
||
"github.com/wdvxdr1123/ZeroBot/message"
|
||
|
||
// webctrl "github.com/FloatTech/zbputils/control/web"
|
||
|
||
"github.com/FloatTech/ZeroBot-Plugin/kanban/banner"
|
||
// -----------------------以上为内置依赖,勿动------------------------ //
|
||
)
|
||
|
||
type zbpcfg struct {
|
||
Z zero.Config `json:"zero"`
|
||
W []*driver.WSClient `json:"ws"`
|
||
S []*driver.WSServer `json:"wss"`
|
||
}
|
||
|
||
var config zbpcfg
|
||
|
||
func init() {
|
||
sus := make([]int64, 0, 16)
|
||
// 解析命令行参数
|
||
d := flag.Bool("d", false, "Enable debug level log and higher.")
|
||
w := flag.Bool("w", false, "Enable warning level log and higher.")
|
||
h := flag.Bool("h", false, "Display this help.")
|
||
// g := flag.String("g", "127.0.0.1:3000", "Set webui url.")
|
||
// 直接写死 AccessToken 时,请更改下面第二个参数
|
||
token := flag.String("t", "", "Set AccessToken of WSClient.")
|
||
// 直接写死 URL 时,请更改下面第二个参数
|
||
url := flag.String("u", "ws://127.0.0.1:6700", "Set Url of WSClient.")
|
||
// 默认昵称
|
||
adana := flag.String("n", "椛椛", "Set default nickname.")
|
||
prefix := flag.String("p", "/", "Set command prefix.")
|
||
runcfg := flag.String("c", "", "Run from config file.")
|
||
save := flag.String("s", "", "Save default config to file and exit.")
|
||
late := flag.Uint("l", 233, "Response latency (ms).")
|
||
rsz := flag.Uint("r", 4096, "Receiving buffer ring size.")
|
||
maxpt := flag.Uint("x", 4, "Max process time (min).")
|
||
markmsg := flag.Bool("m", false, "Don't mark message as read automatically")
|
||
flag.BoolVar(&file.SkipOriginal, "mirror", false, "Use mirrored lazy data at first")
|
||
|
||
flag.Parse()
|
||
|
||
if *h {
|
||
fmt.Println("Usage:")
|
||
flag.PrintDefaults()
|
||
os.Exit(0)
|
||
}
|
||
if *d && !*w {
|
||
logrus.SetLevel(logrus.DebugLevel)
|
||
}
|
||
if *w {
|
||
logrus.SetLevel(logrus.WarnLevel)
|
||
}
|
||
|
||
for _, s := range flag.Args() {
|
||
i, err := strconv.ParseInt(s, 10, 64)
|
||
if err != nil {
|
||
continue
|
||
}
|
||
sus = append(sus, i)
|
||
}
|
||
|
||
// 通过代码写死的方式添加主人账号
|
||
// sus = append(sus, 12345678)
|
||
// sus = append(sus, 87654321)
|
||
|
||
// 启用 webui
|
||
// go webctrl.RunGui(*g)
|
||
|
||
if *runcfg != "" {
|
||
f, err := os.Open(*runcfg)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
config.W = make([]*driver.WSClient, 0, 2)
|
||
err = json.NewDecoder(f).Decode(&config)
|
||
f.Close()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
config.Z.Driver = make([]zero.Driver, len(config.W)+len(config.S))
|
||
for i, w := range config.W {
|
||
config.Z.Driver[i] = w
|
||
}
|
||
for i, s := range config.S {
|
||
config.Z.Driver[i+len(config.W)] = s
|
||
}
|
||
logrus.Infoln("[main] 从", *runcfg, "读取配置文件")
|
||
return
|
||
}
|
||
config.W = []*driver.WSClient{driver.NewWebSocketClient(*url, *token)}
|
||
config.Z = zero.Config{
|
||
NickName: append([]string{*adana}, "ATRI", "atri", "亚托莉", "アトリ"),
|
||
CommandPrefix: *prefix,
|
||
SuperUsers: sus,
|
||
RingLen: *rsz,
|
||
Latency: time.Duration(*late) * time.Millisecond,
|
||
MaxProcessTime: time.Duration(*maxpt) * time.Minute,
|
||
MarkMessage: !*markmsg,
|
||
Driver: []zero.Driver{config.W[0]},
|
||
}
|
||
|
||
if *save != "" {
|
||
f, err := os.Create(*save)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
err = json.NewEncoder(f).Encode(&config)
|
||
f.Close()
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
logrus.Infoln("[main] 配置文件已保存到", *save)
|
||
os.Exit(0)
|
||
}
|
||
}
|
||
|
||
func main() {
|
||
if !strings.Contains(runtime.Version(), "go1.2") { // go1.20之前版本需要全局 seed,其他插件无需再 seed
|
||
rand.Seed(time.Now().UnixNano()) //nolint: staticcheck
|
||
}
|
||
// 帮助
|
||
zero.OnFullMatchGroup([]string{"help", "/help", ".help", "菜单"}, zero.OnlyToMe).SetBlock(true).
|
||
Handle(func(ctx *zero.Ctx) {
|
||
ctx.SendChain(message.Text(banner.Banner, "\n管理发送\"/服务列表\"查看 bot 功能\n发送\"/用法name\"查看功能用法"))
|
||
})
|
||
zero.OnFullMatch("查看zbp公告", zero.OnlyToMe, zero.AdminPermission).SetBlock(true).
|
||
Handle(func(ctx *zero.Ctx) {
|
||
ctx.SendChain(message.Text(strings.ReplaceAll(kanban.Kanban(), "\t", "")))
|
||
})
|
||
zero.RunAndBlock(&config.Z, process.GlobalInitMutex.Unlock)
|
||
}
|