mirror of
https://github.com/lyx0/nourybot.git
synced 2024-11-13 19:49:55 +01:00
implement setting a location for your user that is checked when no argument is supplied to the weather command
This commit is contained in:
parent
d5710d727f
commit
daa0469a84
4 changed files with 62 additions and 1 deletions
|
@ -248,7 +248,12 @@ func (app *Application) handleCommand(message twitch.PrivateMessage) {
|
||||||
|
|
||||||
// ()weather <location>
|
// ()weather <location>
|
||||||
case "weather":
|
case "weather":
|
||||||
if msgLen < 2 {
|
if msgLen == 1 {
|
||||||
|
// Default to first argument supplied being the name
|
||||||
|
// of the user to look up recently played.
|
||||||
|
app.CheckWeather(message)
|
||||||
|
return
|
||||||
|
} else if msgLen < 2 {
|
||||||
common.Send(target, "Not enough arguments provided.", app.TwitchClient)
|
common.Send(target, "Not enough arguments provided.", app.TwitchClient)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -5,9 +5,11 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/gempir/go-twitch-irc/v3"
|
"github.com/gempir/go-twitch-irc/v3"
|
||||||
|
"github.com/lyx0/nourybot/internal/commands"
|
||||||
"github.com/lyx0/nourybot/internal/commands/decapi"
|
"github.com/lyx0/nourybot/internal/commands/decapi"
|
||||||
"github.com/lyx0/nourybot/internal/common"
|
"github.com/lyx0/nourybot/internal/common"
|
||||||
"github.com/lyx0/nourybot/internal/data"
|
"github.com/lyx0/nourybot/internal/data"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddUser calls GetIdByLogin to get the twitch id of the login name and then adds
|
// AddUser calls GetIdByLogin to get the twitch id of the login name and then adds
|
||||||
|
@ -156,3 +158,30 @@ func (app *Application) GetUserLevel(login string) int {
|
||||||
return user.Level
|
return user.Level
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (app *Application) CheckWeather(message twitch.PrivateMessage) {
|
||||||
|
sugar := zap.NewExample().Sugar()
|
||||||
|
defer sugar.Sync()
|
||||||
|
|
||||||
|
twitchLogin := message.User.Name
|
||||||
|
sugar.Infow("Twitchlogin: ",
|
||||||
|
"twitchLogin:", twitchLogin,
|
||||||
|
)
|
||||||
|
location, err := app.Models.Users.GetLocation(twitchLogin)
|
||||||
|
if err != nil {
|
||||||
|
sugar.Errorw("No LastFM account registered for: ",
|
||||||
|
"twitchLogin:", twitchLogin,
|
||||||
|
)
|
||||||
|
reply := "No location for your account set in my database. Use ()set location <location> to register. Otherwise use ()weather <location> without registering."
|
||||||
|
common.Send(message.Channel, reply, app.TwitchClient)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
target := message.Channel
|
||||||
|
sugar.Infow("Twitchlogin: ",
|
||||||
|
"twitchLogin:", twitchLogin,
|
||||||
|
"location:", location,
|
||||||
|
)
|
||||||
|
|
||||||
|
commands.Weather(target, location, app.TwitchClient)
|
||||||
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ type Models struct {
|
||||||
Get(login string) (*User, error)
|
Get(login string) (*User, error)
|
||||||
SetLevel(login string, level int) error
|
SetLevel(login string, level int) error
|
||||||
SetLocation(login, location string) error
|
SetLocation(login, location string) error
|
||||||
|
GetLocation(login string) (string, error)
|
||||||
SetLastFM(login, lastfmUser string) error
|
SetLastFM(login, lastfmUser string) error
|
||||||
GetLastFM(login string) (string, error)
|
GetLastFM(login string) (string, error)
|
||||||
Delete(login string) error
|
Delete(login string) error
|
||||||
|
|
|
@ -78,6 +78,32 @@ func (u UserModel) SetLocation(login, location string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetLocation searches the database for a record with the provided login value
|
||||||
|
// and if that exists sets the location to the supplied
|
||||||
|
func (u UserModel) GetLocation(login string) (string, error) {
|
||||||
|
query := `
|
||||||
|
SELECT location
|
||||||
|
FROM users
|
||||||
|
WHERE login = $1`
|
||||||
|
|
||||||
|
var user User
|
||||||
|
|
||||||
|
err := u.DB.QueryRow(query, login).Scan(
|
||||||
|
&user.Location,
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
switch {
|
||||||
|
case errors.Is(err, sql.ErrNoRows):
|
||||||
|
return "", ErrRecordNotFound
|
||||||
|
default:
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return user.Location, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetLocation searches the database for a record with the provided login value
|
// SetLocation searches the database for a record with the provided login value
|
||||||
// and if that exists sets the location to the supplied
|
// and if that exists sets the location to the supplied
|
||||||
func (u UserModel) SetLastFM(login, lastfmUser string) error {
|
func (u UserModel) SetLastFM(login, lastfmUser string) error {
|
||||||
|
|
Loading…
Reference in a new issue