Switch delimeter to \x1F
This commit is contained in:
parent
c68fcfe439
commit
52038b4765
|
@ -0,0 +1,7 @@
|
||||||
|
/* change the string delimeter from comma to Unit Separator, to allow commas */
|
||||||
|
/* to be used in polls and the like */
|
||||||
|
UPDATE reactions SET reaction = REPLACE(reaction, ',', X'1F');
|
||||||
|
UPDATE polls SET opt_emojis = REPLACE(opt_emojis, ',', X'1F');
|
||||||
|
UPDATE polls SET opt_text = REPLACE(opt_text, ',', X'1F');
|
||||||
|
UPDATE reaction_role_categories SET emoji = REPLACE(emoji, ',', X'1F');
|
||||||
|
UPDATE reaction_role_categories SET roles = REPLACE(roles, ',', X'1F');
|
|
@ -56,6 +56,10 @@ func GetPoll(msgID string) (*Poll, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddPollOptionText(msgID string, text string) error {
|
func AddPollOptionText(msgID string, text string) error {
|
||||||
|
if strings.Contains(text, "\x1F") {
|
||||||
|
return errors.New("option string cannot contain unit separator")
|
||||||
|
}
|
||||||
|
|
||||||
var optText string
|
var optText string
|
||||||
err := db.QueryRow("SELECT opt_text FROM polls WHERE msg_id = ?", msgID).Scan(&optText)
|
err := db.QueryRow("SELECT opt_text FROM polls WHERE msg_id = ?", msgID).Scan(&optText)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,11 +69,15 @@ func AddPollOptionText(msgID string, text string) error {
|
||||||
splitText := splitOptions(optText)
|
splitText := splitOptions(optText)
|
||||||
splitText = append(splitText, text)
|
splitText = append(splitText, text)
|
||||||
|
|
||||||
_, err = db.Exec("UPDATE polls SET opt_text = ? WHERE msg_id = ?", strings.Join(splitText, ","), msgID)
|
_, err = db.Exec("UPDATE polls SET opt_text = ? WHERE msg_id = ?", strings.Join(splitText, "\x1F"), msgID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddPollOptionEmoji(msgID string, emoji string) error {
|
func AddPollOptionEmoji(msgID string, emoji string) error {
|
||||||
|
if strings.Contains(emoji, "\x1F") {
|
||||||
|
return errors.New("emoji string cannot contain unit separator")
|
||||||
|
}
|
||||||
|
|
||||||
var optEmojis string
|
var optEmojis string
|
||||||
err := db.QueryRow("SELECT opt_emojis FROM polls WHERE msg_id = ?", msgID).Scan(&optEmojis)
|
err := db.QueryRow("SELECT opt_emojis FROM polls WHERE msg_id = ?", msgID).Scan(&optEmojis)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -82,7 +90,7 @@ func AddPollOptionEmoji(msgID string, emoji string) error {
|
||||||
}
|
}
|
||||||
splitEmojis = append(splitEmojis, emoji)
|
splitEmojis = append(splitEmojis, emoji)
|
||||||
|
|
||||||
_, err = db.Exec("UPDATE polls SET opt_emojis = ? WHERE msg_id = ?", strings.Join(splitEmojis, ","), msgID)
|
_, err = db.Exec("UPDATE polls SET opt_emojis = ? WHERE msg_id = ?", strings.Join(splitEmojis, "\x1F"), msgID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,5 +127,5 @@ func splitOptions(s string) []string {
|
||||||
if s == "" {
|
if s == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return strings.Split(s, ",")
|
return strings.Split(s, "\x1F")
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -41,8 +42,8 @@ func AddReactionRoleCategory(channelID string, rrc ReactionRoleCategory) error {
|
||||||
channelID,
|
channelID,
|
||||||
rrc.Name,
|
rrc.Name,
|
||||||
rrc.Description,
|
rrc.Description,
|
||||||
strings.Join(rrc.Emoji, ","),
|
strings.Join(rrc.Emoji, "\x1F"),
|
||||||
strings.Join(rrc.Roles, ","),
|
strings.Join(rrc.Roles, "\x1F"),
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -74,6 +75,10 @@ func DeleteReactionRoleCategory(channelID, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddReactionRole(channelID, category, emoji string, role *discordgo.Role) error {
|
func AddReactionRole(channelID, category, emoji string, role *discordgo.Role) error {
|
||||||
|
if strings.Contains(category, "\x1F") || strings.Contains(emoji, "\x1F") {
|
||||||
|
return errors.New("reaction roles cannot contain unit separator")
|
||||||
|
}
|
||||||
|
|
||||||
var oldEmoji, oldRoles string
|
var oldEmoji, oldRoles string
|
||||||
err := db.QueryRow("SELECT emoji, roles FROM reaction_role_categories WHERE name = ? AND channel_id = ?", category, channelID).Scan(&oldEmoji, &oldRoles)
|
err := db.QueryRow("SELECT emoji, roles FROM reaction_role_categories WHERE name = ? AND channel_id = ?", category, channelID).Scan(&oldEmoji, &oldRoles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -86,8 +91,8 @@ func AddReactionRole(channelID, category, emoji string, role *discordgo.Role) er
|
||||||
|
|
||||||
_, err = db.Exec(
|
_, err = db.Exec(
|
||||||
"UPDATE reaction_role_categories SET emoji = ?, roles = ? WHERE name = ? AND channel_id = ?",
|
"UPDATE reaction_role_categories SET emoji = ?, roles = ? WHERE name = ? AND channel_id = ?",
|
||||||
strings.Join(splitEmoji, ","),
|
strings.Join(splitEmoji, "\x1F"),
|
||||||
strings.Join(splitRoles, ","),
|
strings.Join(splitRoles, "\x1F"),
|
||||||
category,
|
category,
|
||||||
channelID,
|
channelID,
|
||||||
)
|
)
|
||||||
|
@ -111,8 +116,8 @@ func DeleteReactionRole(channelID, category string, role *discordgo.Role) error
|
||||||
|
|
||||||
_, err = db.Exec(
|
_, err = db.Exec(
|
||||||
"UPDATE reaction_role_categories SET emoji = ?, roles = ? WHERE name = ? AND channel_id = ?",
|
"UPDATE reaction_role_categories SET emoji = ?, roles = ? WHERE name = ? AND channel_id = ?",
|
||||||
strings.Join(splitEmoji, ","),
|
strings.Join(splitEmoji, "\x1F"),
|
||||||
strings.Join(splitRoles, ","),
|
strings.Join(splitRoles, "\x1F"),
|
||||||
category,
|
category,
|
||||||
channelID,
|
channelID,
|
||||||
)
|
)
|
||||||
|
|
|
@ -77,6 +77,8 @@ func reactionsAddCmd(s *discordgo.Session, i *discordgo.InteractionCreate) error
|
||||||
if err := validateEmoji(reaction.Reaction); err != nil {
|
if err := validateEmoji(reaction.Reaction); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// Use the correct delimeter for the DB
|
||||||
|
reaction.Reaction = strings.ReplaceAll(reaction.Reaction, ",", "\x1F")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := db.AddReaction(i.GuildID, reaction)
|
err := db.AddReaction(i.GuildID, reaction)
|
||||||
|
@ -140,6 +142,8 @@ func validateEmoji(s string) error {
|
||||||
return fmt.Errorf("invalid reaction emoji: %s", emojiStr)
|
return fmt.Errorf("invalid reaction emoji: %s", emojiStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if strings.Contains(s, "\x1F") {
|
||||||
|
return fmt.Errorf("emoji string cannot contain unit separator")
|
||||||
} else {
|
} else {
|
||||||
if _, ok := emoji.Parse(s); !ok {
|
if _, ok := emoji.Parse(s); !ok {
|
||||||
return fmt.Errorf("invalid reaction emoji: %s", s)
|
return fmt.Errorf("invalid reaction emoji: %s", s)
|
||||||
|
|
Loading…
Reference in New Issue