Documentation ¶
Overview ¶
Package notify: a notificaion publishing package that allows you to send messages to different social platforms
Index ¶
Constants ¶
const ( // DiscordType : senderType of discord DiscordSenderType = "discord" // SlackSenderType : senderType of Slack SlackSenderType = "slack" // TelegramSenderType : senderType of telegram TelegramSenderType = "telegram" // TestSenderType : sender Type for testing TestSenderType = "test" )
const ( // EnvHTTPDebugging : setting this environment // enables debugging http logs to stdout EnvHTTPDebugging = "NOTIFY_GO_HTTP_DEBUGGING" )
Variables ¶
var ( SupportedTypes = []string{ DiscordSenderType, SlackSenderType, TelegramSenderType, TestSenderType, } SupportedTypesString = strings.Join(SupportedTypes, " , ") )
Functions ¶
Types ¶
type DiscordBody ¶
type DiscordBody struct {
Content string `json:"content"`
}
DiscordBody : Discord body
func (DiscordBody) WithBody ¶
func (s DiscordBody) WithBody(b []byte) DiscordBody
type DiscordSender ¶
type DiscordSender = WebhookSender[DiscordBody]
DiscordSender : slack message sender
func NewDiscordSender ¶
func NewDiscordSender() *DiscordSender
NewDiscordSender : creat a new discord notification sender
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager : A manager for all the sender type implementations
func (*Manager) AddSender ¶
func (m *Manager) AddSender(senderType string, s MessageSender)
AddSender : add a sender service Try to use this only during your app's init phase preferably
type MessageSender ¶
type MessageSender interface { // Send send to someone not in your default configs Send(reciever string, bodyContent []byte) error }
MessageSender : a base contract that all other message senders need to fullfill
type RecieverAlias ¶
type RecieverAlias struct {
// contains filtered or unexported fields
}
RecieverAlias : a map of a sender and reciver, it's a good way to group similar recivers but different channels
In plain english : let's say you had the same group in discord , slack , telegram this struct will provide you with functionality to be able to map the same group for different channels
It's go routine safe !
forexample : // from primitive data var s map[string]string = make(map[string]string) s[notify.DiscordSenderType] = "https://somechannelwebhook.com" s[notify.TestSenderType] = "some_channel_id" // will throw an error if sender type is not supported or if reciver is empty for sender coolCryptoChannel,err := notify.NewReciverAlias(s) // using the ReciverAlias struct (it's go routine safe) // getting reciver DiscordChannelWebhook := coolCryptoChannel.Get(notify.DiscordSenderType) // enrolling new reciver coolCryptoChannel.Add(notify.SlackSenderType,"https://someslackchannelwebooh.com")
func NewEmptyRecieverAlias ¶
func NewEmptyRecieverAlias() *RecieverAlias
func NewRecieverAlias ¶
func NewRecieverAlias(senderTypeToReciverMap map[string]string) (*RecieverAlias, error)
NewRecieverAlias : returns a reciver alias A reciever alias is basically a map of sender type -> reciever
func (*RecieverAlias) Add ¶
func (r *RecieverAlias) Add(senderType string, reciver string) error
Add : add a sender -> reciver mapping will throw error if sender type is not supported / reciver is empty
func (*RecieverAlias) Get ¶
func (r *RecieverAlias) Get(senderType string) string
Get : get a reciver for a sender type
type SenderMock ¶
SenderMock : mock implementation you can use in your testing
type SlackSender ¶
type SlackSender = WebhookSender[SlackBody]
SlackSender : slack message sender
func NewSlackSender ¶
func NewSlackSender() *SlackSender
NewSlackSender : creat a new slack notification sender
type WebhookSender ¶
type WebhookSender[T interface{ WithBody(b []byte) T }] struct { // contains filtered or unexported fields }
WebhookSender : Generic message sender using webhooks
func NewWebhookSender ¶
func NewWebhookSender[T interface{ WithBody(b []byte) T }](errPrefix string) (w *WebhookSender[T])