mirror of
https://github.com/lyx0/nourybot.git
synced 2024-11-13 19:49:55 +01:00
implement database logging for used commands
This commit is contained in:
parent
11f084978d
commit
cd79c34643
|
@ -5,6 +5,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/gempir/go-twitch-irc/v4"
|
"github.com/gempir/go-twitch-irc/v4"
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/lyx0/nourybot/internal/data"
|
"github.com/lyx0/nourybot/internal/data"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -234,3 +235,14 @@ func (app *application) DeleteCommand(name string, message twitch.PrivateMessage
|
||||||
reply := fmt.Sprintf("Deleted command %s", name)
|
reply := fmt.Sprintf("Deleted command %s", name)
|
||||||
app.Send(message.Channel, reply)
|
app.Send(message.Channel, reply)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (app *application) LogCommand(msg twitch.PrivateMessage, commandName string, userLevel int) {
|
||||||
|
twitchLogin := msg.User.Name
|
||||||
|
twitchID := msg.User.ID
|
||||||
|
twitchMessage := msg.Message
|
||||||
|
twitchChannel := msg.Channel
|
||||||
|
identifier := uuid.NewString()
|
||||||
|
rawMsg := msg.Raw
|
||||||
|
|
||||||
|
go app.Models.CommandsLogs.Insert(twitchLogin, twitchID, twitchChannel, twitchMessage, commandName, userLevel, identifier, rawMsg)
|
||||||
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ func (app *application) handleCommand(message twitch.PrivateMessage) {
|
||||||
"userLevel", userLevel,
|
"userLevel", userLevel,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
go app.LogCommand(message, commandName, userLevel)
|
||||||
// A `commandName` is every message starting with `()`.
|
// A `commandName` is every message starting with `()`.
|
||||||
// Hardcoded commands have a priority over database commands.
|
// Hardcoded commands have a priority over database commands.
|
||||||
// Switch over the commandName and see if there is a hardcoded case for it.
|
// Switch over the commandName and see if there is a hardcoded case for it.
|
||||||
|
|
|
@ -169,7 +169,9 @@ func main() {
|
||||||
common.StartTime()
|
common.StartTime()
|
||||||
|
|
||||||
app.TwitchClient.Join("nourylul")
|
app.TwitchClient.Join("nourylul")
|
||||||
|
app.TwitchClient.Join("nourybot")
|
||||||
app.Send("nourylul", "xD!")
|
app.Send("nourylul", "xD!")
|
||||||
|
app.Send("nourybot", "gopherDance")
|
||||||
|
|
||||||
// Successfully connected to Twitch
|
// Successfully connected to Twitch
|
||||||
app.Log.Infow("Successfully connected to Twitch Servers",
|
app.Log.Infow("Successfully connected to Twitch Servers",
|
||||||
|
|
46
internal/data/commands_logs.go
Normal file
46
internal/data/commands_logs.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package data
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CommandsLog struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
TwitchLogin string `json:"twitch_login"`
|
||||||
|
TwitchID string `json:"twitch_id,omitempty"`
|
||||||
|
TwitchChannel string `json:"twitch_channel,omitempty"`
|
||||||
|
TwitchMessage string `json:"twitch_message,omitempty"`
|
||||||
|
CommandName string `json:"command_name,omitempty"`
|
||||||
|
UserLevel int `json:"user_level,omitempty"`
|
||||||
|
Identifier string `json:"identifier,omitempty"`
|
||||||
|
RawMessage string `json:"raw_message,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CommandsLogModel struct {
|
||||||
|
DB *sql.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get tries to find a command in the database with the provided name.
|
||||||
|
func (c CommandsLogModel) Insert(twitchLogin, twitchId, twitchChannel, twitchMessage, commandName string, uLvl int, identifier, rawMsg string) {
|
||||||
|
query := `
|
||||||
|
INSERT into commands_logs(twitch_login, twitch_id, twitch_channel, twitch_message, command_name, user_level, identifier, raw_message)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
||||||
|
RETURNING id;
|
||||||
|
`
|
||||||
|
|
||||||
|
args := []interface{}{twitchLogin, twitchId, twitchChannel, twitchMessage, commandName, uLvl, identifier, rawMsg}
|
||||||
|
|
||||||
|
result, err := c.DB.Exec(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rowsAffected, err := result.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if rowsAffected == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
|
@ -57,14 +57,18 @@ type Models struct {
|
||||||
Insert(twitchLogin, twitchID, twitchMessage, twitchChannel, filehoster, downloadURL, identifier string)
|
Insert(twitchLogin, twitchID, twitchMessage, twitchChannel, filehoster, downloadURL, identifier string)
|
||||||
UpdateUploadURL(identifier, uploadURL string)
|
UpdateUploadURL(identifier, uploadURL string)
|
||||||
}
|
}
|
||||||
|
CommandsLogs interface {
|
||||||
|
Insert(twitchLogin, twitchId, twitchChannel, twitchMessage, commandName string, uLvl int, identifier, rawMsg string)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewModels(db *sql.DB) Models {
|
func NewModels(db *sql.DB) Models {
|
||||||
return Models{
|
return Models{
|
||||||
Channels: ChannelModel{DB: db},
|
Channels: ChannelModel{DB: db},
|
||||||
Users: UserModel{DB: db},
|
Users: UserModel{DB: db},
|
||||||
Commands: CommandModel{DB: db},
|
Commands: CommandModel{DB: db},
|
||||||
Timers: TimerModel{DB: db},
|
Timers: TimerModel{DB: db},
|
||||||
Uploads: UploadModel{DB: db},
|
Uploads: UploadModel{DB: db},
|
||||||
|
CommandsLogs: CommandsLogModel{DB: db},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
migrations/000006_create_command_logs_table.down.sql
Normal file
1
migrations/000006_create_command_logs_table.down.sql
Normal file
|
@ -0,0 +1 @@
|
||||||
|
DROP TABLE IF EXISTS commands_logs;
|
16
migrations/000006_create_command_logs_table.up.sql
Normal file
16
migrations/000006_create_command_logs_table.up.sql
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
CREATE TABLE IF NOT EXISTS commands_logs (
|
||||||
|
id bigserial PRIMARY KEY,
|
||||||
|
added_at timestamp(0) with time zone NOT NULL DEFAULT NOW(),
|
||||||
|
twitch_login text NOT NULL,
|
||||||
|
twitch_id text NOT NULL,
|
||||||
|
twitch_channel text NOT NULL,
|
||||||
|
twitch_message text NOT NULL,
|
||||||
|
command_name text NOT NULL,
|
||||||
|
user_level integer NOT NULL,
|
||||||
|
identifier text NOT NULL,
|
||||||
|
raw_message text NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO commands_logs (added_at,twitch_login,twitch_id,twitch_channel,twitch_message,command_name,user_level,identifier,raw_message) VALUES
|
||||||
|
(NOW(),'nourylul','31437432','nourybot','()weather Vilnius','weather',1000,'8441e97b-f622-4c42-b9b1-9bf22ba0d0bd','@badge-info=;badges=moderator/1,game-developer/1;color=#00F2FB;display-name=nourylul;emotes=;first-msg=0;flags=;id=87d40f5c-8c7c-4105-9f57-b1a953bb42d0;mod=1;returning-chatter=0;room-id=596581605;subscriber=0;tmi-sent-ts=1696945359165;turbo=0;user-id=31437432;user-type=mod :nourylul!nourylul@nourylul.tmi.twitch.tv PRIVMSG #nourybot :()weather Vilnius');
|
||||||
|
|
Loading…
Reference in a new issue