forked from pothtonswer/discordmuffin
Merge branch 'develop' of https://github.com/bwmarrin/Discordgo into develop
This commit is contained in:
commit
a3ac679d76
3 changed files with 86 additions and 4 deletions
60
state.go
60
state.go
|
@ -43,6 +43,7 @@ func (s *State) GuildAdd(guild *Guild) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Guilds = append(s.Guilds, *guild)
|
s.Guilds = append(s.Guilds, *guild)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -59,6 +60,7 @@ func (s *State) GuildRemove(guild *Guild) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.New("Guild not found.")
|
return errors.New("Guild not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +78,7 @@ func (s *State) Guild(guildID string) (*Guild, error) {
|
||||||
return &g, nil
|
return &g, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.New("Guild not found.")
|
return nil, errors.New("Guild not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +129,7 @@ func (s *State) MemberRemove(member *Member) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Member gets a member by ID from a guild.
|
// Member gets a member by ID from a guild.
|
||||||
func (s *State) Member(guildID string, userID string) (*Member, error) {
|
func (s *State) Member(guildID, userID string) (*Member, error) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return nil, nilError
|
return nil, nilError
|
||||||
}
|
}
|
||||||
|
@ -178,6 +181,7 @@ func (s *State) ChannelAdd(channel *Channel) error {
|
||||||
|
|
||||||
guild.Channels = append(guild.Channels, *channel)
|
guild.Channels = append(guild.Channels, *channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +216,7 @@ func (s *State) ChannelRemove(channel *Channel) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GuildChannel gets a channel by ID from a guild.
|
// GuildChannel gets a channel by ID from a guild.
|
||||||
func (s *State) GuildChannel(guildID string, channelID string) (*Channel, error) {
|
func (s *State) GuildChannel(guildID, channelID string) (*Channel, error) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return nil, nilError
|
return nil, nilError
|
||||||
}
|
}
|
||||||
|
@ -266,3 +270,55 @@ func (s *State) Channel(channelID string) (*Channel, error) {
|
||||||
|
|
||||||
return nil, errors.New("Channel not found.")
|
return nil, errors.New("Channel not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Emoji returns an emoji for a guild and emoji id.
|
||||||
|
func (s *State) Emoji(guildID, emojiID string) (*Emoji, error) {
|
||||||
|
if s == nil {
|
||||||
|
return nil, nilError
|
||||||
|
}
|
||||||
|
|
||||||
|
guild, err := s.Guild(guildID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range guild.Emojis {
|
||||||
|
if e.ID == emojiID {
|
||||||
|
return &e, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.New("Emoji not found.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// EmojiAdd adds an emoji to the current world state.
|
||||||
|
func (s *State) EmojiAdd(guildID string, emoji *Emoji) error {
|
||||||
|
if s == nil {
|
||||||
|
return nilError
|
||||||
|
}
|
||||||
|
|
||||||
|
guild, err := s.Guild(guildID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, e := range guild.Emojis {
|
||||||
|
if e.ID == emoji.ID {
|
||||||
|
guild.Emojis[i] = *emoji
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
guild.Emojis = append(guild.Emojis, *emoji)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EmojisAdd adds multiple emojis to the world state.
|
||||||
|
func (s *State) EmojisAdd(guildID string, emojis []Emoji) error {
|
||||||
|
for _, e := range emojis {
|
||||||
|
if err := s.EmojiAdd(guildID, &e); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
16
structs.go
16
structs.go
|
@ -58,6 +58,7 @@ type Session struct {
|
||||||
OnGuildIntegrationsUpdate func(*Session, GuildIntegrationsUpdate)
|
OnGuildIntegrationsUpdate func(*Session, GuildIntegrationsUpdate)
|
||||||
OnGuildBanAdd func(*Session, GuildBan)
|
OnGuildBanAdd func(*Session, GuildBan)
|
||||||
OnGuildBanRemove func(*Session, GuildBan)
|
OnGuildBanRemove func(*Session, GuildBan)
|
||||||
|
OnGuildEmojisUpdate func(*Session, GuildEmojisUpdate)
|
||||||
OnUserSettingsUpdate func(*Session, map[string]interface{}) // TODO: Find better way?
|
OnUserSettingsUpdate func(*Session, map[string]interface{}) // TODO: Find better way?
|
||||||
|
|
||||||
// Exposed but should not be modified by User.
|
// Exposed but should not be modified by User.
|
||||||
|
@ -191,6 +192,14 @@ type PermissionOverwrite struct {
|
||||||
Allow int `json:"allow"`
|
Allow int `json:"allow"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Emoji struct {
|
||||||
|
Roles []string `json:"roles"`
|
||||||
|
RequireColons bool `json:"require_colons"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Managed bool `json:"managed"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
// A Guild holds all data related to a specific Discord Guild. Guilds are also
|
||||||
// sometimes referred to as Servers in the Discord client.
|
// sometimes referred to as Servers in the Discord client.
|
||||||
type Guild struct {
|
type Guild struct {
|
||||||
|
@ -206,6 +215,7 @@ type Guild struct {
|
||||||
Large bool `json:"large"` // ??
|
Large bool `json:"large"` // ??
|
||||||
JoinedAt string `json:"joined_at"` // make this a timestamp
|
JoinedAt string `json:"joined_at"` // make this a timestamp
|
||||||
Roles []Role `json:"roles"`
|
Roles []Role `json:"roles"`
|
||||||
|
Emojis []Emoji `json:"emojis"`
|
||||||
Members []Member `json:"members"`
|
Members []Member `json:"members"`
|
||||||
Presences []Presence `json:"presences"`
|
Presences []Presence `json:"presences"`
|
||||||
Channels []Channel `json:"channels"`
|
Channels []Channel `json:"channels"`
|
||||||
|
@ -367,6 +377,12 @@ type GuildBan struct {
|
||||||
GuildID string `json:"guild_id"`
|
GuildID string `json:"guild_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A GuildEmojisUpdate stores data for a guild emoji update event.
|
||||||
|
type GuildEmojisUpdate struct {
|
||||||
|
GuildID string `json:"guild_id"`
|
||||||
|
Emojis []Emoji `json:"emojis"`
|
||||||
|
}
|
||||||
|
|
||||||
// A State contains the current known state.
|
// A State contains the current known state.
|
||||||
// As discord sends this in a READY blob, it seems reasonable to simply
|
// As discord sends this in a READY blob, it seems reasonable to simply
|
||||||
// use that struct as the data store.
|
// use that struct as the data store.
|
||||||
|
|
14
wsapi.go
14
wsapi.go
|
@ -397,6 +397,17 @@ func (s *Session) event(messageType int, message []byte) (err error) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
case "GUILD_EMOJIS_UPDATE":
|
||||||
|
var st GuildEmojisUpdate
|
||||||
|
if err = unmarshalEvent(e, &st); err == nil {
|
||||||
|
if s.StateEnabled {
|
||||||
|
s.State.EmojisAdd(st.GuildID, st.Emojis)
|
||||||
|
}
|
||||||
|
if s.OnGuildEmojisUpdate != nil {
|
||||||
|
s.OnGuildEmojisUpdate(s, st)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
case "USER_SETTINGS_UPDATE":
|
case "USER_SETTINGS_UPDATE":
|
||||||
if s.OnUserSettingsUpdate != nil {
|
if s.OnUserSettingsUpdate != nil {
|
||||||
var st map[string]interface{}
|
var st map[string]interface{}
|
||||||
|
@ -407,8 +418,7 @@ func (s *Session) event(messageType int, message []byte) (err error) {
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
fmt.Println("UNKNOWN EVENT: ", e.Type)
|
fmt.Println("UNKNOWN EVENT: ", e.Type)
|
||||||
// TODO learn the log package
|
printJSON(message)
|
||||||
// log.print type and JSON data
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if still here, send to generic OnEvent
|
// if still here, send to generic OnEvent
|
||||||
|
|
Loading…
Reference in a new issue