diff --git a/codegen/engine/engine.yml b/codegen/engine/engine.yml index c121abc..f308d8b 100644 --- a/codegen/engine/engine.yml +++ b/codegen/engine/engine.yml @@ -1,5 +1,6 @@ emptyon: - Message + - MessageDelete - GuildCreate - GuildUpdate @@ -12,14 +13,14 @@ emptyon: - GuildMemberUpdate - GuildMemberRemove - - MessageCreate - - MessageDelete + #- MessageCreate + #- MessageDelete - MessageReactionAdd - MessageReactionRemove - - DirectMessageCreate - - DirectMessageDelete + #- DirectMessageCreate + #- DirectMessageDelete - OpenForumThreadCreate - OpenForumThreadUpdate @@ -49,8 +50,8 @@ emptyon: - AudioOnMic - AudioOffMic - - AtMessageCreate - - PublicMessageDelete + #- AtMessageCreate + #- PublicMessageDelete ruleon: Message: diff --git a/engine_generated.go b/engine_generated.go index c971225..2a5dc15 100644 --- a/engine_generated.go +++ b/engine_generated.go @@ -8,6 +8,12 @@ func (e *Engine) OnMessage(rules ...Rule) *Matcher { return e.On("Message", rule // OnMessage ... func OnMessage(rules ...Rule) *Matcher { return On("Message", rules...) } +// OnMessageDelete ... +func (e *Engine) OnMessageDelete(rules ...Rule) *Matcher { return e.On("MessageDelete", rules...) } + +// OnMessageDelete ... +func OnMessageDelete(rules ...Rule) *Matcher { return On("MessageDelete", rules...) } + // OnGuildCreate ... func (e *Engine) OnGuildCreate(rules ...Rule) *Matcher { return e.On("GuildCreate", rules...) } @@ -62,18 +68,6 @@ func (e *Engine) OnGuildMemberRemove(rules ...Rule) *Matcher { return e.On("Guil // OnGuildMemberRemove ... func OnGuildMemberRemove(rules ...Rule) *Matcher { return On("GuildMemberRemove", rules...) } -// OnMessageCreate ... -func (e *Engine) OnMessageCreate(rules ...Rule) *Matcher { return e.On("MessageCreate", rules...) } - -// OnMessageCreate ... -func OnMessageCreate(rules ...Rule) *Matcher { return On("MessageCreate", rules...) } - -// OnMessageDelete ... -func (e *Engine) OnMessageDelete(rules ...Rule) *Matcher { return e.On("MessageDelete", rules...) } - -// OnMessageDelete ... -func OnMessageDelete(rules ...Rule) *Matcher { return On("MessageDelete", rules...) } - // OnMessageReactionAdd ... func (e *Engine) OnMessageReactionAdd(rules ...Rule) *Matcher { return e.On("MessageReactionAdd", rules...) } @@ -86,18 +80,6 @@ func (e *Engine) OnMessageReactionRemove(rules ...Rule) *Matcher { return e.On(" // OnMessageReactionRemove ... func OnMessageReactionRemove(rules ...Rule) *Matcher { return On("MessageReactionRemove", rules...) } -// OnDirectMessageCreate ... -func (e *Engine) OnDirectMessageCreate(rules ...Rule) *Matcher { return e.On("DirectMessageCreate", rules...) } - -// OnDirectMessageCreate ... -func OnDirectMessageCreate(rules ...Rule) *Matcher { return On("DirectMessageCreate", rules...) } - -// OnDirectMessageDelete ... -func (e *Engine) OnDirectMessageDelete(rules ...Rule) *Matcher { return e.On("DirectMessageDelete", rules...) } - -// OnDirectMessageDelete ... -func OnDirectMessageDelete(rules ...Rule) *Matcher { return On("DirectMessageDelete", rules...) } - // OnOpenForumThreadCreate ... func (e *Engine) OnOpenForumThreadCreate(rules ...Rule) *Matcher { return e.On("OpenForumThreadCreate", rules...) } @@ -236,18 +218,6 @@ func (e *Engine) OnAudioOffMic(rules ...Rule) *Matcher { return e.On("AudioOffMi // OnAudioOffMic ... func OnAudioOffMic(rules ...Rule) *Matcher { return On("AudioOffMic", rules...) } -// OnAtMessageCreate ... -func (e *Engine) OnAtMessageCreate(rules ...Rule) *Matcher { return e.On("AtMessageCreate", rules...) } - -// OnAtMessageCreate ... -func OnAtMessageCreate(rules ...Rule) *Matcher { return On("AtMessageCreate", rules...) } - -// OnPublicMessageDelete ... -func (e *Engine) OnPublicMessageDelete(rules ...Rule) *Matcher { return e.On("PublicMessageDelete", rules...) } - -// OnPublicMessageDelete ... -func OnPublicMessageDelete(rules ...Rule) *Matcher { return On("PublicMessageDelete", rules...) } - // OnMessagePrefix ... func OnMessagePrefix(prefix string, rules ...Rule) *Matcher { return defaultEngine.OnMessagePrefix(prefix, rules...) diff --git a/event.go b/event.go index f686c90..c46fa6e 100644 --- a/event.go +++ b/event.go @@ -52,6 +52,11 @@ func (bot *Bot) processEvent(payload *WebsocketPayload) { fallthrough case "MessageCreate", "AtMessageCreate": tp = "Message" + case "DirectMessageDelete": + ctx.IsToMe = true + fallthrough + case "MessageDelete", "PublicMessageDelete": + tp = "MessageDelete" } matcherLock.RLock() n := len(matcherMap[tp]) @@ -78,6 +83,19 @@ func (bot *Bot) processEvent(payload *WebsocketPayload) { ctx.IsToMe = true } log.Infoln(getLogHeader(), "=>", ctx.Message) + case "MessageDelete": + mdl := (*MessageDelete)(x.UnsafePointer()) + opmember, err := ctx.GetGuildMemberOf(mdl.Message.GuildID, mdl.OpUser.ID) + if err != nil { + log.Warnln(getLogHeader(), "获取撤回消息者详情错误:", err) + return + } + ctx.Message = (*MessageDelete)(x.UnsafePointer()).Message + ctx.Message.Member = &Member{ + GuildID: mdl.Message.GuildID, + User: ctx.Message.Author, + } + ctx.Message.Author = opmember.User } go match(ctx, matchers) } diff --git a/rule.go b/rule.go index 5c5f95c..2d45b07 100644 --- a/rule.go +++ b/rule.go @@ -16,9 +16,12 @@ func newctrl(service string, o *ctrl.Options[*Ctx]) Rule { c := m.NewControl(service, o) return func(ctx *Ctx) bool { ctx.State["manager"] = c - gid, _ := strconv.ParseUint(ctx.Message.ChannelID, 10, 64) - uid, _ := strconv.ParseUint(ctx.Message.Author.ID, 10, 64) - return c.Handler(int64(gid), int64(uid)) + if ctx.Message != nil { + gid, _ := strconv.ParseUint(ctx.Message.ChannelID, 10, 64) + uid, _ := strconv.ParseUint(ctx.Message.Author.ID, 10, 64) + return c.Handler(int64(gid), int64(uid)) + } + return false } }