This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
PermissionGacha/gacha.go

90 lines
2.0 KiB
Go

package main
import (
"crypto/rand"
"fmt"
"github.com/bwmarrin/discordgo"
"PermissionGacha/db"
)
const (
viewAuditLogRole = "645856347258093568"
manageWebhookRole = "645856081750523914"
changeNicknameRole = "645977231281356800"
embedLinkRole = "645977361254318080"
voiceActivityRole = "645977361254318080"
)
func checkForGachaEligibility(dg *discordgo.Session, discordID, intendedLevel string) {
member, err := dg.GuildMember(guildID, discordID)
if err != nil {
logError(dg, "checkForGachaEligibility", "getGuildMember", discordID)
return
}
found := false
for _, v := range member.Roles {
if v == intendedLevel {
found = true
break
}
}
if found {
return
}
if intendedLevel != rolesFromLevel[0] {
rollGacha(dg, member)
}
err = dg.GuildMemberRoleAdd(guildID, discordID, intendedLevel)
if err != nil {
logError(dg, "checkForGachaEligibility", "guildMemberRoleAdd", err)
}
}
func rollGacha(dg *discordgo.Session, member *discordgo.Member) {
lookUpAndGive := func(friendlyName, role string) {
found := false
for _, v := range member.Roles {
if v == role {
found = true
break
}
}
channel, err := dg.UserChannelCreate(member.User.ID)
if found {
db.RewardShard(member.User.ID, 1)
if err == nil {
dg.ChannelMessageSend(
channel.ID,
fmt.Sprintf(
"**GACHA > ** You got __%s__! However, it was a duplicate so you got a shard instead.", friendlyName,
),
)
}
} else {
dg.GuildMemberRoleAdd(guildID, member.User.ID, role)
dg.ChannelMessageSend(
channel.ID,
fmt.Sprintf("**GACHA > ** You got __%s__!", friendlyName),
)
}
}
gachaRandomness := make([]byte, 1)
rand.Read(gachaRandomness)
switch gachaRandomness[0] % 5 {
case 0:
lookUpAndGive("View Audit Log", viewAuditLogRole)
case 1:
lookUpAndGive("Manage Webhook", manageWebhookRole)
case 2:
lookUpAndGive("Change Nickname", changeNicknameRole)
case 3:
lookUpAndGive("Embed Link", embedLinkRole)
case 4:
lookUpAndGive("Use Voice Activity", voiceActivityRole)
}
}