From 31358bfdf570e1b482fe4eefa75b5de4063e0ef1 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 25 Mar 2025 01:02:57 +0800 Subject: configurable irc logging --- README.md | 14 ++++++++++++++ flags.go | 16 ++++++++++++++++ irc.go | 23 ++++++----------------- irclog.go | 2 +- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index afd89af..6fc3780 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,20 @@ Usage of ./powxy: leading zero bits required for the challenge (default 20) -idle-timeout int idle timeout in seconds, 0 for no timeout + -irc-addr string + irc server address (default "irc.runxiyu.org:6697") + -irc-channel string + irc channel (default "#logs") + -irc-net string + irc network transport (default "tcp") + -irc-nick string + irc nick (default "powxy") + -irc-realname string + irc realname (default "powxy") + -irc-tls + irc tls (default true) + -irc-username string + irc username (default "powxy") -listen string address to listen on (default ":8081") -read-header-timeout int diff --git a/flags.go b/flags.go index 007332c..e7b9911 100644 --- a/flags.go +++ b/flags.go @@ -16,6 +16,14 @@ var ( writeTimeout int idleTimeout int readHeaderTimeout int + ircAddr string + ircNet string + ircTLS bool + ircChannel string + ircNick string + ircUsername string + ircRealname string + ircBuf uint ) // This init parses command line flags. @@ -29,6 +37,14 @@ func init() { flag.IntVar(&writeTimeout, "write-timeout", 0, "write timeout in seconds, 0 for no timeout") flag.IntVar(&idleTimeout, "idle-timeout", 0, "idle timeout in seconds, 0 for no timeout") flag.IntVar(&readHeaderTimeout, "read-header-timeout", 30, "read header timeout in seconds, 0 for no timeout") + flag.StringVar(&ircAddr, "irc-addr", "irc.runxiyu.org:6697", "irc server address") + flag.StringVar(&ircNet, "irc-net", "tcp", "irc network transport") + flag.BoolVar(&ircTLS, "irc-tls", true, "irc tls") + flag.StringVar(&ircChannel, "irc-channel", "#logs", "irc channel") + flag.StringVar(&ircNick, "irc-nick", "powxy", "irc nick") + flag.StringVar(&ircUsername, "irc-username", "powxy", "irc username") + flag.StringVar(&ircRealname, "irc-realname", "powxy", "irc realname") + flag.UintVar(&ircBuf, "irc-buf", 3000, "irc buffer size") flag.Parse() global.NeedBitsReverse = sha256.Size - global.NeedBits } diff --git a/irc.go b/irc.go index 14e4a12..06cb813 100644 --- a/irc.go +++ b/irc.go @@ -3,7 +3,6 @@ package main import ( "crypto/tls" "fmt" - "math/rand" irc "go.lindenii.runxiyu.org/lindenii-irc" ) @@ -19,7 +18,7 @@ type errorBack[T any] struct { } func ircBotSession() error { - underlyingConn, err := tls.Dial("tcp", "irc.runxiyu.org:6697", nil) + underlyingConn, err := tls.Dial(ircNet, ircAddr, nil) if err != nil { return err } @@ -31,16 +30,11 @@ func ircBotSession() error { return conn.WriteString(s + "\r\n") } - suffix := "" - for i := 0; i < 5; i++ { - suffix += string(rand.Intn(26) + 97) - } - - _, err = logAndWriteLn("NICK :powxy-" + suffix) + _, err = logAndWriteLn("NICK :" + ircNick) if err != nil { return err } - _, err = logAndWriteLn("USER powxy 0 * :powxy") + _, err = logAndWriteLn("USER " + ircUsername + " 0 * :" + ircRealname) if err != nil { return err } @@ -65,7 +59,7 @@ func ircBotSession() error { switch msg.Command { case "001": - _, err = logAndWriteLn("JOIN #logs") + _, err = logAndWriteLn("JOIN " + ircChannel) if err != nil { readLoopError <- err return @@ -80,14 +74,9 @@ func ircBotSession() error { c, ok := msg.Source.(irc.Client) if !ok { } - if c.Nick != "powxy"+suffix { + if c.Nick != ircNick { continue } - _, err = logAndWriteLn("PRIVMSG #logs :test") - if err != nil { - readLoopError <- err - return - } default: } } @@ -130,7 +119,7 @@ func ircSendDirect(s string) error { } func ircBotLoop() { - ircSendBuffered = make(chan string, 3000) + ircSendBuffered = make(chan string, ircBuf) ircSendDirectChan = make(chan errorBack[string]) for { diff --git a/irclog.go b/irclog.go index f9a7da8..f5c0f81 100644 --- a/irclog.go +++ b/irclog.go @@ -28,7 +28,7 @@ func (h *IRCLogHandler) Enabled(_ context.Context, level slog.Level) bool { func (h *IRCLogHandler) Handle(_ context.Context, r slog.Record) error { var sb strings.Builder - sb.WriteString("PRIVMSG #logs :") + sb.WriteString("PRIVMSG " + ircChannel + " :") sb.WriteString(r.Message) -- cgit v1.2.3