fix: xd
This commit is contained in:
parent
752c72a81a
commit
805cf9024b
4 changed files with 44 additions and 42 deletions
8
db/db.go
8
db/db.go
|
|
@ -118,11 +118,11 @@ func (db *DB) ListWords() ([]DictEntry, error) {
|
||||||
return entries, nil
|
return entries, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) IncrementXD(userID string) error {
|
func (db *DB) IncrementXD(userID string, count int) error {
|
||||||
_, err := db.Exec(
|
_, err := db.Exec(
|
||||||
`INSERT INTO xd_counts (user_id, count) VALUES (?, 1)
|
`INSERT INTO xd_counts (user_id, count) VALUES (?, ?)
|
||||||
ON CONFLICT(user_id) DO UPDATE SET count = count + 1`,
|
ON CONFLICT(user_id) DO UPDATE SET count = count + ?`,
|
||||||
userID,
|
userID, count, count,
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -158,15 +158,23 @@ func (s *Starboard) HandleReactionRemove(e *events.GuildMessageReactionRemove) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Starboard) buildStarboardMessage(msg *discord.Message, channelID, guildID, messageID snowflake.ID) (content string, embeds []discord.Embed, files []*discord.File) {
|
func (s *Starboard) buildStarboardMessage(msg *discord.Message, channelID, guildID, messageID snowflake.ID) (content string, embeds []discord.Embed, files []*discord.File) {
|
||||||
content = msg.Content
|
jumpURL := fmt.Sprintf("https://discord.com/channels/%s/%s/%s", guildID, channelID, messageID)
|
||||||
if content == "" {
|
content = jumpURL
|
||||||
content = "*(no text content)*"
|
|
||||||
}
|
embed := discord.Embed{
|
||||||
if len(content) > 2000 {
|
Author: &discord.EmbedAuthor{
|
||||||
content = content[:1997] + "..."
|
Name: msg.Author.EffectiveName(),
|
||||||
|
IconURL: msg.Author.EffectiveAvatarURL(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
jumpURL := fmt.Sprintf("https://discord.com/channels/%s/%s/%s", guildID, channelID, messageID)
|
if msg.Content != "" {
|
||||||
|
desc := msg.Content
|
||||||
|
if len(desc) > 4096 {
|
||||||
|
desc = desc[:4093] + "..."
|
||||||
|
}
|
||||||
|
embed.Description = desc
|
||||||
|
}
|
||||||
|
|
||||||
for _, a := range msg.Attachments {
|
for _, a := range msg.Attachments {
|
||||||
resp, err := http.Get(a.URL)
|
resp, err := http.Get(a.URL)
|
||||||
|
|
@ -196,12 +204,14 @@ func (s *Starboard) buildStarboardMessage(msg *discord.Message, channelID, guild
|
||||||
}
|
}
|
||||||
parts = append(parts, fmt.Sprintf("%s %d", e, r.Count))
|
parts = append(parts, fmt.Sprintf("%s %d", e, r.Count))
|
||||||
}
|
}
|
||||||
parts = append(parts, fmt.Sprintf("\n[[ jump to message ]](%s)", jumpURL))
|
embed.Fields = append(embed.Fields, discord.EmbedField{
|
||||||
embeds = append(embeds, discord.Embed{
|
Name: "Reactions",
|
||||||
Description: strings.Join(parts, " "),
|
Value: strings.Join(parts, " | "),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
embeds = append(embeds, embed)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,11 +46,12 @@ func (x *XDTracker) HandleMessage(e *events.MessageCreate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
content := strings.ToLower(e.Message.Content)
|
content := strings.ToLower(e.Message.Content)
|
||||||
if !strings.Contains(content, "xd") {
|
count := strings.Count(content, "xd")
|
||||||
|
if count == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := x.db.IncrementXD(e.Message.Author.ID.String()); err != nil {
|
if err := x.db.IncrementXD(e.Message.Author.ID.String(), count); err != nil {
|
||||||
slog.Error("failed to increment xd count", slog.Any("err", err))
|
slog.Error("failed to increment xd count", slog.Any("err", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -94,24 +95,19 @@ func (x *XDTracker) HandleLeaderboard(e *events.ApplicationCommandInteractionCre
|
||||||
total = 0
|
total = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
var sb strings.Builder
|
userCount, err := x.db.GetXDUserCount()
|
||||||
sb.WriteString("**XD Leaderboard**\n\n")
|
if err != nil {
|
||||||
for i, entry := range entries {
|
userCount = 0
|
||||||
medal := ""
|
|
||||||
switch i {
|
|
||||||
case 0:
|
|
||||||
medal = "🥇"
|
|
||||||
case 1:
|
|
||||||
medal = "🥈"
|
|
||||||
case 2:
|
|
||||||
medal = "🥉"
|
|
||||||
}
|
|
||||||
sb.WriteString(fmt.Sprintf("%s <@%s> — **%d** xd\n", medal, entry.UserID, entry.Count))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.WriteString(fmt.Sprintf("\n**%d** total xds tracked", total))
|
var sb strings.Builder
|
||||||
|
for i, entry := range entries {
|
||||||
|
sb.WriteString(fmt.Sprintf("%d. <@%s> - **%d** xd\n", i+1, entry.UserID, entry.Count))
|
||||||
|
}
|
||||||
|
|
||||||
e.CreateMessage(discord.NewMessageCreate().WithContent(sb.String()))
|
sb.WriteString(fmt.Sprintf("\nTotal: **%d** xd across **%d** users", total, userCount))
|
||||||
|
|
||||||
|
e.CreateMessage(discord.NewMessageCreate().WithEmbeds(discord.NewEmbed().WithTitle("xd leaderboard").WithDescription(sb.String())))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *XDTracker) HandleStats(e *events.ApplicationCommandInteractionCreate) {
|
func (x *XDTracker) HandleStats(e *events.ApplicationCommandInteractionCreate) {
|
||||||
|
|
@ -167,7 +163,7 @@ func (x *XDTracker) BackfillHistory() {
|
||||||
for _, ch := range channels {
|
for _, ch := range channels {
|
||||||
switch ch.Type() {
|
switch ch.Type() {
|
||||||
case discord.ChannelTypeGuildText, discord.ChannelTypeGuildNews:
|
case discord.ChannelTypeGuildText, discord.ChannelTypeGuildNews:
|
||||||
x.backfillChannel(ch.ID())
|
go x.backfillChannel(ch.ID())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -200,8 +196,8 @@ func (x *XDTracker) backfillChannel(channelID snowflake.ID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
content := strings.ToLower(msg.Content)
|
content := strings.ToLower(msg.Content)
|
||||||
if strings.Contains(content, "xd") {
|
if count := strings.Count(content, "xd"); count > 0 {
|
||||||
if err := x.db.IncrementXD(msg.Author.ID.String()); err != nil {
|
if err := x.db.IncrementXD(msg.Author.ID.String(), count); err != nil {
|
||||||
slog.Error("failed to increment xd count during backfill", slog.Any("err", err))
|
slog.Error("failed to increment xd count during backfill", slog.Any("err", err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
main.go
12
main.go
|
|
@ -153,12 +153,10 @@ func handleCommand(e *events.ApplicationCommandInteractionCreate, dict *features
|
||||||
if !cfg.Features.Dictionary.Enabled {
|
if !cfg.Features.Dictionary.Enabled {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
opts := data.All()
|
if data.SubCommandName == nil {
|
||||||
if len(opts) == 0 {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
subCmd := opts[0].Name
|
switch *data.SubCommandName {
|
||||||
switch subCmd {
|
|
||||||
case "add":
|
case "add":
|
||||||
dict.HandleAdd(e)
|
dict.HandleAdd(e)
|
||||||
case "get":
|
case "get":
|
||||||
|
|
@ -173,13 +171,11 @@ func handleCommand(e *events.ApplicationCommandInteractionCreate, dict *features
|
||||||
if !cfg.Features.XDTracker.Enabled {
|
if !cfg.Features.XDTracker.Enabled {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
opts := data.All()
|
if data.SubCommandName == nil {
|
||||||
if len(opts) == 0 {
|
|
||||||
xd.HandleStats(e)
|
xd.HandleStats(e)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
subCmd := opts[0].Name
|
switch *data.SubCommandName {
|
||||||
switch subCmd {
|
|
||||||
case "leaderboard":
|
case "leaderboard":
|
||||||
xd.HandleLeaderboard(e)
|
xd.HandleLeaderboard(e)
|
||||||
case "stats":
|
case "stats":
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue