From e27eebda7741db08e19530ee727f344f3a8c2373 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Thu, 17 Oct 2024 02:16:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9D=E6=AD=A5=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/ticket/model.go | 18 +++++++++++ handler/ticket/store_ticket.go | 51 +++++++++++++++++++++++++++++++ handler/ticket/ticket.go | 55 ++++++++++++++++++++++++++++++++++ register.go | 1 + 4 files changed, 125 insertions(+) create mode 100644 handler/ticket/model.go create mode 100644 handler/ticket/store_ticket.go create mode 100644 handler/ticket/ticket.go diff --git a/handler/ticket/model.go b/handler/ticket/model.go new file mode 100644 index 0000000..c275849 --- /dev/null +++ b/handler/ticket/model.go @@ -0,0 +1,18 @@ +package ticket + +type Ticket struct { + Id int64 `json:"id" db:"id"` + Content string `json:"content" db:"content"` + FromQQ int64 `json:"fromQQ" db:"fromQQ"` + FromGroup int64 `json:"fromGroup" db:"fromGroup"` + IsDone bool `json:"isDone" db:"isDone"` + IsDeleted bool `json:"isDeleted" db:"isDeleted"` + CreatedAt string `json:"created_at" db:"created_at"` +} + +type WebTicketModel struct { + Id int64 `json:"id"` + Content string `json:"content"` + IsDone bool `json:"isDone"` + CreatedAt string `json:"created_at"` +} diff --git a/handler/ticket/store_ticket.go b/handler/ticket/store_ticket.go new file mode 100644 index 0000000..d99555e --- /dev/null +++ b/handler/ticket/store_ticket.go @@ -0,0 +1,51 @@ +package ticket + +import "git.lxtend.com/qqbot/sqlite3" + +func init() { + createTableQuery := `CREATE TABLE IF NOT EXISTS ticket ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + content TEXT NOT NULL, + fromQQ TEXT NOT NULL, + fromGroup TEXT DEFAULT NULL, + isDone BOOLEAN DEFAULT FALSE, + isDeleted BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ); + ` + sqlite3.TryCreateTable(createTableQuery) +} + +func storeTicket(content string, fromQQ int64, fromGroup int64) (int64, error) { + ticket := Ticket{ + Content: content, + FromQQ: fromQQ, + FromGroup: fromGroup, + } + tx, err := sqlite3.GetTran() + if err != nil { + return 0, err + } + defer tx.Rollback() + res, err := tx.Exec("INSERT INTO ticket (content, fromQQ, fromGroup) VALUES (:content, :fromQQ, :fromGroup)", ticket.Content, ticket.FromQQ, ticket.FromGroup) + if err != nil { + return 0, err + } + id, _ := res.LastInsertId() + tx.Commit() + return id, nil +} + +func setTicketDone(id int) error { + tx, err := sqlite3.GetTran() + if err != nil { + return err + } + defer tx.Rollback() + _, err = tx.Exec("UPDATE ticket SET isDone = TRUE WHERE id = ?", id) + if err != nil { + return err + } + tx.Commit() + return nil +} diff --git a/handler/ticket/ticket.go b/handler/ticket/ticket.go new file mode 100644 index 0000000..5f41ac6 --- /dev/null +++ b/handler/ticket/ticket.go @@ -0,0 +1,55 @@ +package ticket + +import ( + "fmt" + "strconv" + + "git.lxtend.com/qqbot/handler" + "git.lxtend.com/qqbot/model" +) + +func init() { + // Register the handler with the server + handler.RegisterHandler("提单", newTicket) + handler.RegisterHandler("结单", doneTicket) +} + +func newTicket(msg model.Message) model.Reply { + id, err := storeTicket(msg.RawMsg[len("提单 "):], msg.UserId, msg.GroupInfo.GroupId) + if err != nil { + return model.Reply{ + ReplyMsg: fmt.Sprintf("提单失败: %s", err.Error()), + ReferOriginMsg: true, + FromMsg: msg, + } + } + return model.Reply{ + ReplyMsg: fmt.Sprintf("提单成功,可以至 https://lxtend.com/qbot/ticket?id=%d 查看工单", id), + ReferOriginMsg: true, + FromMsg: msg, + } +} + +func doneTicket(msg model.Message) model.Reply { + id, err := strconv.Atoi(msg.RawMsg[len("结单 "):]) + if err != nil { + return model.Reply{ + ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()), + ReferOriginMsg: true, + FromMsg: msg, + } + } + err = setTicketDone(id) + if err != nil { + return model.Reply{ + ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()), + ReferOriginMsg: true, + FromMsg: msg, + } + } + return model.Reply{ + ReplyMsg: "结单成功", + ReferOriginMsg: true, + FromMsg: msg, + } +} diff --git a/register.go b/register.go index e1f053f..d477a09 100644 --- a/register.go +++ b/register.go @@ -9,6 +9,7 @@ import ( _ "git.lxtend.com/qqbot/handler/jrrp" _ "git.lxtend.com/qqbot/handler/roll" _ "git.lxtend.com/qqbot/handler/scoresaber" + _ "git.lxtend.com/qqbot/handler/ticket" _ "git.lxtend.com/qqbot/handler/urlparser" // _ "git.lxtend.com/qqbot/handler/wordle"