diff --git a/.gitignore b/.gitignore index 5b90e79..bd2274b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ go.work.sum # env file .env +/cmd/* \ No newline at end of file diff --git a/message.go b/message.go index 8efb9fe..59599a0 100644 --- a/message.go +++ b/message.go @@ -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