Help us shape the future of Go! Take the 2026 Go Developer Survey

kbot

package
v0.1.5 Latest Latest
Warning

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

Go to latest
Published: Apr 18, 2022 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const KittyBotColor = 0x4c50c1

Variables

This section is empty.

Functions

This section is empty.

Types

type AudioTrackData

type AudioTrackData struct {
	Requester snowflake.Snowflake `json:"requester"`
}

type AutocompleteHandler

type AutocompleteHandler func(b *Bot, p *message.Printer, e *events.AutocompleteInteractionEvent) error

type Bot

type Bot struct {
	Logger       log.Logger
	Client       bot.Client
	Lavalink     disgolink.Link
	MusicPlayers *MusicPlayerMap
	Paginator    *paginator.Manager
	Commands     *CommandMap
	Listeners    *Listeners
	DB           db.DB
	Config       Config
	Version      string
}

func (*Bot) LoadModules

func (b *Bot) LoadModules(modules []Module)

func (*Bot) RegisterNodes

func (b *Bot) RegisterNodes()

func (*Bot) SetupBot

func (b *Bot) SetupBot() (err error)
func (b *Bot) SetupLavalink()

func (*Bot) SetupPaginator

func (b *Bot) SetupPaginator()

func (*Bot) StartBot

func (b *Bot) StartBot() (err error)

func (*Bot) SyncCommands

func (b *Bot) SyncCommands()

type BotConfig

type BotConfig struct {
	ShardIDs   []int `json:"shard_ids"`
	ShardCount int   `json:"shard_count"`
}

type Command

type Command struct {
	Create              discord.ApplicationCommandCreate
	Checks              CommandCheck
	CommandHandler      map[string]CommandHandler
	ComponentHandler    map[string]ComponentHandler
	AutoCompleteHandler map[string]AutocompleteHandler
}

type CommandCheck

type CommandCheck func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool
var (
	IsDev CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		for _, v := range b.Config.DevUserIDs {
			if v == e.User().ID {
				return true
			}
		}
		if err := e.CreateMessage(discord.NewMessageCreateBuilder().
			SetContent(p.Sprintf("checks.is.dev")).
			SetEphemeral(true).
			Build(),
		); err != nil {
			b.Logger.Error(err)
		}
		return false
	}

	HasMusicPlayer CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		if !b.MusicPlayers.Has(*e.GuildID()) {
			if err := e.CreateMessage(discord.NewMessageCreateBuilder().
				SetContent(p.Sprintf("checks.has.music.player")).
				SetEphemeral(true).
				Build(),
			); err != nil {
				b.Logger.Error(err)
			}
			return false
		}
		return true
	}

	HasQueueItems CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		if b.MusicPlayers.Get(*e.GuildID()).Queue.Len() == 0 {
			if err := e.CreateMessage(discord.MessageCreate{Content: p.Sprintf("checks.has.queue.items")}); err != nil {
				b.Logger.Error(err)
			}
			return false
		}
		return true
	}

	HasHistoryItems CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		if b.MusicPlayers.Get(*e.GuildID()).History.Len() == 0 {
			if err := e.CreateMessage(discord.MessageCreate{Content: p.Sprintf("checks.has.history.items")}); err != nil {
				b.Logger.Error(err)
			}
			return false
		}
		return true
	}

	IsMemberConnectedToVoiceChannel CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		if voiceState, ok := e.Client().Caches().VoiceStates().Get(*e.GuildID(), e.User().ID); !ok || voiceState.ChannelID == nil {
			if err := e.CreateMessage(discord.NewMessageCreateBuilder().
				SetContent(p.Sprintf("modules.music.not.in.voice")).
				SetEphemeral(true).
				Build(),
			); err != nil {
				b.Logger.Error(err)
			}
			return false
		}
		return true
	}

	IsPlaying CommandCheck = func(b *Bot, p *message.Printer, e *events.ApplicationCommandInteractionEvent) bool {
		if b.MusicPlayers.Get(*e.GuildID()).PlayingTrack() == nil {
			if err := e.CreateMessage(discord.NewMessageCreateBuilder().
				SetContent(p.Sprintf("checks.is.playing")).
				SetEphemeral(true).
				Build(),
			); err != nil {
				b.Logger.Error(err)
			}
			return false
		}
		return true
	}
)

func CommandCheckAllOf

func CommandCheckAllOf(checks ...CommandCheck) CommandCheck

func CommandCheckAnyOf

func CommandCheckAnyOf(checks ...CommandCheck) CommandCheck

func (CommandCheck) And

func (c CommandCheck) And(check CommandCheck) CommandCheck

func (CommandCheck) Or

type CommandMap

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

func NewCommandMap

func NewCommandMap(bot *Bot) *CommandMap

func (*CommandMap) AddAll

func (m *CommandMap) AddAll(c []Command)

func (*CommandMap) OnEvent

func (m *CommandMap) OnEvent(event bot.Event)

type CommandsModule

type CommandsModule interface {
	Commands() []Command
}

type ComponentHandler

type ComponentHandler func(b *Bot, p *message.Printer, e *events.ComponentInteractionEvent) error

type Config

type Config struct {
	config.Config
	Bot                  BotConfig      `json:"kbot"`
	PlayHistoryCacheSize int            `json:"play_history_cache_size"`
	Lavalink             LavalinkConfig `json:"lavalink"`
	MetricsAddress       string         `json:"metrics_address"`
}

type DefaultCommandsModule

type DefaultCommandsModule struct {
	Cmds []Command
}

func (DefaultCommandsModule) Commands

func (m DefaultCommandsModule) Commands() []Command

type LavalinkConfig

type LavalinkConfig struct {
	Nodes           []lavalink.NodeConfig `json:"nodes"`
	ResumingTimeout int                   `json:"resuming_timeout"`
}

type ListenerModule

type ListenerModule interface {
	OnEvent(b *Bot, event bot.Event)
}

type Listeners

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

func NewListeners

func NewListeners(b *Bot) *Listeners

func (*Listeners) AddListener

func (l *Listeners) AddListener(listener ListenerModule)

func (*Listeners) OnEvent

func (l *Listeners) OnEvent(event bot.Event)

type LoopingType

type LoopingType int
const (
	LoopingTypeOff LoopingType = iota
	LoopingTypeRepeatSong
	LoopingTypeRepeatQueue
)

func (LoopingType) String

func (t LoopingType) String() string

type Module

type Module interface{}

type MusicHistory

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

func NewHistory

func NewHistory() *MusicHistory

func (*MusicHistory) Last

func (h *MusicHistory) Last() lavalink.AudioTrack

func (*MusicHistory) Len

func (h *MusicHistory) Len() int

func (*MusicHistory) Push

func (h *MusicHistory) Push(tracks ...lavalink.AudioTrack)

func (*MusicHistory) Tracks

func (h *MusicHistory) Tracks() []lavalink.AudioTrack

type MusicPlayer

type MusicPlayer struct {
	lavalink.Player
	Bot               *Bot
	Type              PlayerType
	Queue             *MusicQueue
	History           *MusicHistory
	SkipVotes         map[snowflake.Snowflake]struct{}
	DisconnectContext context.Context
	DisconnectCancel  context.CancelFunc
}

func (*MusicPlayer) CancelDisconnect

func (p *MusicPlayer) CancelDisconnect()

func (*MusicPlayer) OnPlayerPause

func (p *MusicPlayer) OnPlayerPause(player lavalink.Player)

func (*MusicPlayer) OnPlayerResume

func (p *MusicPlayer) OnPlayerResume(player lavalink.Player)

func (*MusicPlayer) OnPlayerUpdate

func (p *MusicPlayer) OnPlayerUpdate(player lavalink.Player, state lavalink.PlayerState)

func (*MusicPlayer) OnTrackEnd

func (p *MusicPlayer) OnTrackEnd(player lavalink.Player, track lavalink.AudioTrack, endReason lavalink.AudioTrackEndReason)

func (*MusicPlayer) OnTrackException

func (p *MusicPlayer) OnTrackException(player lavalink.Player, track lavalink.AudioTrack, exception lavalink.FriendlyException)

func (*MusicPlayer) OnTrackStart

func (p *MusicPlayer) OnTrackStart(player lavalink.Player, track lavalink.AudioTrack)

func (*MusicPlayer) OnTrackStuck

func (p *MusicPlayer) OnTrackStuck(player lavalink.Player, track lavalink.AudioTrack, thresholdMs lavalink.Duration)

func (*MusicPlayer) OnWebSocketClosed

func (p *MusicPlayer) OnWebSocketClosed(player lavalink.Player, code int, reason string, byRemote bool)

func (*MusicPlayer) PlanDisconnect

func (p *MusicPlayer) PlanDisconnect()

type MusicPlayerMap

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

func NewMusicPlayerMap

func NewMusicPlayerMap(bot *Bot) *MusicPlayerMap

func (*MusicPlayerMap) Add

func (b *MusicPlayerMap) Add(player *MusicPlayer)

func (*MusicPlayerMap) All

func (b *MusicPlayerMap) All() []*MusicPlayer

func (*MusicPlayerMap) Delete

func (b *MusicPlayerMap) Delete(guildID snowflake.Snowflake)

func (*MusicPlayerMap) Get

func (b *MusicPlayerMap) Get(guildID snowflake.Snowflake) *MusicPlayer

func (*MusicPlayerMap) Has

func (b *MusicPlayerMap) Has(guildID snowflake.Snowflake) bool

func (*MusicPlayerMap) Len

func (b *MusicPlayerMap) Len() int

func (*MusicPlayerMap) New

func (b *MusicPlayerMap) New(guildID snowflake.Snowflake, playerType PlayerType, loopingType LoopingType) *MusicPlayer

type MusicQueue

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

func NewMusicQueue

func NewMusicQueue(queueType LoopingType) *MusicQueue

func (*MusicQueue) Clear

func (q *MusicQueue) Clear()

func (*MusicQueue) Get

func (q *MusicQueue) Get(index int) lavalink.AudioTrack

func (*MusicQueue) Len

func (q *MusicQueue) Len() int

func (*MusicQueue) LoopingType

func (q *MusicQueue) LoopingType() LoopingType

func (*MusicQueue) Pop

func (q *MusicQueue) Pop() lavalink.AudioTrack

func (*MusicQueue) Push

func (q *MusicQueue) Push(tracks ...lavalink.AudioTrack)

func (*MusicQueue) Remove

func (q *MusicQueue) Remove(index ...int)

func (*MusicQueue) SetType

func (q *MusicQueue) SetType(loopingType LoopingType)

func (*MusicQueue) Shuffle

func (q *MusicQueue) Shuffle()

func (*MusicQueue) Tracks

func (q *MusicQueue) Tracks() []lavalink.AudioTrack

type PlayerType

type PlayerType int
const (
	PlayerTypeMusic PlayerType = iota
	PlayerTypeRadio
)

Jump to

Keyboard shortcuts

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