diff --git a/README.md b/README.md index ebce208..0a3798a 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ import ( "fmt" - "github.com/Goscord/goscord" - "github.com/Goscord/goscord/discord" + "github.com/Goscord/goscord/goscord" + "github.com/Goscord/goscord/goscord/discord" "github.com/Goscord/goscord/goscord/gateway" "github.com/Goscord/goscord/goscord/gateway/event" ) @@ -53,16 +53,15 @@ func main() { Intents: gateway.IntentGuildMessages, }) - client.On(event.EventReady, func() { - fmt.Println("Logged in as " + client.Me().Tag()) - }) - - client.On(event.EventMessageCreate, func(msg *discord.Message) { - if msg.Content == "ping" { - client.Channel.SendMessage(msg.ChannelId, "Pong ! 🏓") - } - }) + client.On(event.EventReady, func() { + fmt.Println("Logged in as " + client.Me().Tag()) + }) + client.On(event.EventMessageCreate, func(msg *discord.Message) { + if msg.Content == "ping" { + client.Channel.SendMessage(msg.ChannelId, "Pong ! 🏓") + } + }) client.Login() diff --git a/goscord/discord/channel.go b/goscord/discord/channel.go index c006ee5..839622d 100644 --- a/goscord/discord/channel.go +++ b/goscord/discord/channel.go @@ -1,7 +1,6 @@ package discord import ( - "github.com/Goscord/goscord/goscord/discord/embed" "github.com/bytedance/sonic" "time" ) @@ -173,6 +172,16 @@ type AllowedMentions struct { RepliedUsers bool `json:"replied_users"` } +type MessageReaction struct { + UserId string `json:"user_id"` + ChannelId string `json:"channel_id"` + MessageId string `json:"message_id"` + GuildId string `json:"guild_id"` + Member *GuildMember `json:"member"` + Emoji *Emoji `json:"emoji"` + MessageAuthorId string `json:"message_author_id"` +} + type Message struct { Id string `json:"id"` ChannelId string `json:"channel_id"` diff --git a/goscord/discord/interaction.go b/goscord/discord/interaction.go index 075f13f..2a2f380 100644 --- a/goscord/discord/interaction.go +++ b/goscord/discord/interaction.go @@ -2,7 +2,6 @@ package discord import ( "encoding/json" - "github.com/Goscord/goscord/goscord/discord/embed" "github.com/bytedance/sonic" ) diff --git a/goscord/gateway/event/message_reaction_add.go b/goscord/gateway/event/message_reaction_add.go new file mode 100644 index 0000000..204878f --- /dev/null +++ b/goscord/gateway/event/message_reaction_add.go @@ -0,0 +1,22 @@ +package event + +import ( + "github.com/Goscord/goscord/goscord/discord" + "github.com/Goscord/goscord/goscord/rest" + "github.com/bytedance/sonic" +) + +type MessageReactionAdd struct { + Data *discord.MessageReaction `json:"d"` +} + +func NewMessageReactionAdd(rest *rest.Client, data []byte) (*MessageReactionAdd, error) { + pk := new(MessageReactionAdd) + + err := sonic.Unmarshal(data, pk) + + if err != nil { + return nil, err + } + return pk, nil +} diff --git a/goscord/gateway/reaction_handler.go b/goscord/gateway/reaction_handler.go new file mode 100644 index 0000000..a09c63f --- /dev/null +++ b/goscord/gateway/reaction_handler.go @@ -0,0 +1,16 @@ +package gateway + +import ( + "github.com/Goscord/goscord/goscord/gateway/event" +) + +type MessageReactionHandler struct{} + +func (_ *MessageReactionHandler) Handle(s *Session, data []byte) { + ev, err := event.NewMessageReactionAdd(s.rest, data) + + if err != nil { + return + } + s.Publish(event.EventMessageReactionAdd, ev.Data) +} diff --git a/goscord/gateway/session.go b/goscord/gateway/session.go index aaca116..86c0822 100644 --- a/goscord/gateway/session.go +++ b/goscord/gateway/session.go @@ -143,6 +143,8 @@ func (s *Session) registerHandlers() { event.EventInteractionCreate: &InteractionCreateHandler{}, event.EventVoiceStateUpdate: &VoiceStateUpdateHandler{}, event.EventVoiceServerUpdate: &VoiceServerUpdateHandler{}, + + event.EventMessageReactionAdd: &MessageReactionHandler{}, } } diff --git a/goscord/rest/channel.go b/goscord/rest/channel.go index 48b78b4..02993ba 100644 --- a/goscord/rest/channel.go +++ b/goscord/rest/channel.go @@ -6,11 +6,10 @@ import ( "errors" "fmt" "github.com/Goscord/goscord/goscord/discord" - "github.com/Goscord/goscord/goscord/discord/embed" + "github.com/Goscord/goscord/goscord/discord/builder" "github.com/bytedance/sonic" "io" "mime/multipart" - "os" ) type ChannelHandler struct { @@ -38,6 +37,22 @@ func (ch *ChannelHandler) GetChannel(channelId string) (*discord.Channel, error) return channel, nil } +// GetMessages gets messages from a channel +func (ch *ChannelHandler) GetMessages(channelId string, limit int) ([]*discord.Message, error) { + data, err := ch.rest.Request(fmt.Sprintf(EndpointGetChannelMessages, channelId), "GET", nil, "application/json") + if err != nil { + return nil, err + } + + var messages []*discord.Message + err = sonic.Unmarshal(data, &messages) + if err != nil { + return nil, err + } + + return messages, nil +} + // GetMessage gets a message from a channel func (ch *ChannelHandler) GetMessage(channelId, messageId string) (*discord.Message, error) { res, err := ch.rest.Request(fmt.Sprintf(EndpointGetChannelMessage, channelId, messageId), "GET", nil, "application/json") diff --git a/goscord/rest/interaction.go b/goscord/rest/interaction.go index 6ed78bb..c80bd9d 100644 --- a/goscord/rest/interaction.go +++ b/goscord/rest/interaction.go @@ -6,7 +6,6 @@ import ( "errors" "fmt" "github.com/Goscord/goscord/goscord/discord" - "github.com/Goscord/goscord/goscord/discord/embed" "github.com/bytedance/sonic" )