Documentation ¶
Index ¶
- Constants
- Variables
- func AdminOrPerm(needed int, userID, channelID int64) (bool, error)
- func BotProbablyHasPermission(guildID int64, channelID int64, permission int) bool
- func BotProbablyHasPermissionGS(lock bool, gs *dstate.GuildState, channelID int64, permission int) bool
- func BotStarted()
- func ConcurrentEventHandler(inner eventsystem.Handler) eventsystem.Handler
- func ContextSession(ctx context.Context) *discordgo.Session
- func EmitGuildRemoved(guildID int64)
- func GetMember(guildID, userID int64) (*dstate.MemberState, error)
- func GetMembers(guildID int64, userIDs ...int64) ([]*dstate.MemberState, error)
- func GuildCountsFunc() []int
- func GuildName(gID int64) (name string)
- func HandleChannelCreate(evt *eventsystem.EventData)
- func HandleChannelDelete(evt *eventsystem.EventData)
- func HandleChannelUpdate(evt *eventsystem.EventData)
- func HandleGuildCreate(evt *eventsystem.EventData)
- func HandleGuildDelete(evt *eventsystem.EventData)
- func HandleGuildMemberAdd(evt *eventsystem.EventData)
- func HandleGuildMemberUpdate(evt *eventsystem.EventData)
- func HandleGuildMembersChunk(data *eventsystem.EventData)
- func HandleGuildRoleCreate(evt *eventsystem.EventData)
- func HandleGuildRoleRemove(evt *eventsystem.EventData)
- func HandleGuildRoleUpdate(evt *eventsystem.EventData)
- func HandleGuildUpdate(evt *eventsystem.EventData)
- func HandleReady(data *eventsystem.EventData)
- func HasReadOnlyAccess(userID int64) (hasAccess bool, err error)
- func InitPlugins()
- func InvalidateCache(guildID, userID int64)
- func IsBotAdmin(userID int64) (isAdmin bool, err error)
- func IsGuildOnCurrentProcess(guildID int64) bool
- func MonitorLoading()
- func QueueMergedMessage(channelID int64, message string)
- func Run()
- func SendDM(user int64, msg string) error
- func SendDMEmbed(user int64, embed *discordgo.MessageEmbed) error
- func SendMessage(guildID int64, channelID int64, msg string) (permsOK bool, resp *discordgo.Message, err error)
- func SendMessageEmbed(guildID int64, channelID int64, msg *discordgo.MessageEmbed) (permsOK bool, resp *discordgo.Message, err error)
- func SendMessageEmbedGS(gs *dstate.GuildState, channelID int64, msg *discordgo.MessageEmbed) (permsOK bool, resp *discordgo.Message, err error)
- func SendMessageGS(gs *dstate.GuildState, channelID int64, msg string) (permsOK bool, resp *discordgo.Message, err error)
- func SetStatus(status string)
- func SetStreaming(streaming, status string)
- func SnowflakeToTime(i int64) time.Time
- func StateHandler(evt *eventsystem.EventData)
- func Stop(wg *sync.WaitGroup)
- func StopAllPlugins(wg *sync.WaitGroup)
- type BotInitHandler
- type BotStartedHandler
- type BotStopperHandler
- type DiscordMessages
- type MemberFetchGuildQueue
- type MemberFetchRequest
- type MemberFetchResult
- type NewGuildHandler
- type RemoveGuildHandler
- type ShardMigrationHandler
- type SlaveImpl
- func (s *SlaveImpl) FullStart()
- func (s *SlaveImpl) LoadGuildState(gs *master.GuildStateData)
- func (s *SlaveImpl) SendGuilds(shard int)
- func (s *SlaveImpl) Shutdown()
- func (s *SlaveImpl) SoftStart()
- func (s *SlaveImpl) StartShard(shard int, sessionID string, sequence int64)
- func (s *SlaveImpl) StartShardTransferFrom() int
- func (s *SlaveImpl) StartShardTransferTo(numShards int)
- func (s *SlaveImpl) StopShard(shard int) (sessionID string, sequence int64)
- type WrappedMessage
Constants ¶
const ( StateRunningNoMaster int = iota StateRunningWithMaster // Fully started StateWaitingHelloMaster StateSoftStarting StateShardMigrationTo StateShardMigrationFrom )
const EventLoggerPeriodDuration = time.Second * 10
const ( // How long after removing a guild the config for it gets cleared GuildRemoveConfigExpire = 60 * 60 * 24 // <- 1 day )
Variables ¶
var ( // Set of redis admins RedisKeyAdmins = "yagpdb_admins" // Set of users with read only access RedisKeyReadOnlyAccess = "yagpdb_ro_access" )
var ( // When the bot was started Started = time.Now() Running bool State *dstate.State ShardManager *dshardmanager.Manager StateHandlerPtr *eventsystem.Handler SlaveClient *slave.Conn MessageDeleteQueue = deletequeue.NewQueue() )
var ( // the total amount of shards this bot is set to use across all processes TotalShardCount int // the number of shards running on this process ProcessShardCount int // the offset of the running shards // example: if we were running shard 4 and 5, the offset would be 4 and the running shard count 2 RunShardOffset int )
var ( ErrStartingUp = errors.New("Starting up, caches are being filled...") ErrGuildNotFound = errors.New("Guild not found") )
var (
Cache = cache.New(time.Minute, time.Minute)
)
var (
EventLogger = &eventLogger{}
)
var ( MemberFetcher = &memberFetcher{ fetching: make(map[int64]*MemberFetchGuildQueue), notFetching: make(map[int64]*MemberFetchGuildQueue), } )
Functions ¶
func BotProbablyHasPermission ¶ added in v1.4.12
BotProbablyHasPermission returns true if its possible that the bot has the following permission, it also returns true if the bot member could not be found or if the guild is not in state (hence, probably)
func BotProbablyHasPermissionGS ¶ added in v1.4.12
func BotProbablyHasPermissionGS(lock bool, gs *dstate.GuildState, channelID int64, permission int) bool
BotProbablyHasPermissionGS is the same as BotProbablyHasPermission but with a guildstate instead of guildid
func BotStarted ¶ added in v1.4.1
func BotStarted()
func ConcurrentEventHandler ¶
func ConcurrentEventHandler(inner eventsystem.Handler) eventsystem.Handler
func EmitGuildRemoved ¶
func EmitGuildRemoved(guildID int64)
func GetMembers ¶
func GetMembers(guildID int64, userIDs ...int64) ([]*dstate.MemberState, error)
func GuildCountsFunc ¶
func GuildCountsFunc() []int
func GuildName ¶ added in v0.29.1
GuildName is a convenience function for getting the name of a guild
func HandleChannelCreate ¶
func HandleChannelCreate(evt *eventsystem.EventData)
func HandleChannelDelete ¶
func HandleChannelDelete(evt *eventsystem.EventData)
func HandleChannelUpdate ¶
func HandleChannelUpdate(evt *eventsystem.EventData)
func HandleGuildCreate ¶
func HandleGuildCreate(evt *eventsystem.EventData)
func HandleGuildDelete ¶
func HandleGuildDelete(evt *eventsystem.EventData)
func HandleGuildMemberAdd ¶ added in v1.7.0
func HandleGuildMemberAdd(evt *eventsystem.EventData)
func HandleGuildMemberUpdate ¶
func HandleGuildMemberUpdate(evt *eventsystem.EventData)
func HandleGuildMembersChunk ¶ added in v1.6.0
func HandleGuildMembersChunk(data *eventsystem.EventData)
func HandleGuildRoleCreate ¶
func HandleGuildRoleCreate(evt *eventsystem.EventData)
func HandleGuildRoleRemove ¶
func HandleGuildRoleRemove(evt *eventsystem.EventData)
func HandleGuildRoleUpdate ¶
func HandleGuildRoleUpdate(evt *eventsystem.EventData)
func HandleGuildUpdate ¶
func HandleGuildUpdate(evt *eventsystem.EventData)
func HandleReady ¶
func HandleReady(data *eventsystem.EventData)
func HasReadOnlyAccess ¶ added in v1.6.0
func InitPlugins ¶ added in v1.4.1
func InitPlugins()
func InvalidateCache ¶
func InvalidateCache(guildID, userID int64)
func IsBotAdmin ¶ added in v1.6.0
func IsGuildOnCurrentProcess ¶ added in v1.9.0
IsGuildOnCurrentProcess returns whether the guild is on one of the shards for this process
func MonitorLoading ¶
func MonitorLoading()
func QueueMergedMessage ¶
func SendDMEmbed ¶ added in v1.4.1
func SendDMEmbed(user int64, embed *discordgo.MessageEmbed) error
func SendMessage ¶ added in v1.4.12
func SendMessageEmbed ¶ added in v1.4.12
func SendMessageEmbedGS ¶ added in v1.4.12
func SendMessageEmbedGS(gs *dstate.GuildState, channelID int64, msg *discordgo.MessageEmbed) (permsOK bool, resp *discordgo.Message, err error)
func SendMessageGS ¶ added in v1.4.12
func SetStreaming ¶ added in v1.4.7
func SetStreaming(streaming, status string)
func SnowflakeToTime ¶ added in v1.4.1
func StateHandler ¶
func StateHandler(evt *eventsystem.EventData)
StateHandler updates the world state use AddHandlerBefore to add handler before this one, otherwise they will alwyas be after
func StopAllPlugins ¶ added in v1.4.1
Types ¶
type BotInitHandler ¶ added in v1.4.1
type BotInitHandler interface {
BotInit()
}
Fired when the bot it starting up, not for the webserver
type BotStartedHandler ¶
type BotStartedHandler interface {
BotStarted()
}
Fired after the bot has connected all shards
type BotStopperHandler ¶
type DiscordMessages ¶
type DiscordMessages []*dstate.MessageState
func (DiscordMessages) Len ¶
func (d DiscordMessages) Len() int
Len is the number of elements in the collection.
func (DiscordMessages) Less ¶
func (d DiscordMessages) Less(i, j int) bool
Less reports whether the element with index i should sort before the element with index j.
func (DiscordMessages) Swap ¶
func (d DiscordMessages) Swap(i, j int)
Swap swaps the elements with indexes i and j.
type MemberFetchGuildQueue ¶
type MemberFetchGuildQueue struct {
Queue []*MemberFetchRequest
}
type MemberFetchRequest ¶
type MemberFetchRequest struct { Member int64 Guild int64 WaitingChannels []chan MemberFetchResult }
type MemberFetchResult ¶
type MemberFetchResult struct { Err error Member *dstate.MemberState }
type NewGuildHandler ¶
Used for intializing stuff for new servers
type RemoveGuildHandler ¶
Used for deleting configuration about servers
type ShardMigrationHandler ¶ added in v1.4.1
type ShardMigrationHandler interface {
GuildMigrated(guild *dstate.GuildState, toThisSlave bool)
}
type SlaveImpl ¶ added in v1.4.1
type SlaveImpl struct {
// contains filtered or unexported fields
}
Slave implementation
func (*SlaveImpl) LoadGuildState ¶ added in v1.4.1
func (s *SlaveImpl) LoadGuildState(gs *master.GuildStateData)
func (*SlaveImpl) SendGuilds ¶ added in v1.4.1
func (*SlaveImpl) StartShard ¶ added in v1.4.1
func (*SlaveImpl) StartShardTransferFrom ¶ added in v1.4.1
func (*SlaveImpl) StartShardTransferTo ¶ added in v1.4.1
type WrappedMessage ¶
func GetMessages ¶
func GetMessages(channelID int64, limit int, deleted bool) ([]*WrappedMessage, error)
GetMessages Gets messages from state if possible, if not then it retrieves from the discord api Puts the messages in the state aswell