kbot

package
v0.1.0 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