continued porting to disgo...

This commit is contained in:
2024-04-09 23:21:08 +02:00
parent 01ac1ec363
commit b7f126efba
10 changed files with 284 additions and 379 deletions

View File

@@ -1,17 +1,12 @@
package main
/*
import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/bwmarrin/discordgo"
"github.com/disgoorg/disgo/discord"
"github.com/disgoorg/disgo/events"
"github.com/sirupsen/logrus"
)
@@ -25,128 +20,98 @@ type AvatarDecoration struct {
URL string
}
var userFlagsString map[discordgo.UserFlags]string = map[discordgo.UserFlags]string{
discordgo.UserFlagDiscordEmployee: "<:Discord_Employee:1224708831419043942>[`Discord Employee`](https://discord.com/company)",
discordgo.UserFlagDiscordPartner: "<:Discord_Partner:1224708689190060092>[`Discord Partner`](https://discord.com/partners)",
discordgo.UserFlagHypeSquadEvents: "<:Hypesquad_Events:1224708685494747237>[`HypeSquad Events`](https://discord.com/hypesquad)",
discordgo.UserFlagBugHunterLevel1: "<:Bug_Hunter_Level_1:1224708828415918231>[`Bug Hunter Level 1`](https://support.discord.com/hc/en-us/articles/360046057772-Discord-Bugs)",
discordgo.UserFlagHouseBravery: "<:Hypesquad_Bravery:1224708678905630801>[`HypeSquad Bravery`](https://discord.com/settings/hypesquad-online)",
discordgo.UserFlagHouseBrilliance: "<:Hypesquad_Brilliance:1224708677584424961>[`HypeSquad Brilliance`](https://discord.com/settings/hypesquad-online)",
discordgo.UserFlagHouseBalance: "<:Hypequad_Balance:1224708826901516309>[`HypeSquad Balance`](https://discord.com/settings/hypesquad-online)",
discordgo.UserFlagEarlySupporter: "<:Early_Supporter:1224708674065272873>[`Early Supporter`](https://discord.com/settings/premium)",
discordgo.UserFlagTeamUser: "`TeamUser`",
discordgo.UserFlagSystem: "",
discordgo.UserFlagBugHunterLevel2: "<:Bug_Hunter_Level_2:1224708682378383461>[`Bug Hunter Level 2`](https://support.discord.com/hc/en-us/articles/360046057772-Discord-Bugs)",
discordgo.UserFlagVerifiedBot: "",
discordgo.UserFlagVerifiedBotDeveloper: "<:Early_Verified_Bot_Developer:1224708675294203934>`Early Verified Bot Developer`",
discordgo.UserFlagDiscordCertifiedModerator: "<:Discord_Certified_Moderator:1224708830223532124>[`Discord Certified Moderator`](https://discord.com/safety)",
1 << 19: "`BotHTTPInteractions`",
1 << 22: "<:Active_Developer:1224708676611215380>[`Active Developer`](https://support-dev.discord.com/hc/en-us/articles/10113997751447?ref=badge)",
var userFlagsString map[discord.UserFlags]string = map[discord.UserFlags]string{
discord.UserFlagDiscordEmployee: "<:Discord_Employee:1224708831419043942>[`Discord Employee`](https://discord.com/company)",
discord.UserFlagPartneredServerOwner: "<:Discord_Partner:1224708689190060092>[`Discord Partner`](https://discord.com/partners)",
discord.UserFlagHypeSquadEvents: "<:Hypesquad_Events:1224708685494747237>[`HypeSquad Events`](https://discord.com/hypesquad)",
discord.UserFlagBugHunterLevel1: "<:Bug_Hunter_Level_1:1224708828415918231>[`Bug Hunter Level 1`](https://support.discord.com/hc/en-us/articles/360046057772-Discord-Bugs)",
discord.UserFlagHouseBravery: "<:Hypesquad_Bravery:1224708678905630801>[`HypeSquad Bravery`](https://discord.com/settings/hypesquad-online)",
discord.UserFlagHouseBrilliance: "<:Hypesquad_Brilliance:1224708677584424961>[`HypeSquad Brilliance`](https://discord.com/settings/hypesquad-online)",
discord.UserFlagHouseBalance: "<:Hypequad_Balance:1224708826901516309>[`HypeSquad Balance`](https://discord.com/settings/hypesquad-online)",
discord.UserFlagEarlySupporter: "<:Early_Supporter:1224708674065272873>[`Early Supporter`](https://discord.com/settings/premium)",
discord.UserFlagTeamUser: "`TeamUser`",
discord.UserFlagBugHunterLevel2: "<:Bug_Hunter_Level_2:1224708682378383461>[`Bug Hunter Level 2`](https://support.discord.com/hc/en-us/articles/360046057772-Discord-Bugs)",
discord.UserFlagVerifiedBot: "",
discord.UserFlagEarlyVerifiedBotDeveloper: "<:Early_Verified_Bot_Developer:1224708675294203934>`Early Verified Bot Developer`",
discord.UserFlagDiscordCertifiedModerator: "<:Discord_Certified_Moderator:1224708830223532124>[`Discord Certified Moderator`](https://discord.com/safety)",
discord.UserFlagBotHTTPInteractions: "`BotHTTPInteractions`",
discord.UserFlagActiveDeveloper: "<:Active_Developer:1224708676611215380>[`Active Developer`](https://support-dev.discord.com/hc/en-us/articles/10113997751447?ref=badge)",
}
var cmd_userinfo Command = Command{
Definition: discordgo.ApplicationCommand{
Definition: discord.SlashCommandCreate{
Name: "info",
Description: "Gives you information about a user or this bot.",
Options: []*discordgo.ApplicationCommandOption{
{
Type: discordgo.ApplicationCommandOptionSubCommand,
Options: []discord.ApplicationCommandOption{
&discord.ApplicationCommandOptionSubCommand{
Name: "user",
Description: "Gives you information about a user and its profile images.",
Options: []*discordgo.ApplicationCommandOption{
{
Type: discordgo.ApplicationCommandOptionUser,
Options: []discord.ApplicationCommandOption{
&discord.ApplicationCommandOptionUser{
Name: "user",
Description: "The user you need information about.",
Required: true,
},
},
},
{
Type: discordgo.ApplicationCommandOptionSubCommand,
&discord.ApplicationCommandOptionSubCommand{
Name: "bot-service",
Description: "Gives you information about this bot's server service.",
},
},
},
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
switch i.ApplicationCommandData().Options[0].Name {
Interact: func(e *events.ApplicationCommandInteractionCreate) {
switch *e.SlashCommandInteractionData().SubCommandName {
case "user":
var user *discordgo.User = i.ApplicationCommandData().Options[0].Options[0].UserValue(s)
var extendedUser UserExtend = extendedUserFromAPI(user.ID)
var userHasFlags string = fetchFlagStrings(user, extendedUser.AvatarDecorationData.Asset)
var user discord.User = e.SlashCommandInteractionData().User("user")
var userHasFlags string = fetchFlagStrings(user)
var userType string = "User"
if user.Bot {
userType = "Unverified Bot"
if user.PublicFlags&discordgo.UserFlagVerifiedBot != 0 {
if user.PublicFlags&discord.UserFlagVerifiedBot != 0 {
userType = "Verified Bot"
}
} else if user.System {
userType = "System"
}
createdate, err := discordgo.SnowflakeTimestamp(user.ID)
if err != nil {
logrus.Error(err)
}
err = respondEmbed(i.Interaction, discordgo.MessageEmbed{
Title: extendedUser.GlobalName + " user info",
Thumbnail: &discordgo.MessageEmbedThumbnail{URL: user.AvatarURL("512")},
Description: user.Mention(),
Type: discordgo.EmbedTypeArticle,
Fields: []*discordgo.MessageEmbedField{
{
Name: "test",
Value: fmt.Sprint(s.State.Application.BotPublic),
},
{
Name: "ID",
Value: user.ID,
},
{
Name: "Type",
Value: userType,
Inline: true,
},
{
Name: "Global name",
Value: extendedUser.GlobalName,
Inline: true,
},
{
Name: "Username",
Value: user.Username,
Inline: true,
},
{
Name: "Badges",
Value: userHasFlags,
},
{
Name: "Discriminator",
Value: user.Discriminator,
Inline: true,
},
{
Name: "Accent color",
Value: "#" + decimalToHex(user.AccentColor),
Inline: true,
},
{
Name: "Avatar Decoration",
Value: "[PNG (animated)](" + extendedUser.AvatarDecorationData.URL + ")\n[PNG](" + extendedUser.AvatarDecorationData.URL + "?size=4096&passthrough=false)\nSKU ID: `" + extendedUser.AvatarDecorationData.SkuID + "`",
Inline: true,
},
{
Name: "Created at",
Value: "<:discord_member:1224717530078253166> <t:" + fmt.Sprint(createdate.Unix()) + ":f> - <t:" + fmt.Sprint(createdate.Unix()) + ":R>",
},
},
Color: hexToDecimal(color["primary"]),
Image: &discordgo.MessageEmbedImage{URL: user.BannerURL("512")},
}, false)
embedBuilder := discord.NewEmbedBuilder()
embedBuilder.SetThumbnail(checkDefaultPb(user))
embedBuilder.AddField("ID", user.ID.String(), false)
embedBuilder.AddField("Type", userType, true)
if user.GlobalName != nil {
embedBuilder.AddField("Global name", *user.GlobalName, true)
}
embedBuilder.AddField("Username", user.Username, true)
if userHasFlags != "" {
embedBuilder.AddField("Badges", userHasFlags, false)
}
if user.Discriminator != "0" {
embedBuilder.AddField("Discriminator", user.Discriminator, false)
}
if user.AccentColor != nil {
embedBuilder.AddField("Accent color", strconv.Itoa(*user.AccentColor), true)
}
if user.AvatarDecorationURL() != nil {
decoration := strings.TrimSuffix(*user.AvatarDecorationURL(), ".gif")
value := fmt.Sprintf("[PNG (animated)](%s)\n[PNG](%s)", decoration, decoration+"?passthrough=false")
embedBuilder.AddField("Avatar decoration", value, true)
}
creation := "<:discord_member:1224717530078253166> " + discord.TimestampStyleLongDateTime.FormatTime(user.CreatedAt()) + "-" + discord.TimestampStyleRelative.FormatTime(user.CreatedAt())
embedBuilder.AddField("Created at", creation, false)
if user.BannerURL() != nil {
embedBuilder.SetImage(*user.BannerURL())
}
embedBuilder.SetTitle("User info")
embedBuilder.SetDescription(user.Mention())
embedBuilder.SetColor(hexToDecimal(color["primary"]))
embedBuilder.SetFooterText("Currently a bit broken because of Discord's constant user API changes")
err := e.CreateMessage(discord.NewMessageCreateBuilder().
SetEmbeds(embedBuilder.Build()).
Build())
if err != nil {
logrus.Error(err)
}
case "bot-service":
}
@@ -155,82 +120,37 @@ var cmd_userinfo Command = Command{
AllowDM: true,
}
func fetchFlagStrings(user *discordgo.User, decorationAsset string) string {
func checkDefaultPb(user discord.User) string {
if user.AvatarURL() == nil {
return "https://discord.com/assets/ac6f8cf36394c66e7651.png"
}
return *user.AvatarURL()
}
func fetchFlagStrings(user discord.User) string {
var userHasFlagsString string
for flag, flagName := range userFlagsString {
if user.PublicFlags&flag != 0 {
if flag&user.PublicFlags != 0 {
userHasFlagsString += flagName + ", "
}
}
if user.PremiumType > 0 {
userHasFlagsString += "<:Nitro:1224708672492666943>[`Nitro`](https://discord.com/settings/premium), "
}
if decorationAsset == "a_5e1210779d99ece1c0b4f438a5bc6e72" {
if noNullString(user.AvatarDecorationData.Asset) == "a_5e1210779d99ece1c0b4f438a5bc6e72" {
userHasFlagsString += "<:Limited_Lootbox_Clown:1224714172705804300>[`Lootbox Clown`](https://discord.com/settings/Lootboxes)"
}
if user.Bot {
appuser := bot.State.Application
if appuser.Flags&1<<23 != 0 {
userHasFlagsString += "<:Supports_Commands:1224848976201646100>[`Supports Commands`](https://discord.com/blog/welcome-to-the-new-era-of-discord-apps?ref=badge)"
}
if appuser.Flags&1<<6 != 0 {
userHasFlagsString += "<:Uses_Automod:1224862880982106202>`Uses Automod`"
}
}
/*
if user.PremiumType > 0 {
userHasFlagsString += "<:Nitro:1224708672492666943>[`Nitro`](https://discord.com/settings/premium), "
}
if user.Bot {
appuser := bot.State.Application
if appuser.Flags&1<<23 != 0 {
userHasFlagsString += "<:Supports_Commands:1224848976201646100>[`Supports Commands`](https://discord.com/blog/welcome-to-the-new-era-of-discord-apps?ref=badge)"
}
if appuser.Flags&1<<6 != 0 {
userHasFlagsString += "<:Uses_Automod:1224862880982106202>`Uses Automod`"
}
}
*/
returnString := strings.TrimSuffix(userHasFlagsString, ", ")
return returnString
}
func extendedUserFromAPI(userID string) UserExtend {
client := &http.Client{}
var userExtend UserExtend
req, err := http.NewRequest("GET", "https://discord.com/api/v10/users/"+userID, nil)
if err != nil {
logrus.Error(err)
return userExtend
}
req.Header.Add("Authorization", "Bot "+os.Getenv("BOT_TOKEN"))
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
logrus.Error(err)
return userExtend
}
defer res.Body.Close()
if res.StatusCode == http.StatusTooManyRequests {
retryAfter := parseRetryAfterHeader(res.Header)
if retryAfter > 0 {
time.Sleep(retryAfter)
}
}
body, err := io.ReadAll(res.Body)
if err != nil {
logrus.Error(err)
return userExtend
}
json.Unmarshal(body, &userExtend)
if userExtend.AvatarDecorationData.Asset != "" {
userExtend.AvatarDecorationData.URL = "https://cdn.discordapp.com/avatar-decoration-presets/" + userExtend.AvatarDecorationData.Asset + ".png"
}
return userExtend
}
func parseRetryAfterHeader(headers http.Header) time.Duration {
retryAfterStr := headers.Get("Retry-After")
if retryAfterStr == "" {
return 0
}
retryAfter, err := strconv.Atoi(retryAfterStr)
if err != nil {
return 0
}
return time.Duration(retryAfter) * time.Millisecond
}
*/