From 9a20de85770f2f5ba09ad492aa2fb06782966096 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 3 Aug 2025 17:56:12 +0500 Subject: feat: save messages into the database --- internal/client.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'internal/client.go') diff --git a/internal/client.go b/internal/client.go index 8adc12c..5099074 100644 --- a/internal/client.go +++ b/internal/client.go @@ -12,6 +12,7 @@ import ( ) type IRCClient struct { + db *sql.DB dbid int Host string @@ -25,8 +26,9 @@ type IRCClient struct { conn net.Conn } -func NewIRCClient(dbid int, host string, port int, nick string, pass string, capabilities []string) IRCClient { +func NewIRCClient(db *sql.DB, dbid int, host string, port int, nick string, pass string, capabilities []string) IRCClient { return IRCClient{ + db: db, dbid: dbid, Host: host, port: port, @@ -58,7 +60,13 @@ func (c *IRCClient) Connect() (err error) { for _, line := range strings.Split(raw, "\r\n") { message := ParseIRCMessage(line) - log.Printf("IRC message: %s\n", message) + + switch message.Command { + case "PRIVMSG", "JOIN", "PART": + message.Save(c.db, c.dbid) + case "PING": + c.SendRaw(fmt.Sprintf("PONG :%s", strings.Join(message.Params, " "))) + } } } } @@ -77,10 +85,10 @@ func (c *IRCClient) SendRaw(message string) { } } -func (c *IRCClient) JoinChannels(db *sql.DB) { +func (c *IRCClient) JoinChannels() { for { rooms := []string{} - rows, err := db.Query("SELECT name FROM rooms WHERE server_id = ? AND departed_at IS NULL", c.dbid) + rows, err := c.db.Query("SELECT name FROM rooms WHERE server_id = ? AND departed_at IS NULL", c.dbid) if err != nil { log.Fatalf("Failed to get rooms: %v\n", err) continue -- cgit v1.2.3