Impl individual reset

This commit is contained in:
Joren 2024-07-18 14:12:21 +02:00
parent bc6dc28b0a
commit afca685481
Signed by: Joren
GPG Key ID: 280E33DFBC0F1B55

119
main.go
View File

@ -144,6 +144,28 @@ var (
}, },
}, },
}, },
{
Name: "reset",
Description: "Reset a user's HWID by username or UID",
Options: []*discordgo.ApplicationCommandOption{
{
Type: discordgo.ApplicationCommandOptionString,
Name: "identifier",
Description: "Username or UID",
Required: true,
},
{
Type: discordgo.ApplicationCommandOptionString,
Name: "cheat_type",
Description: "Type of cheat (mesa or vanity)",
Required: true,
Choices: []*discordgo.ApplicationCommandOptionChoice{
{Name: "mesa", Value: "mesa"},
{Name: "vanity", Value: "vanity"},
},
},
},
},
} }
commandsHandlers = map[string]func(client *discordgo.Session, i *discordgo.InteractionCreate){ commandsHandlers = map[string]func(client *discordgo.Session, i *discordgo.InteractionCreate){
"setup": func(client *discordgo.Session, i *discordgo.InteractionCreate) { "setup": func(client *discordgo.Session, i *discordgo.InteractionCreate) {
@ -209,6 +231,101 @@ var (
log.Println("Error sending interaction response:", err) log.Println("Error sending interaction response:", err)
} }
}, },
"reset": func(client *discordgo.Session, i *discordgo.InteractionCreate) {
hasAdminPermission := false
for _, roleID := range config.Discord.AdminRoles {
member, err := client.GuildMember(i.GuildID, i.Member.User.ID)
if err != nil {
log.Println("Error fetching member info:", err)
return
}
for _, role := range member.Roles {
if role == roleID {
hasAdminPermission = true
break
}
}
if hasAdminPermission {
break
}
}
if !hasAdminPermission {
err := client.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "You do not have permission to run this command.",
Flags: discordgo.MessageFlagsEphemeral,
},
})
if err != nil {
log.Println("Error sending interaction response:", err)
}
return
}
identifier := i.ApplicationCommandData().Options[0].StringValue()
cheatType := i.ApplicationCommandData().Options[1].StringValue()
var userName string
var userUID int
if uid, err := strconv.Atoi(identifier); err == nil {
userUID = uid
} else {
userName = identifier
}
var tableName string
var baseURL string
var err error
if userName != "" {
_, baseURL = getTableNameAndBaseURL(cheatType)
userUID, err = fetchUserID(userName, baseURL)
if err != nil {
log.Println("Error fetching user ID:", err)
err = client.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Error fetching user ID.",
Flags: discordgo.MessageFlagsEphemeral,
},
})
if err != nil {
log.Println("Error sending interaction response:", err)
}
return
}
}
tableName, _ = getTableNameAndBaseURL(cheatType)
success, err := resetAndVerify(tableName, userUID)
if err != nil || !success {
log.Println("Error resetting user:", err)
err = client.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Error resetting user.",
Flags: discordgo.MessageFlagsEphemeral,
},
})
if err != nil {
log.Println("Error sending interaction response:", err)
}
return
}
err = client.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: fmt.Sprintf("Successfully reset %s's HWID.", identifier),
Flags: discordgo.MessageFlagsEphemeral,
},
})
if err != nil {
log.Println("Error sending interaction response:", err)
}
},
} }
componentsHandlers = map[string]func(client *discordgo.Session, i *discordgo.InteractionCreate){ componentsHandlers = map[string]func(client *discordgo.Session, i *discordgo.InteractionCreate){
@ -555,7 +672,7 @@ func resetAndVerify(tableName string, uid int) (bool, error) {
return false, fmt.Errorf("error querying database after reset: %v", err) return false, fmt.Errorf("error querying database after reset: %v", err)
} }
return beforeHash != afterHash, nil return beforeHash != afterHash || afterHash == "d41d8cd98f00b204e9800998ecf8427e", nil
} }
func main() { func main() {