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  }