job增加执行指令

This commit is contained in:
源文雨 2022-03-08 20:39:02 +08:00
parent 55944dddb3
commit bccf789714
2 changed files with 20 additions and 4 deletions

View File

@ -72,6 +72,7 @@ zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地
- [x] 查看所有触发指令 - [x] 查看所有触发指令
- [x] 查看在"cron"触发的指令 - [x] 查看在"cron"触发的指令
- [x] 注入指令结果:任意指令,可以使用形如`?::参数1提示语::1!`,`?::参数2提示语::2!`的未定参数,在注入时一一匹配 - [x] 注入指令结果:任意指令,可以使用形如`?::参数1提示语::1!`,`?::参数2提示语::2!`的未定参数,在注入时一一匹配
- [x] 执行指令:任意指令,可以使用形如`?::参数1提示语::1!`,`?::参数2提示语::2!`的未定参数,在注入时一一匹配
- 一些示例 - 一些示例
> 每日9:30推送摸鱼人日历 > 每日9:30推送摸鱼人日历
``` ```
@ -93,6 +94,14 @@ else: print('今天没有coser哦~')
if '?::想看coser吗::1!' == '想': print('coser') if '?::想看coser吗::1!' == '想': print('coser')
else: print('好吧') else: print('好吧')
``` ```
> 自行编写简易的选择困难症助手小插件
```python
执行指令:>runcoderaw py
from random import random
if random() > 0.5: print('您最终会选?::请输入您的选择1::1!')
else: print('您最终会选?::请输入您的选择2::2!')
```
![example](https://user-images.githubusercontent.com/41315874/157239729-bd8b5ce6-da0a-46c5-a9d0-5db60f356bca.png)
- **聊天** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"` - **聊天** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"`
- [x] [BOT名字] - [x] [BOT名字]
- [x] [戳一戳BOT] - [x] [戳一戳BOT]

View File

@ -32,7 +32,7 @@ var (
func init() { func init() {
en := control.Register("job", order.AcquirePrio(), &control.Options{ en := control.Register("job", order.AcquirePrio(), &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "定时指令触发器\n- 记录在\"cron\"触发的指令\n- 取消在\"cron\"触发的指令\n- 查看所有触发指令\n- 查看在\"cron\"触发的指令\n- 注入指令结果:任意指令", Help: "定时指令触发器\n- 记录在\"cron\"触发的指令\n- 取消在\"cron\"触发的指令\n- 查看所有触发指令\n- 查看在\"cron\"触发的指令\n- 注入指令结果:任意指令\n- 执行指令:任意指令",
PrivateDataFolder: "job", PrivateDataFolder: "job",
}) })
db.DBPath = en.DataFolder() + "job.db" db.DBPath = en.DataFolder() + "job.db"
@ -146,6 +146,11 @@ func init() {
} }
ctx.SendChain(message.Text(lst)) ctx.SendChain(message.Text(lst))
}) })
en.OnPrefix("执行指令:", ctxext.UserOrGrpAdmin, islonotnil, func(ctx *zero.Ctx) bool {
return ctx.State["args"].(string) != ""
}, parseArgs).SetBlock(true).Handle(func(ctx *zero.Ctx) {
inject(ctx.Event.SelfID, binary.StringToBytes(strings.ReplaceAll(ctx.Event.RawEvent.Raw, "执行指令:", "")))()
})
en.OnPrefix("注入指令结果:", ctxext.UserOrGrpAdmin, islonotnil, func(ctx *zero.Ctx) bool { en.OnPrefix("注入指令结果:", ctxext.UserOrGrpAdmin, islonotnil, func(ctx *zero.Ctx) bool {
return ctx.State["args"].(string) != "" return ctx.State["args"].(string) != ""
}, parseArgs).SetBlock(true).Handle(func(ctx *zero.Ctx) { }, parseArgs).SetBlock(true).Handle(func(ctx *zero.Ctx) {
@ -163,6 +168,7 @@ func init() {
ctx.Event.RawMessage = msg.Elements.String() ctx.Event.RawMessage = msg.Elements.String()
time.Sleep(time.Second * 5) // 防止风控 time.Sleep(time.Second * 5) // 防止风控
ctx.Event.Time = time.Now().Unix() ctx.Event.Time = time.Now().Unix()
ctx.DeleteMessage(id)
vev, cl := binary.OpenWriterF(func(w *binary.Writer) { vev, cl := binary.OpenWriterF(func(w *binary.Writer) {
err = json.NewEncoder(w).Encode(ctx.Event) err = json.NewEncoder(w).Encode(ctx.Event)
}) })
@ -175,7 +181,7 @@ func init() {
inject(ctx.Event.SelfID, vev)() inject(ctx.Event.SelfID, vev)()
cl() cl()
} }
})).Echo([]byte(strings.ReplaceAll(ctx.Event.RawEvent.Raw, "注入指令结果:", ""))) })).Echo(binary.StringToBytes(strings.ReplaceAll(ctx.Event.RawEvent.Raw, "注入指令结果:", "")))
}) })
} }
@ -262,11 +268,12 @@ func parseArgs(ctx *zero.Ctx) bool {
case <-time.After(time.Second * 120): case <-time.After(time.Second * 120):
ctx.SendChain(message.Text("参数读取超时")) ctx.SendChain(message.Text("参数读取超时"))
return false return false
case e := <-zero.NewFutureEvent("message", 0, false, zero.CheckUser(ctx.Event.UserID)).Next(): case e := <-zero.NewFutureEvent("message", 0, true, zero.CheckUser(ctx.Event.UserID)).Next():
args[arg] = e.Message.String() args[arg] = e.Message.String()
arr = args[arg]
process.SleepAbout1sTo2s()
ctx.SendChain(message.Reply(e.MessageID), message.Text("已记录")) ctx.SendChain(message.Reply(e.MessageID), message.Text("已记录"))
process.SleepAbout1sTo2s() process.SleepAbout1sTo2s()
arr = args[arg]
} }
} }
ctx.Event.RawEvent.Raw = ctx.Event.RawEvent.Raw[:start] + arr + ctx.Event.RawEvent.Raw[numend+1:] ctx.Event.RawEvent.Raw = ctx.Event.RawEvent.Raw[:start] + arr + ctx.Event.RawEvent.Raw[numend+1:]