package main import ( "database/sql" "errors" "fmt" "log" ) func (ses *session) initDatabase() { createTableSQL := ` CREATE TABLE IF NOT EXISTS bots ( token TEXT NOT NULL CHECK(LENGTH(token) <= 64) PRIMARY KEY, message TEXT NOT NULL CHECK(LENGTH(message) <= 1024) );` _, err := ses.Exec(createTableSQL) if err != nil { log.Fatalf("Failed to create table: %v", err) } } func (ses *session) getMessage(token string) (string, error) { query := "SELECT message FROM bots WHERE token = ?" // Execute the query var message string err := ses.QueryRow(query, token).Scan(&message) if err != nil { if errors.Is(err, sql.ErrNoRows) { return "", fmt.Errorf("no message found for token: %s", token) } return "", err } return message, nil } func (ses *session) setMessage(token, message string) error { insertOrReplaceSQL := ` INSERT OR REPLACE INTO bots (token, message) VALUES (?, ?) ` _, err := ses.Exec(insertOrReplaceSQL, token, message) if err != nil { return err } return nil } func (ses *session) deleteBot(token string) error { deleteSQL := ` DELETE FROM bots WHERE token = ? ` _, err := ses.Exec(deleteSQL, token) if err != nil { return err } return nil } func (ses *session) getAllBots() ([]string, error) { query := "SELECT token FROM bots" rows, err := ses.Query(query) if err != nil { return nil, err } defer rows.Close() var tokens []string for rows.Next() { var token string if err = rows.Scan(&token); err != nil { return nil, err } tokens = append(tokens, token) } if err = rows.Err(); err != nil { return nil, err } return tokens, nil }