go-bot/tools/update_message_seq.go
2024-04-21 12:22:35 +08:00

105 lines
2.1 KiB
Go

package main
import (
"database/sql"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
_ "github.com/mattn/go-sqlite3"
)
func main() {
// Open SQLite database
db, err := sql.Open("sqlite3", "./data.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Create messages table if not exists
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
message_id INTEGER UNIQUE NOT NULL,
message_seq INTEGER
)
`)
if err != nil {
log.Fatal(err)
}
// Fetch messageIDs from database
rows, err := db.Query("SELECT message_id FROM messages")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var messageID int
err := rows.Scan(&messageID)
if err != nil {
log.Fatal(err)
}
// Fetch message_seq from API
messageSeq, err := fetchMessageSeq(messageID)
if err != nil {
log.Println(err)
continue
}
// Insert or update message_seq in database
err = insertOrUpdateMessageSeq(db, messageID, messageSeq)
if err != nil {
log.Println(err)
continue
}
fmt.Printf("MessageSeq for message_id %d is %d\n", messageID, messageSeq)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}
func fetchMessageSeq(messageID int) (int, error) {
url := fmt.Sprintf("http://47.92.132.159:5700/get_msg?message_id=%d", messageID)
resp, err := http.Get(url)
if err != nil {
return 0, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return 0, err
}
var messageResp map[string]interface{}
err = json.Unmarshal(body, &messageResp)
if err != nil {
return 0, err
}
return messageResp["message_seq"].(int), nil
}
func insertOrUpdateMessageSeq(db *sql.DB, messageID, messageSeq int) error {
// Try to insert messageSeq
// _, err := db.Exec("INSERT INTO messages (message_id, message_seq) VALUES (?, ?)", messageID, messageSeq)
// if err != nil {
// If messageID already exists, update messageSeq
_, err := db.Exec("UPDATE messages SET message_seq = ? WHERE message_id = ?", messageSeq, messageID)
if err != nil {
return err
// }
}
return nil
}