From c149f28fb830b23fb6d8a629bdb4437287767c66 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sun, 14 Nov 2021 04:33:02 +0800 Subject: [PATCH] feat: GuildChannelCreatedEvent --- client/entities.go | 6 ++++++ client/events.go | 16 ++++++++++++++++ client/guild_eventflow.go | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/client/entities.go b/client/entities.go index effd05ef..3a6f64d6 100644 --- a/client/entities.go +++ b/client/entities.go @@ -238,6 +238,12 @@ type ( NewChannelInfo *ChannelInfo } + GuildChannelCreatedEvent struct { + OperatorId uint64 + GuildId uint64 + ChannelInfo *ChannelInfo + } + OcrResponse struct { Texts []*TextDetection `json:"texts"` Language string `json:"language"` diff --git a/client/events.go b/client/events.go index 72ab18d6..9b9dc80d 100644 --- a/client/events.go +++ b/client/events.go @@ -17,6 +17,7 @@ type eventHandlers struct { guildChannelMessageHandlers []func(*QQClient, *message.GuildChannelMessage) guildMessageReactionsUpdatedHandlers []func(*QQClient, *GuildMessageReactionsUpdatedEvent) guildChannelUpdatedHandlers []func(*QQClient, *GuildChannelUpdatedEvent) + guildChannelCreatedHandlers []func(*QQClient, *GuildChannelCreatedEvent) groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent) groupRecalledHandlers []func(*QQClient, *GroupMessageRecalledEvent) friendRecalledHandlers []func(*QQClient, *FriendMessageRecalledEvent) @@ -83,6 +84,10 @@ func (s *GuildService) OnGuildChannelUpdated(f func(*QQClient, *GuildChannelUpda s.c.eventHandlers.guildChannelUpdatedHandlers = append(s.c.eventHandlers.guildChannelUpdatedHandlers, f) } +func (s *GuildService) OnGuildChannelCreated(f func(*QQClient, *GuildChannelCreatedEvent)) { + s.c.eventHandlers.guildChannelCreatedHandlers = append(s.c.eventHandlers.guildChannelCreatedHandlers, f) +} + func (c *QQClient) OnGroupMuted(f func(*QQClient, *GroupMuteEvent)) { c.eventHandlers.groupMuteEventHandlers = append(c.eventHandlers.groupMuteEventHandlers, f) } @@ -278,6 +283,17 @@ func (c *QQClient) dispatchGuildChannelUpdatedEvent(e *GuildChannelUpdatedEvent) } } +func (c *QQClient) dispatchGuildChannelCreatedEvent(e *GuildChannelCreatedEvent) { + if e == nil { + return + } + for _, f := range c.eventHandlers.guildChannelCreatedHandlers { + cover(func() { + f(c, e) + }) + } +} + func (c *QQClient) dispatchGroupMuteEvent(e *GroupMuteEvent) { if e == nil { return diff --git a/client/guild_eventflow.go b/client/guild_eventflow.go index a3d7853c..0ccbc3fd 100644 --- a/client/guild_eventflow.go +++ b/client/guild_eventflow.go @@ -78,6 +78,28 @@ func decodeGuildEventFlowPacket(c *QQClient, _ *incomingPacketInfo, payload []by func (c *QQClient) processGuildEventBody(m *channel.ChannelMsgContent, eventBody *channel.EventBody) { switch { + case eventBody.CreateChan != nil: + guild := c.GuildService.FindGuild(m.Head.RoutingHead.GetGuildId()) + if guild == nil { + c.Warning("process create channel event error: guild not found.") + return + } + for _, chanId := range eventBody.CreateChan.CreateId { + if guild.FindChannel(chanId.GetChanId()) != nil { + continue + } + channelInfo, err := c.GuildService.FetchChannelInfo(guild.GuildId, chanId.GetChanId()) + if err != nil { + c.Warning("process create channel event error: fetch channel info error: %v", err) + continue + } + guild.Channels = append(guild.Channels, channelInfo) + c.dispatchGuildChannelCreatedEvent(&GuildChannelCreatedEvent{ + OperatorId: m.Head.RoutingHead.GetFromTinyid(), + GuildId: m.Head.RoutingHead.GetGuildId(), + ChannelInfo: channelInfo, + }) + } case eventBody.ChangeChanInfo != nil: updateChanLock.Lock() defer updateChanLock.Unlock()