bot

package
v1.16.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2019 License: MIT Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const DBSchema = `` /* 253-byte string literal not displayed */
View Source
const EventLoggerPeriodDuration = time.Second * 10
View Source
const (
	EvtGuildState dshardorchestrator.EventType = 101
)
View Source
const (
	// How long after removing a guild the config for it gets cleared
	GuildRemoveConfigExpire = 60 * 60 * 24 // <- 1 day
)
View Source
const MemFreeThreshold = 90

Variables

View Source
var (

	// Set of redis admins
	RedisKeyAdmins = "yagpdb_admins"

	// Set of users with read only access
	RedisKeyReadOnlyAccess = "yagpdb_ro_access"
)
View Source
var (
	// When the bot was started
	Started      = time.Now()
	Enabled      bool // wether the bot is set to run at some point in this process
	Running      bool // wether the bot is currently running
	State        *dstate.State
	ShardManager *dshardmanager.Manager

	StateHandlerPtr *eventsystem.Handler

	NodeConn          *node.Conn
	UsingOrchestrator bool

	MessageDeleteQueue = deletequeue.NewQueue()
)
View Source
var (
	ErrStartingUp    = errors.New("Starting up, caches are being filled...")
	ErrGuildNotFound = errors.New("Guild not found")
)
View Source
var (
	Cache = cache.New(time.Minute, time.Minute)
)
View Source
var (
	EventLogger = &eventLogger{}
)
View Source
var (
	MemberFetcher = &memberFetcher{
		fetching:    make(map[int64]*MemberFetchGuildQueue),
		notFetching: make(map[int64]*MemberFetchGuildQueue),
	}
)

Functions

func AdminOrPerm

func AdminOrPerm(needed int, userID, channelID int64) (bool, error)

AdminOrPerm returns the permissions for the userID in the specified channel returns an error if the user or channel is not found

func AdminOrPermMS added in v1.11.5

func AdminOrPermMS(ms *dstate.MemberState, channelID int64, needed int) (bool, error)

AdminOrPermMS is the same as AdminOrPerm but with a provided member state

func BotProbablyHasPermission added in v1.4.12

func BotProbablyHasPermission(guildID int64, channelID int64, permission int) bool

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 ConcurrentEventHandler

func ConcurrentEventHandler(inner eventsystem.Handler) eventsystem.Handler

func ContextSession

func ContextSession(ctx context.Context) *discordgo.Session

func EmitGuildRemoved

func EmitGuildRemoved(guildID int64)

func GetMember

func GetMember(guildID, userID int64) (*dstate.MemberState, error)

func GetMembers

func GetMembers(guildID int64, userIDs ...int64) ([]*dstate.MemberState, error)

func GetProcessShards added in v1.11.0

func GetProcessShards() []int

func GetTotalShards added in v1.11.0

func GetTotalShards() int64

GetTotalShards either retrieves the total shards from passed command line if the bot is set to run in the same process or it starts a background poller to poll redis for it every second

func GuildCountsFunc

func GuildCountsFunc() []int

func GuildName added in v0.29.1

func GuildName(gID int64) (name string)

GuildName is a convenience function for getting the name of a guild

func GuildShardID added in v1.11.0

func GuildShardID(guildID int64) int

GuildShardID returns the shard id for the provided guild id

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 HandleGuildMemberRemove added in v1.11.6

func HandleGuildMemberRemove(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 HandleMessageCreate added in v1.11.1

func HandleMessageCreate(evt *eventsystem.EventData)

func HandleReactionAdd added in v1.11.1

func HandleReactionAdd(evt *eventsystem.EventData)

func HandleReady

func HandleReady(data *eventsystem.EventData)

func HandleResumed added in v1.11.6

func HandleResumed(evt *eventsystem.EventData)

func HasReadOnlyAccess added in v1.6.0

func HasReadOnlyAccess(userID int64) (hasAccess bool, err error)

func InitPlugins added in v1.4.1

func InitPlugins()

func InvalidateCache

func InvalidateCache(guildID, userID int64)

func IsBotAdmin added in v1.6.0

func IsBotAdmin(userID int64) (isAdmin bool, err error)

func IsGuildOnCurrentProcess added in v1.9.0

func IsGuildOnCurrentProcess(guildID int64) bool

IsGuildOnCurrentProcess returns whether the guild is on one of the shards for this process

func IsMemberAbove added in v1.11.5

func IsMemberAbove(gs *dstate.GuildState, ms1 *dstate.MemberState, ms2 *dstate.MemberState) bool

IsMemberAbove returns wether ms1 is above ms2 in terms of roles (e.g the highest role of ms1 is higher than the highest role of ms2) assumes gs is locked, otherwise race conditions will occur

func IsMemberAboveRole added in v1.16.0

func IsMemberAboveRole(gs *dstate.GuildState, ms1 *dstate.MemberState, role *discordgo.Role) bool

IsMemberAboveRole returns wether ms is above role assumes gs is locked, otherwise race conditions will occur

func MemberHighestRole added in v1.11.5

func MemberHighestRole(gs *dstate.GuildState, ms *dstate.MemberState) *discordgo.Role

MemberHighestRole returns the highest role for ms, assumes gs is rlocked, otherwise race conditions will occur

func NodeID added in v1.11.2

func NodeID() string

func QueueMergedMessage

func QueueMergedMessage(channelID int64, message string)

func RefreshStatus added in v1.11.4

func RefreshStatus(session *discordgo.Session)

func Run

func Run()

func SendDM

func SendDM(user int64, msg string) error

func SendDMEmbed added in v1.4.1

func SendDMEmbed(user int64, embed *discordgo.MessageEmbed) error

func SendMessage added in v1.4.12

func SendMessage(guildID int64, channelID int64, msg string) (permsOK bool, resp *discordgo.Message, err error)

func SendMessageEmbed added in v1.4.12

func SendMessageEmbed(guildID int64, channelID int64, msg *discordgo.MessageEmbed) (permsOK bool, resp *discordgo.Message, err error)

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 SendMessageGS(gs *dstate.GuildState, channelID int64, msg string) (permsOK bool, resp *discordgo.Message, err error)

func SetStatus added in v1.4.7

func SetStatus(streaming, status string)

func SetupStandalone added in v1.11.0

func SetupStandalone()

func SnowflakeToTime added in v1.4.1

func SnowflakeToTime(i int64) time.Time

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 Stop

func Stop(wg *sync.WaitGroup)

func StopAllPlugins added in v1.4.1

func StopAllPlugins(wg *sync.WaitGroup)

Types

type BotInitHandler added in v1.4.1

type BotInitHandler interface {
	BotInit()
}

Fired when the bot it starting up, not for the webserver

type BotStopperHandler

type BotStopperHandler interface {
	StopBot(wg *sync.WaitGroup)
}

BotStopperHandler runs when the bot is shuttdown down you need to call wg.Done when you have completed your plugin shutdown (stopped background workers)

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 LateBotInitHandler added in v1.11.5

type LateBotInitHandler interface {
	LateBotInit()
}

Fired when the bot it starting up, after BotInit

type MemWatcher added in v1.16.0

type MemWatcher struct {
	// contains filtered or unexported fields
}

func (*MemWatcher) Check added in v1.16.0

func (mw *MemWatcher) Check()

func (*MemWatcher) Run added in v1.16.0

func (mw *MemWatcher) Run()

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

type NewGuildHandler interface {
	NewGuild(guild *discordgo.Guild) error
}

Used for intializing stuff for new servers

type NodeImpl added in v1.11.0

type NodeImpl struct {
	// contains filtered or unexported fields
}

func (*NodeImpl) HandleUserEvent added in v1.11.0

func (n *NodeImpl) HandleUserEvent(evt dshardorchestrator.EventType, data interface{})

func (*NodeImpl) InitializeShardTransferFrom added in v1.11.0

func (n *NodeImpl) InitializeShardTransferFrom(shard int) (sessionID string, sequence int64)

func (*NodeImpl) InitializeShardTransferTo added in v1.11.0

func (n *NodeImpl) InitializeShardTransferTo(shard int, sessionID string, sequence int64)

func (*NodeImpl) LoadGuildState added in v1.11.0

func (n *NodeImpl) LoadGuildState(gs *dstate.GuildState)

func (*NodeImpl) SendGuilds added in v1.11.0

func (n *NodeImpl) SendGuilds(shard int) int

func (*NodeImpl) SessionEstablished added in v1.11.0

func (n *NodeImpl) SessionEstablished(info node.SessionInfo)

func (*NodeImpl) Shutdown added in v1.11.0

func (n *NodeImpl) Shutdown()

called when the bot should shut down, make sure to send EvtShutdown when completed

func (*NodeImpl) StartShard added in v1.11.0

func (n *NodeImpl) StartShard(shard int, sessionID string, sequence int64)

func (*NodeImpl) StartShardTransferFrom added in v1.11.0

func (n *NodeImpl) StartShardTransferFrom(shard int) (numEventsSent int)

this should return when all user events has been sent, with the number of user events sent

func (*NodeImpl) StopShard added in v1.11.0

func (n *NodeImpl) StopShard(shard int) (sessionID string, sequence int64)

type RemoveGuildHandler

type RemoveGuildHandler interface {
	RemoveGuild(guildID int64) error
}

Used for deleting configuration about servers

type ShardMigrationHandler added in v1.4.1

type ShardMigrationHandler interface {
	GuildMigrated(guild *dstate.GuildState, toThisSlave bool)
}

type ShardMigrationReceiver added in v1.11.5

type ShardMigrationReceiver interface {
	ShardMigrationReceive(evt dshardorchestrator.EventType, data interface{})
}

type ShardMigrationSender added in v1.11.5

type ShardMigrationSender interface {
	ShardMigrationSend(shard int) int
}

type WrappedMessage

type WrappedMessage struct {
	*discordgo.Message
	Deleted bool
}

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL