arikawa/_example/advanced_bot/debug.go

64 lines
1.6 KiB
Go

package main
import (
"fmt"
"log"
"runtime"
"strings"
"github.com/diamondburned/arikawa/v3/bot"
"github.com/diamondburned/arikawa/v3/bot/extras/middlewares"
"github.com/diamondburned/arikawa/v3/gateway"
)
// Flag for administrators only.
type Debug struct {
Context *bot.Context
}
// Setup demonstrates the CanSetup interface. This function will never be parsed
// as a callback of any event.
func (d *Debug) Setup(sub *bot.Subcommand) {
// Set a custom command (e.g. "!go ..."):
sub.Command = "go"
// Set a custom description:
sub.Description = "Print Go debugging variables"
// Manually set the usage for each function.
// Those methods can take in a regular Go method reference.
sub.ChangeCommandInfo(d.GOOS, "GOOS", "Prints the current operating system")
sub.ChangeCommandInfo(d.GC, "GC", "Triggers the garbage collector")
// They could also take in the raw name.
sub.ChangeCommandInfo("Goroutines", "", "Prints the current number of Goroutines")
sub.Hide(d.Die)
sub.AddMiddleware(d.Die, middlewares.AdminOnly(d.Context))
}
// ~go goroutines
func (d *Debug) Goroutines(*gateway.MessageCreateEvent) (string, error) {
return fmt.Sprintf(
"goroutines: %d",
runtime.NumGoroutine(),
), nil
}
// ~go GOOS
func (d *Debug) GOOS(*gateway.MessageCreateEvent) (string, error) {
return strings.Title(runtime.GOOS), nil
}
// ~go GC
func (d *Debug) GC(*gateway.MessageCreateEvent) (string, error) {
runtime.GC()
return "Done.", nil
}
// ~go die
// This command will be hidden from ~help by default.
func (d *Debug) Die(m *gateway.MessageCreateEvent) error {
log.Fatalln("User", m.Author.Username, "killed the bot x_x")
return nil
}