Properly handling message overflows #6

Merged
jake merged 1 commits from fix/msg-length into main 2026-01-27 16:23:08 +00:00
2 changed files with 35 additions and 1 deletions
Showing only changes of commit 759a188a8e - Show all commits

1
.gitignore vendored
View File

@@ -25,3 +25,4 @@ go.work.sum
# env file
.env
/cmd/*

View File

@@ -6,6 +6,11 @@ import (
dg "github.com/bwmarrin/discordgo"
)
const (
// the max discord allows for basic messages
MSG_MAX_LENGTH = 2000
)
// the message struct is passed to the command payload providing basic
// message information and needed methods
type Message struct {
@@ -27,8 +32,36 @@ func (m *Message) React(emoji Reaction) error {
return m.sesh.MessageReactionAdd(m.channelID, m.msgID, fmt.Sprint(emoji))
}
// sends response to message
// sends response to message, if the response length is greater than 2000 characters the
// messages are split and sent seperatly
func (m *Message) Respond(res string) error {
if len(res) > MSG_MAX_LENGTH {
for len(res) > 0 {
//send full chunk size allowed by discord
sc := res[:MSG_MAX_LENGTH]
rep := m.sesh.createReply(sc, m.msgID, m.channelID, m.serverID)
_, err := m.sesh.ChannelMessageSendComplex(m.channelID, rep)
if err != nil {
return err
}
res = res[MSG_MAX_LENGTH:]
//if we have left than a full chunk send the rest and break the loop
if len(res) < MSG_MAX_LENGTH {
final := m.sesh.createReply(res, m.msgID, m.channelID, m.serverID)
_, err := m.sesh.ChannelMessageSendComplex(m.channelID, final)
if err != nil {
return err
}
break
}
}
return nil
}
//short enough message to send in one message
rep := m.sesh.createReply(res, m.msgID, m.channelID, m.serverID)
_, err := m.sesh.ChannelMessageSendComplex(m.channelID, rep)
return err