github.com/starshine-sys/bcr@v0.21.0/reply.go (about) 1 package bcr 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/diamondburned/arikawa/v3/api" 8 "github.com/diamondburned/arikawa/v3/discord" 9 "github.com/diamondburned/arikawa/v3/utils/sendpart" 10 ) 11 12 // Errors related to sending messages 13 var ( 14 ErrBotMissingPermissions = errors.New("bot is missing permissions") 15 ) 16 17 // SendX sends a message without returning the created discord.Message 18 func (ctx *Context) SendX(content string, embeds ...discord.Embed) (err error) { 19 msg, err := ctx.Send(content, embeds...) 20 if err != nil { 21 return 22 } 23 24 ctx.origMessage = msg 25 return 26 } 27 28 // Send sends a message to the context channel 29 func (ctx *Context) Send(content string, embeds ...discord.Embed) (m *discord.Message, err error) { 30 m, err = ctx.State.SendMessageComplex(ctx.Channel.ID, api.SendMessageData{ 31 Content: content, 32 Embeds: embeds, 33 AllowedMentions: ctx.Router.DefaultMentions, 34 }) 35 if err != nil { 36 return 37 } 38 39 ctx.origMessage = m 40 return 41 } 42 43 // Sendf sends a message with Printf-like syntax 44 func (ctx *Context) Sendf(template string, args ...interface{}) (m *discord.Message, err error) { 45 return ctx.Send(fmt.Sprintf(template, args...)) 46 } 47 48 // Reply sends a message with Printf-like syntax, in an embed. 49 // Use Replyc to set the embed's colour. 50 func (ctx *Context) Reply(template string, args ...interface{}) (m *discord.Message, err error) { 51 return ctx.Send("", discord.Embed{ 52 Description: fmt.Sprintf(template, args...), 53 Color: ctx.Router.EmbedColor, 54 }) 55 } 56 57 // Replyc sends a message with Printf-like syntax, in an embed. The first argument is the embed's colour. 58 func (ctx *Context) Replyc(colour discord.Color, template string, args ...interface{}) (m *discord.Message, err error) { 59 return ctx.Send("", discord.Embed{ 60 Description: fmt.Sprintf(template, args...), 61 Color: colour, 62 }) 63 } 64 65 // SendFiles sends a message with attachments 66 func (ctx *Context) SendFiles(content string, files ...sendpart.File) (err error) { 67 msg, err := ctx.State.SendMessageComplex(ctx.Channel.ID, api.SendMessageData{ 68 Content: content, 69 Files: files, 70 AllowedMentions: ctx.Router.DefaultMentions, 71 }) 72 if err != nil { 73 return 74 } 75 76 ctx.origMessage = msg 77 return 78 } 79 80 // SendfX ... 81 func (ctx *Context) SendfX(format string, args ...interface{}) (err error) { 82 return ctx.SendX(fmt.Sprintf(format, args...)) 83 } 84 85 // SendEphemeral ... 86 func (ctx *Context) SendEphemeral(content string, embeds ...discord.Embed) (err error) { 87 _, err = ctx.Send(content, embeds...) 88 return 89 } 90 91 // SendComponents sends a message with components 92 func (ctx *Context) SendComponents(components []discord.Component, content string, embeds ...discord.Embed) (*discord.Message, error) { 93 return ctx.State.SendMessageComplex(ctx.Message.ChannelID, api.SendMessageData{ 94 Content: content, 95 Embeds: embeds, 96 Components: components, 97 AllowedMentions: ctx.Router.DefaultMentions, 98 }) 99 }