aboutsummaryrefslogtreecommitdiff
path: root/cmd/marabot/irc.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/marabot/irc.go')
-rw-r--r--cmd/marabot/irc.go41
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 {