Documentation
¶
Index ¶
- Variables
- func AddRootCommands(cmds ...*YAGCommand)
- func CensorError(err error) string
- func CheckChannelsConfig(conf *CommandsConfig, channels []*discordgo.Channel)
- func CmdNotFound(search string) string
- func Dir(useLocal bool, name string) http.FileSystem
- func FS(useLocal bool) http.FileSystem
- func FSByte(useLocal bool, name string) ([]byte, error)
- func FSMustByte(useLocal bool, name string) []byte
- func FSMustString(useLocal bool, name string) string
- func FSString(useLocal bool, name string) (string, error)
- func GetCommandPrefix(client *redis.Client, guild int64) (string, error)
- func HandleCommands(w http.ResponseWriter, r *http.Request) interface{}
- func HandleGuildCreate(evt *eventsystem.EventData)
- func HandlePostCommands(w http.ResponseWriter, r *http.Request) interface{}
- func ParseDuration(str string) (time.Duration, error)
- func RegisterPlugin()
- func TmplExecCmdFuncs(ctx *templates.Context, maxExec int, dryRun bool) (userCtxCommandExec cmdExecFunc, botCtxCommandExec cmdExecFunc)
- type ChannelCommandSetting
- type ChannelOverride
- type CommandsConfig
- type ContextKey
- type DurationArg
- type Plugin
- type YAGCommand
- func (yc *YAGCommand) ArgDefs(data *dcmd.Data) (args []*dcmd.ArgDef, required int, combos [][]int)
- func (yc *YAGCommand) Category() *dcmd.Category
- func (cs *YAGCommand) CooldownLeft(client *redis.Client, userID int64) (int, error)
- func (yc *YAGCommand) Descriptions(data *dcmd.Data) (short, long string)
- func (cs *YAGCommand) Enabled(client *redis.Client, channel int64, gState *dstate.GuildState) (enabled bool, requiredRole int64, autodel bool, err error)
- func (yc *YAGCommand) GetTrigger() *dcmd.Trigger
- func (yc *YAGCommand) Logger(data *dcmd.Data) *log.Entry
- func (yc *YAGCommand) Run(data *dcmd.Data) (interface{}, error)
- func (yc *YAGCommand) SendResponse(cmdData *dcmd.Data, resp interface{}, err error) (replies []*discordgo.Message, errR error)
- func (cs *YAGCommand) SetCooldown(client *redis.Client, userID int64) error
- func (yc *YAGCommand) Switches() []*dcmd.ArgDef
Constants ¶
This section is empty.
Variables ¶
var ( CategoryGeneral = &dcmd.Category{ Name: "General", Description: "General & informational commands", HelpEmoji: "ℹ️", EmbedColor: 0xe53939, } CategoryTool = &dcmd.Category{ Name: "Tools & Utilities", Description: "Various miscellaneous commands", HelpEmoji: "🔨", EmbedColor: 0xeaed40, } CategoryModeration = &dcmd.Category{ Name: "Moderation", Description: "Moderation commands", HelpEmoji: "👮", EmbedColor: 0xdb0606, } CategoryFun = &dcmd.Category{ Name: "Fun", Description: "Various commands meant for entertainment", HelpEmoji: "🎉", EmbedColor: 0x5ae26c, } CategoryDebug = &dcmd.Category{ Name: "Debug & Maintenance", Description: "Debug and other commands to inspect the bot", HelpEmoji: "🖥", EmbedColor: 0, } )
var ( RKeyCommandCooldown = func(uID int64, cmd string) string { return "cmd_cd:" + discordgo.StrID(uID) + ":" + cmd } RKeyCommandLock = func(uID int64, cmd string) string { return "cmd_lock:" + discordgo.StrID(uID) + ":" + cmd } CommandExecTimeout = time.Minute )
var (
CommandSystem *dcmd.System
)
Functions ¶
func AddRootCommands ¶
func AddRootCommands(cmds ...*YAGCommand)
func CensorError ¶
Keys and other sensitive information shouldnt be sent in error messages, but just in case it is
func CheckChannelsConfig ¶
func CheckChannelsConfig(conf *CommandsConfig, channels []*discordgo.Channel)
Fills in the defaults for missing data, for when users create channels or commands are added
func CmdNotFound ¶
func Dir ¶
func Dir(useLocal bool, name string) http.FileSystem
Dir returns a http.Filesystem for the embedded assets on a given prefix dir. If useLocal is true, the filesystem's contents are instead used.
func FS ¶
func FS(useLocal bool) http.FileSystem
FS returns a http.Filesystem for the embedded assets. If useLocal is true, the filesystem's contents are instead used.
func FSByte ¶
FSByte returns the named file from the embedded assets. If useLocal is true, the filesystem's contents are instead used.
func FSMustByte ¶
FSMustByte is the same as FSByte, but panics if name is not present.
func FSMustString ¶
FSMustString is the string version of FSMustByte.
func HandleCommands ¶
func HandleCommands(w http.ResponseWriter, r *http.Request) interface{}
Servers the command page with current config
func HandleGuildCreate ¶
func HandleGuildCreate(evt *eventsystem.EventData)
func HandlePostCommands ¶
func HandlePostCommands(w http.ResponseWriter, r *http.Request) interface{}
Handles the updating of global and per channel command settings
func ParseDuration ¶
Parses a time string like 1day3h
func RegisterPlugin ¶
func RegisterPlugin()
Types ¶
type ChannelCommandSetting ¶
type ChannelCommandSetting struct {
Info *YAGCommand `json:"-"` // Used for template info
Cmd string `json:"cmd"`
CommandEnabled bool `json:"enabled"`
AutoDelete bool `json:"autodelete"`
RequiredRole string `json:"required_role"`
}
type ChannelOverride ¶
type ChannelOverride struct {
Settings []*ChannelCommandSetting `json:"settings"`
OverrideEnabled bool `json:"enabled"`
Channel string `json:"channel"`
ChannelName string `json:"-"` // Used for the template rendering
}
type CommandsConfig ¶
type CommandsConfig struct {
Prefix string `json:"-"` // Stored in a seperate key for speed
Global []*ChannelCommandSetting `json:"gloabl"`
ChannelOverrides []*ChannelOverride `json:"overrides"`
}
type DurationArg ¶
type DurationArg struct{}
func (*DurationArg) HelpName ¶
func (d *DurationArg) HelpName() string
func (*DurationArg) Matches ¶
func (d *DurationArg) Matches(part string) bool
type YAGCommand ¶
type YAGCommand struct {
Name string // Name of command, what its called from
Aliases []string // Aliases which it can also be called from
Description string // Description shown in non targetted help
LongDescription string // Longer description when this command was targetted
Arguments []*dcmd.ArgDef // Slice of argument definitions, ctx.Args will always be the same size as this slice (although the data may be nil)
RequiredArgs int // Number of reuquired arguments, ignored if combos is specified
ArgumentCombos [][]int // Slice of argument pairs, will override RequiredArgs if specified
ArgSwitches []*dcmd.ArgDef // Switches for the commadn to use
AllowEveryoneMention bool
HideFromCommandsPage bool // Set to hide this command from the commands page
Key string // GuildId is appended to the key, e.g if key is "test:", it will check for "test:<guildid>"
CustomEnabled bool // Set to true to handle the enable check itself
Default bool // The default enabled state of this command
Cooldown int // Cooldown in seconds before user can use it again
CmdCategory *dcmd.Category
RunInDM bool // Set to enable this commmand in DM's
HideFromHelp bool // Set to hide from help
// Run is ran the the command has sucessfully been parsed
// It returns a reply and an error
// the reply can have a type of string, *MessageEmbed or error
RunFunc dcmd.RunFunc
}
Slight extension to the simplecommand, it will check if the command is enabled in the HandleCommand func And invoke a custom handlerfunc with provided redis client
func (*YAGCommand) Category ¶
func (yc *YAGCommand) Category() *dcmd.Category
CmdWithCategory puts the command in a category, mostly used for the help generation
func (*YAGCommand) CooldownLeft ¶
CooldownLeft returns the number of seconds before a command can be used again
func (*YAGCommand) Descriptions ¶
func (yc *YAGCommand) Descriptions(data *dcmd.Data) (short, long string)
func (*YAGCommand) Enabled ¶
func (cs *YAGCommand) Enabled(client *redis.Client, channel int64, gState *dstate.GuildState) (enabled bool, requiredRole int64, autodel bool, err error)
Enabled returns wether the command is enabled or not
func (*YAGCommand) GetTrigger ¶
func (yc *YAGCommand) GetTrigger() *dcmd.Trigger
func (*YAGCommand) SendResponse ¶
func (*YAGCommand) SetCooldown ¶
func (cs *YAGCommand) SetCooldown(client *redis.Client, userID int64) error
SetCooldown sets the cooldown of the command as it's defined in the struct
func (*YAGCommand) Switches ¶
func (yc *YAGCommand) Switches() []*dcmd.ArgDef