package main import ( "html/template" "log" "time" "github.com/lrstanley/girc" ) type IrcBot struct { client *girc.Client logger *log.Logger s SatelNameGetter config AppConfig } func MakeIrcBot(config AppConfig, logger *log.Logger, s SatelNameGetter) *IrcBot { if config.Irc == nil { return nil } client := girc.New(girc.Config{ Server: config.Irc[0].Server, Port: config.Irc[0].Port, Nick: config.Irc[0].Nick, User: config.Irc[0].User, Name: config.Irc[0].Name, Out: logger.Writer(), }) return &IrcBot{client, logger, s, config} } func (bot *IrcBot) GetInterestingChannels() []girc.Channel { return []girc.Channel{} } func (bot *IrcBot) SendMessageToAllChannels(msg string) { for i, channel := range bot.GetInterestingChannels() { if i != 0 { // to avoid sending too many messages at once // do it only if we have more than one message to send time.Sleep(time.Millisecond * 500) } bot.client.Cmd.Message(channel.Name, msg) } } type NotifyViaIRCSync struct { SyncFilterImpl[GenericMessage] bot *IrcBot tpl *template.Template } func (bot *IrcBot) GetNotifyViaIRC(tpl *template.Template) *NotifyViaIRCSync { return &NotifyViaIRCSync{SyncFilterImpl[GenericMessage]{}, bot, tpl} } func (notifyViaIRC *NotifyViaIRCSync) Call(msg GenericMessage) { notifyViaIRC.bot.SendMessageToAllChannels( msg.Format(notifyViaIRC.tpl, notifyViaIRC.bot.s, notifyViaIRC.bot.logger)) notifyViaIRC.CallNext(msg) }