mirror of
https://github.com/fumiama/NanoBot.git
synced 2026-06-09 04:30:24 +08:00
feat: more zb- like apis
This commit is contained in:
34
bot.go
34
bot.go
@@ -394,3 +394,37 @@ func (bot *Bot) Listen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBot 获取指定的bot (Ctx)实例
|
||||||
|
func GetBot(id string) *Ctx {
|
||||||
|
caller, ok := clients.Load(id)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &Ctx{caller: caller}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RangeBot 遍历所有bot (Ctx)实例
|
||||||
|
//
|
||||||
|
// 单次操作返回 true 则继续遍历,否则退出
|
||||||
|
func RangeBot(iter func(id string, ctx *Ctx) bool) {
|
||||||
|
clients.Range(func(key string, value *Bot) bool {
|
||||||
|
return iter(key, &Ctx{caller: value})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFirstSuperUser 在 ids 中获得 SuperUsers 列表的首个 qq
|
||||||
|
//
|
||||||
|
// 找不到返回 nil
|
||||||
|
func (bot *Bot) GetFirstSuperUser(ids ...string) string {
|
||||||
|
m := make(map[string]struct{}, len(ids)*4)
|
||||||
|
for _, qq := range ids {
|
||||||
|
m[qq] = struct{}{}
|
||||||
|
}
|
||||||
|
for _, qq := range bot.SuperUsers {
|
||||||
|
if _, ok := m[qq]; ok {
|
||||||
|
return qq
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|||||||
34
context.go
34
context.go
@@ -123,6 +123,40 @@ func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (*Mes
|
|||||||
return ctx.Send(replytosender, post)
|
return ctx.Send(replytosender, post)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Echo 向自身分发虚拟事件
|
||||||
|
func (ctx *Ctx) Echo(payload *WebsocketPayload) {
|
||||||
|
ctx.caller.processEvent(payload)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FutureEvent ...
|
||||||
|
func (ctx *Ctx) FutureEvent(Type string, rule ...Rule) *FutureEvent {
|
||||||
|
return ctx.ma.FutureEvent(Type, rule...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 从 promt 获得回复
|
||||||
|
func (ctx *Ctx) Get(prompt string) string {
|
||||||
|
if prompt != "" {
|
||||||
|
_, _ = ctx.SendPlainMessage(false, prompt)
|
||||||
|
}
|
||||||
|
return (<-ctx.FutureEvent("Message", ctx.CheckSession()).Next()).Event.Value.(*Message).Content
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExtractPlainText 提取消息中的纯文本
|
||||||
|
func (ctx *Ctx) ExtractPlainText() string {
|
||||||
|
if ctx == nil || ctx.Value == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if msg, ok := ctx.Value.(*Message); ok {
|
||||||
|
return msg.Content
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageString 字符串消息便于Regex
|
||||||
|
func (ctx *Ctx) MessageString() string {
|
||||||
|
return ctx.ExtractPlainText()
|
||||||
|
}
|
||||||
|
|
||||||
// Block 匹配成功后阻止后续触发
|
// Block 匹配成功后阻止后续触发
|
||||||
func (ctx *Ctx) Block() {
|
func (ctx *Ctx) Block() {
|
||||||
ctx.ma.SetBlock(true)
|
ctx.ma.SetBlock(true)
|
||||||
|
|||||||
Reference in New Issue
Block a user