templates

package
v2.23.0 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2023 License: MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxOpsNormal      = 1000000
	MaxOpsPremium     = 2500000
	MaxOpsEvalNormal  = 5000
	MaxOpsEvalPremium = 10000
)
View Source
const DiscordRoleLimit = 250
View Source
const MaxStringLength = 1000000

Variables

View Source
var ErrStringTooLong = errors.NewPlain("String is too long (max 1MB)")
View Source
var ErrTooManyAPICalls = errors.New("too many potential discord api calls function")
View Source
var ErrTooManyCalls = errors.New("too many calls to this function")
View Source
var GuildPremiumFunc func(guildID int64) (bool, error)

set by the premium package to return wether this guild is premium or not

View Source
var (
	StandardFuncMap = map[string]interface{}{

		"str":        ToString,
		"toString":   ToString,
		"toInt":      tmplToInt,
		"toInt64":    ToInt64,
		"toFloat":    ToFloat64,
		"toDuration": ToDuration,
		"toRune":     ToRune,
		"toByte":     ToByte,

		"hasPrefix":    strings.HasPrefix,
		"hasSuffix":    strings.HasSuffix,
		"joinStr":      joinStrings,
		"lower":        strings.ToLower,
		"slice":        slice,
		"split":        strings.Split,
		"title":        strings.Title,
		"trimSpace":    strings.TrimSpace,
		"upper":        strings.ToUpper,
		"urlescape":    url.PathEscape,
		"urlunescape":  url.PathUnescape,
		"print":        withOutputLimit(fmt.Sprint, MaxStringLength),
		"println":      withOutputLimit(fmt.Sprintln, MaxStringLength),
		"printf":       withOutputLimitF(fmt.Sprintf, MaxStringLength),
		"sanitizeText": confusables.SanitizeText,

		"reQuoteMeta": regexp.QuoteMeta,

		"add":        add,
		"cbrt":       tmplCbrt,
		"div":        tmplDiv,
		"fdiv":       tmplFDiv,
		"log":        tmplLog,
		"mathConst":  tmplMathConstant,
		"max":        tmplMax,
		"min":        tmplMin,
		"mod":        tmplMod,
		"mult":       tmplMult,
		"pow":        tmplPow,
		"round":      tmplRound,
		"roundCeil":  tmplRoundCeil,
		"roundEven":  tmplRoundEven,
		"roundFloor": tmplRoundFloor,
		"sqrt":       tmplSqrt,
		"sub":        tmplSub,

		"bitwiseAnd":        tmplBitwiseAnd,
		"bitwiseOr":         tmplBitwiseOr,
		"bitwiseXor":        tmplBitwiseXor,
		"bitwiseNot":        tmplBitwiseNot,
		"bitwiseAndNot":     tmplBitwiseAndNot,
		"bitwiseLeftShift":  tmplBitwiseLeftShift,
		"bitwiseRightShift": tmplBitwiseRightShift,

		"humanizeThousands":  tmplHumanizeThousands,
		"dict":               Dictionary,
		"sdict":              StringKeyDictionary,
		"structToSdict":      StructToSdict,
		"cembed":             CreateEmbed,
		"cslice":             CreateSlice,
		"complexMessage":     CreateMessageSend,
		"complexMessageEdit": CreateMessageEdit,
		"kindOf":             KindOf,

		"adjective":   common.RandomAdjective,
		"in":          in,
		"inFold":      inFold,
		"json":        tmplJson,
		"jsonToSdict": tmplJSONToSDict,
		"noun":        common.RandomNoun,
		"randInt":     randInt,
		"roleAbove":   roleIsAbove,
		"seq":         sequence,

		"shuffle": shuffle,
		"verb":    common.RandomVerb,

		"currentTime":     tmplCurrentTime,
		"parseTime":       tmplParseTime,
		"formatTime":      tmplFormatTime,
		"loadLocation":    time.LoadLocation,
		"newDate":         tmplNewDate,
		"snowflakeToTime": tmplSnowflakeToTime,
		"timestampToTime": tmplTimestampToTime,
		"weekNumber":      tmplWeekNumber,

		"humanizeDurationHours":   tmplHumanizeDurationHours,
		"humanizeDurationMinutes": tmplHumanizeDurationMinutes,
		"humanizeDurationSeconds": tmplHumanizeDurationSeconds,
		"humanizeTimeSinceDays":   tmplHumanizeTimeSinceDays,
	}
)

Functions

func CreateEmbed

func CreateEmbed(values ...interface{}) (*discordgo.MessageEmbed, error)

func CreateMessageEdit

func CreateMessageEdit(values ...interface{}) (*discordgo.MessageEdit, error)

func CreateMessageSend

func CreateMessageSend(values ...interface{}) (*discordgo.MessageSend, error)

func KindOf

func KindOf(input interface{}, flag ...bool) (string, error)

func LimitWriter

func LimitWriter(w io.Writer, n int64) io.Writer

LimitWriter works like io.LimitReader. It writes at most n bytes to the underlying Writer. It returns io.ErrShortWrite if more than n bytes are attempted to be written.

func MaybeScheduledDeleteMessage

func MaybeScheduledDeleteMessage(guildID, channelID, messageID int64, delaySeconds int)

func RegisterSetupFunc

func RegisterSetupFunc(f ContextSetupFunc)

func TODO

func TODO()

func ToByte

func ToByte(from interface{}) []byte

func ToDuration

func ToDuration(from interface{}) time.Duration

func ToFloat64

func ToFloat64(from interface{}) float64

func ToInt64

func ToInt64(from interface{}) int64

func ToRune

func ToRune(from interface{}) []rune

func ToString

func ToString(from interface{}) string

Types

type Context

type Context struct {
	Name string

	GS      *dstate.GuildSet
	MS      *dstate.MemberState
	Msg     *discordgo.Message
	BotUser *discordgo.User

	DisabledContextFuncs []string
	ContextFuncs         map[string]interface{}
	Data                 map[string]interface{}
	Counters             map[string]int

	FixedOutput string

	IsPremium bool

	RegexCache map[string]*regexp.Regexp

	CurrentFrame *ContextFrame

	IsExecedByLeaveMessage bool

	IsExecedByEvalCC bool
	// contains filtered or unexported fields
}

func NewContext

func NewContext(gs *dstate.GuildSet, cs *dstate.ChannelState, ms *dstate.MemberState) *Context

func (*Context) ChannelArg

func (c *Context) ChannelArg(v interface{}) int64

ChannelArg converts a variety of types of argument into a channel, verifying that it exists

func (*Context) ChannelArgNoDM

func (c *Context) ChannelArgNoDM(v interface{}) int64

ChannelArgNoDM is the same as ChannelArg but will not accept DM channels

func (*Context) ChannelArgNoDMNoThread

func (c *Context) ChannelArgNoDMNoThread(v interface{}) int64

func (*Context) Execute

func (c *Context) Execute(source string) (string, error)

func (*Context) ExecuteAndSendWithErrors

func (c *Context) ExecuteAndSendWithErrors(source string, channelID int64) error

func (*Context) IncreaseCheckCallCounter

func (c *Context) IncreaseCheckCallCounter(key string, limit int) bool

IncreaseCheckCallCounter Returns true if key is above the limit

func (*Context) IncreaseCheckCallCounterPremium

func (c *Context) IncreaseCheckCallCounterPremium(key string, normalLimit, premiumLimit int) bool

IncreaseCheckCallCounter Returns true if key is above the limit

func (*Context) IncreaseCheckGenericAPICall

func (c *Context) IncreaseCheckGenericAPICall() bool

func (*Context) LogEntry

func (c *Context) LogEntry() *logrus.Entry

func (*Context) MessageSend

func (c *Context) MessageSend(content string) *discordgo.MessageSend

func (*Context) Parse

func (c *Context) Parse(source string) (*template.Template, error)

func (*Context) SendResponse

func (c *Context) SendResponse(content string) (*discordgo.Message, error)

SendResponse sends the response and handles reactions and the like

type ContextFrame added in v2.4.0

type ContextFrame struct {
	CS *dstate.ChannelState

	MentionEveryone bool
	MentionHere     bool
	MentionRoles    []int64

	DelResponse bool

	DelResponseDelay         int
	EmebdsToSend             []*discordgo.MessageEmbed
	AddResponseReactionNames []string

	SendResponseInDM bool
	// contains filtered or unexported fields
}

type ContextSetupFunc

type ContextSetupFunc func(ctx *Context)

type CtxChannel

type CtxChannel struct {
	// These fields never change
	ID        int64
	GuildID   int64
	IsPrivate bool
	IsThread  bool

	Name                 string                           `json:"name"`
	Type                 discordgo.ChannelType            `json:"type"`
	Topic                string                           `json:"topic"`
	NSFW                 bool                             `json:"nsfw"`
	Position             int                              `json:"position"`
	Bitrate              int                              `json:"bitrate"`
	PermissionOverwrites []*discordgo.PermissionOverwrite `json:"permission_overwrites"`
	ParentID             int64                            `json:"parent_id"`
	OwnerID              int64                            `json:"owner_id"`
}

CtxChannel is almost a 1:1 copy of dstate.ChannelState, its needed because we cant axpose all those state methods we also cant use discordgo.Channel because that would likely break a lot of custom commands at this point.

func CtxChannelFromCS

func CtxChannelFromCS(cs *dstate.ChannelState) *CtxChannel

func (*CtxChannel) Mention

func (c *CtxChannel) Mention() (string, error)

type Dict

type Dict map[interface{}]interface{}

func Dictionary

func Dictionary(values ...interface{}) (Dict, error)

dictionary creates a map[string]interface{} from the given parameters by walking the parameters and treating them as key-value pairs. The number of parameters must be even.

func (Dict) Del

func (d Dict) Del(key interface{}) string

func (Dict) Get

func (d Dict) Get(key interface{}) interface{}

func (Dict) HasKey

func (d Dict) HasKey(k interface{}) (ok bool)

func (Dict) MarshalJSON

func (d Dict) MarshalJSON() ([]byte, error)

func (Dict) Set

func (d Dict) Set(key interface{}, value interface{}) (string, error)

type SDict

type SDict map[string]interface{}

func StringKeyDictionary

func StringKeyDictionary(values ...interface{}) (SDict, error)

func StructToSdict

func StructToSdict(value interface{}) (SDict, error)

func (SDict) Del

func (d SDict) Del(key string) string

func (SDict) Get

func (d SDict) Get(key string) interface{}

func (SDict) HasKey

func (d SDict) HasKey(k string) (ok bool)

func (SDict) Set

func (d SDict) Set(key string, value interface{}) (string, error)

type Slice

type Slice []interface{}

func CreateSlice

func CreateSlice(values ...interface{}) (Slice, error)

func (Slice) Append

func (s Slice) Append(item interface{}) (interface{}, error)

func (Slice) AppendSlice

func (s Slice) AppendSlice(slice interface{}) (interface{}, error)

func (Slice) Set

func (s Slice) Set(index int, item interface{}) (string, error)

func (Slice) StringSlice

func (s Slice) StringSlice(flag ...bool) interface{}

Jump to

Keyboard shortcuts

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