diff options
Diffstat (limited to 'cmd/marabot/irc.go')
| -rw-r--r-- | cmd/marabot/irc.go | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/cmd/marabot/irc.go b/cmd/marabot/irc.go index 51479c6..fb1010a 100644 --- a/cmd/marabot/irc.go +++ b/cmd/marabot/irc.go @@ -2,24 +2,27 @@ package main import ( "context" - "database/sql" "flag" + "time" irc "github.com/thoj/go-ircevent" "within.website/ln" "within.website/ln/opname" + "within.website/x/internal" + "within.website/x/web/revolt" ) var ( - ircNick = flag.String("irc-nick", "[Mara]", "IRC nickname") - ircUser = flag.String("irc-user", "sh0rk", "IRC username") - ircReal = flag.String("irc-real", "Friendly sh0rk Mara", "IRC realname") - ircServer = flag.String("irc-server", "chrysalis:6667", "IRC server to connect to") - ircSASLUsername = flag.String("irc-sasl-username", "", "SASL username") - ircSASLPassword = flag.String("irc-sasl-password", "", "SASL password") + ircNick = flag.String("irc-nick", "[Mara]", "IRC nickname") + ircUser = flag.String("irc-user", "sh0rk", "IRC username") + ircReal = flag.String("irc-real", "Friendly sh0rk Mara", "IRC realname") + ircServer = flag.String("irc-server", "chrysalis:6667", "IRC server to connect to") + ircSASLUsername = flag.String("irc-sasl-username", "", "SASL username") + ircSASLPassword = flag.String("irc-sasl-password", "", "SASL password") + ircRevoltChannel = flag.String("irc-revolt-channel", "", "channel to copy #xeserv messages to") ) -func NewIRCBot(ctx context.Context, db *sql.DB, messages chan string) { +func (mr *MaraRevolt) IRCBot(ctx context.Context) { ctx = opname.With(ctx, "ircbot") ctx = ln.WithF(ctx, ln.F{ "irc_server": *ircServer, @@ -32,11 +35,14 @@ func NewIRCBot(ctx context.Context, db *sql.DB, messages chan string) { }() go func() { + t := time.NewTicker(250 * time.Millisecond) + defer t.Stop() for { select { case <-ctx.Done(): return - case msg := <-messages: + case msg := <-mr.ircmsgs: + <-t.C irccon.Privmsg("#xeserv", msg) } } @@ -51,9 +57,24 @@ func NewIRCBot(ctx context.Context, db *sql.DB, messages chan string) { irccon.AddCallback("001", func(e *irc.Event) { irccon.Join("#xeserv") }) irccon.AddCallback("PRIVMSG", func(e *irc.Event) { - if _, err := db.ExecContext(ctx, `INSERT INTO irc_messages(nick, user, host, channel, content, tags) VALUES (?, ?, ?, ?, ?, ?)`, e.Nick, e.User, e.Host, e.Arguments[0], e.Message(), ""); err != nil { + if _, err := mr.db.ExecContext(ctx, `INSERT INTO irc_messages(nick, user, host, channel, content, tags) VALUES (?, ?, ?, ?, ?, ?)`, e.Nick, e.User, e.Host, e.Arguments[0], e.Message(), ""); err != nil { ln.Error(ctx, err) } + + if e.Arguments[0] == "#xeserv" { + sendMsg := &revolt.SendMessage{ + Masquerade: &revolt.Masquerade{ + Name: e.Nick, + AvatarURL: "https://cdn.xeiaso.net/avatar/" + internal.Hash(e.User, e.Host), + }, + Content: e.Message(), + } + + if _, err := mr.cli.ChannelSendMessage(ctx, *ircRevoltChannel, sendMsg); err != nil { + ln.Error(ctx, err) + return + } + } }) err := irccon.Connect(*ircServer) if err != nil { |
