Join Gate (account age, avatar, advertising and username filters, bot checks), raid detection with invite pausing, anti-nuke quarantine of admins who mass delete, manual and automatic lockdowns, a decaying heat score against spam, role and channel snapshots with restore, and alert DMs to the owner and trusted users. Everything that weakens protection is limited to the owner and the trusted list. Co-Authored-By: Claude Opus 5.5 <[email protected]>
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
package commands
|
|
|
|
import (
|
|
"strings"
|
|
"velox-bot/internal/commands/config"
|
|
"velox-bot/internal/commands/fun"
|
|
"velox-bot/internal/commands/help"
|
|
cmdlevel "velox-bot/internal/commands/level"
|
|
"velox-bot/internal/commands/meeting"
|
|
"velox-bot/internal/commands/moderation"
|
|
cmdmusic "velox-bot/internal/commands/music"
|
|
"velox-bot/internal/commands/projects"
|
|
"velox-bot/internal/commands/schedule"
|
|
cmdtickets "velox-bot/internal/commands/tickets"
|
|
cmdsecurity "velox-bot/internal/commands/security"
|
|
"velox-bot/internal/commands/timezone"
|
|
"velox-bot/internal/music"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
)
|
|
|
|
var AllCommands = []*discordgo.ApplicationCommand{
|
|
fun.Ping,
|
|
fun.Joke,
|
|
fun.Coinflip,
|
|
fun.Dice,
|
|
fun.Rps,
|
|
fun.RpsStats,
|
|
fun.RpsLeaderboard,
|
|
help.Help,
|
|
cmdlevel.Slvl,
|
|
cmdlevel.Rank,
|
|
cmdlevel.Leaderboard,
|
|
cmdlevel.Rewards,
|
|
cmdmusic.Play,
|
|
cmdmusic.Queue,
|
|
cmdmusic.Volume,
|
|
cmdmusic.Music,
|
|
meeting.Meeting,
|
|
moderation.Moderation,
|
|
timezone.Timezone,
|
|
schedule.Schedule,
|
|
projects.Projects,
|
|
config.Config,
|
|
cmdtickets.Tickets,
|
|
cmdtickets.Ticket,
|
|
cmdsecurity.Security,
|
|
cmdsecurity.Lockdown,
|
|
cmdsecurity.Unlock,
|
|
}
|
|
|
|
var handlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){
|
|
"ping": fun.PingHandler,
|
|
"joke": fun.JokeHandler,
|
|
"coinflip": fun.CoinflipHandler,
|
|
"dice": fun.DiceHandler,
|
|
"rps": fun.RpsHandler,
|
|
"rpsstats": fun.RpsStatsHandler,
|
|
"rpsleaderboard": fun.RpsLeaderboardHandler,
|
|
"help": help.HelpHandler,
|
|
"slvl": cmdlevel.SlvlHandler,
|
|
"rank": cmdlevel.RankHandler,
|
|
"leaderboard": cmdlevel.LeaderboardHandler,
|
|
"rewards": cmdlevel.RewardsHandler,
|
|
"meeting": meeting.MeetingHandler,
|
|
"moderation": moderation.ModerationHandler,
|
|
"timezone": timezone.TimezoneHandler,
|
|
"schedule": schedule.ScheduleHandler,
|
|
"projects": projects.ProjectsHandler,
|
|
"play": cmdmusic.PlayHandler,
|
|
"queue": cmdmusic.QueueHandler,
|
|
"volume": cmdmusic.VolumeHandler,
|
|
"music": cmdmusic.MusicHandler,
|
|
"config": config.ConfigHandler,
|
|
"tickets": cmdtickets.TicketsHandler,
|
|
"ticket": cmdtickets.TicketHandler,
|
|
"security": cmdsecurity.SecurityHandler,
|
|
"lockdown": cmdsecurity.LockdownHandler,
|
|
"unlock": cmdsecurity.UnlockHandler,
|
|
}
|
|
|
|
func HandleInteraction(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
|
switch i.Type {
|
|
case discordgo.InteractionApplicationCommand:
|
|
if h, ok := handlers[i.ApplicationCommandData().Name]; ok {
|
|
h(s, i)
|
|
}
|
|
case discordgo.InteractionMessageComponent:
|
|
data := i.MessageComponentData()
|
|
switch {
|
|
case strings.HasPrefix(data.CustomID, "music:"):
|
|
music.HandleComponent(s, i)
|
|
case strings.HasPrefix(data.CustomID, "schedule:"):
|
|
schedule.HandleComponent(s, i)
|
|
case strings.HasPrefix(data.CustomID, "projects:"):
|
|
projects.HandleComponent(s, i)
|
|
case strings.HasPrefix(data.CustomID, "tickets:"):
|
|
cmdtickets.HandleComponent(s, i)
|
|
case strings.HasPrefix(data.CustomID, "security:"):
|
|
cmdsecurity.HandleComponent(s, i)
|
|
}
|
|
case discordgo.InteractionModalSubmit:
|
|
data := i.ModalSubmitData()
|
|
switch {
|
|
case strings.HasPrefix(data.CustomID, "schedule:"):
|
|
schedule.HandleModalSubmit(s, i)
|
|
case strings.HasPrefix(data.CustomID, "projects:"):
|
|
projects.HandleModalSubmit(s, i)
|
|
case strings.HasPrefix(data.CustomID, "tickets:"):
|
|
cmdtickets.HandleModalSubmit(s, i)
|
|
}
|
|
}
|
|
|
|
}
|