From 69116034014ee498eb4f792a3135d779666b7fbb Mon Sep 17 00:00:00 2001 From: lyx0 <66651385+lyx0@users.noreply.github.com> Date: Thu, 29 Feb 2024 21:17:39 +0100 Subject: [PATCH] styling and cleanup --- cmd/nourybot/command.go | 43 +++++++++++++++----------- cmd/nourybot/commands.go | 35 +++++++++++++++------ cmd/nourybot/download.go | 12 +++++++- cmd/nourybot/errors.go | 1 + cmd/nourybot/eventsub.go | 6 ++-- cmd/nourybot/helix.go | 8 ++++- cmd/nourybot/main.go | 8 +++-- cmd/nourybot/router.go | 66 ++++++++++++++++++++++++++++------------ cmd/nourybot/send.go | 9 ++++-- cmd/nourybot/timer.go | 13 ++++---- cmd/nourybot/upload.go | 2 -- cmd/nourybot/user.go | 19 ++++++++---- go.mod | 1 + go.sum | 2 ++ pkg/common/random.go | 3 -- pkg/common/version.go | 2 +- pkg/ivr/user.go | 3 ++ 17 files changed, 159 insertions(+), 74 deletions(-) diff --git a/cmd/nourybot/command.go b/cmd/nourybot/command.go index 1ad4693..d92983d 100644 --- a/cmd/nourybot/command.go +++ b/cmd/nourybot/command.go @@ -49,11 +49,13 @@ func (app *application) AddCommand(name string, message twitch.PrivateMessage) { } } -// GetCommand queries the database for a command with the provided name. If an entry exists -// it checks if the Command.Level is 0, if it is the command.Text value is returned. +// GetCommand queries the database for a command with the provided name. +// If an entry exists it checks if the Command.Level is 0, if it is +// the command.Text value is returned. // -// If the Command.Level is not 0 it queries the database for the level of the user who sent -// the message. If the users level is equal or higher the command.Text field is returned. +// If the Command.Level is not 0 it queries the database for the level of the +// user who sent the message. If the users level is equal or higher +// the command.Text field is returned. func (app *application) GetCommand(target, commandName string, userLevel int) (string, error) { app.Log.Infow("command", "target", target, @@ -78,11 +80,14 @@ func (app *application) GetCommand(target, commandName string, userLevel int) (s return "", ErrUserInsufficientLevel } -// GetCommandDescription queries the database for a command with the provided name in the channel. -// If a command exist it then checks if the Command.Level is 0, if it is the command.Text value is returned. +// GetCommandDescription queries the database for a command with the provided +// name in the channel. +// If a command exist it then checks if the Command.Level is 0, if it is +// the command.Text value is returned. // -// If the Command.Level is not 0 it queries the database for the level of the user who sent -// the message. If the users level is equal or higher the command.Text field is returned. +// If the Command.Level is not 0 it queries the database for the level of +// the user that sent the message. If the users level is equal or higher +// the command.Text field is returned. func (app *application) GetCommandDescription(name, channel, username string) (string, error) { command, err := app.Models.Commands.Get(name, channel) if err != nil { @@ -110,25 +115,31 @@ func (app *application) GetCommandDescription(name, channel, username string) (s return "", ErrUserInsufficientLevel } -// EditCommandLevel checks if a command with the provided name exists in the database. If it does it -// changes the level of the command with the supplied value. +// EditCommandLevel checks if a command with the provided name exists in +// the database. If it exists it changes the level of the command in +// the database with the newly supplied level value. func (app *application) EditCommandLevel(name, lvl string, message twitch.PrivateMessage) { level, err := strconv.Atoi(lvl) + if err != nil { app.Log.Error(err) - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrCommandLevelNotInteger), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrCommandLevelNotInteger), message) + return } err = app.Models.Commands.SetLevel(name, message.Channel, level) - if err != nil { - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) app.Log.Error(err) + return } else { reply := fmt.Sprintf("Updated command %s to level %v", name, level) app.Send(message.Channel, reply, message) + return } } @@ -279,11 +290,10 @@ func (app *application) ListChannelCommands(channel string) string { // The slice of timers is only used to log them at // the start so it looks a bit nicer. - var cs []string allHelpText := app.GetAllHelpText() + var cs = []string{fmt.Sprintf("General commands: \n\n%s\nChannel commands:\n\n", allHelpText)} app.Log.Info(allHelpText) - cs = append(cs, fmt.Sprintf("General commands: \n\n%s\nChannel commands:\n\n", allHelpText)) // Iterate over all timers and then add them onto the scheduler. for i, v := range command { @@ -291,9 +301,8 @@ func (app *application) ListChannelCommands(channel string) string { // https://github.com/robfig/cron/issues/420#issuecomment-940949195 i, v := i, v _ = i - var c string - c = fmt.Sprintf( + c := fmt.Sprintf( "Name: \t%v\n"+ "Description: %v\n"+ "Level: \t%v\n"+ diff --git a/cmd/nourybot/commands.go b/cmd/nourybot/commands.go index dced15e..ab19904 100644 --- a/cmd/nourybot/commands.go +++ b/cmd/nourybot/commands.go @@ -12,8 +12,9 @@ import ( "github.com/lyx0/nourybot/pkg/owm" ) -// handleCommand takes in a twitch.PrivateMessage and then routes the message to -// the function that is responsible for each command and knows how to deal with it accordingly. +// handleCommand takes in a twitch.PrivateMessage and then routes the message +// to the function that is responsible for each command and knows how to deal +// with it accordingly. func (app *application) handleCommand(message twitch.PrivateMessage) { var reply string @@ -21,7 +22,8 @@ func (app *application) handleCommand(message twitch.PrivateMessage) { return } - // Increments the counter how many commands have been used, called in the ping command. + // Increments the counter how many commands have been used, + // called in the ping command. go common.CommandUsed() go app.InitUser(message.User.Name, message.User.ID) @@ -134,6 +136,9 @@ func (app *application) handleCommand(message twitch.PrivateMessage) { case "youtube": reply = commands.Youtube(message.Message[10:len(message.Message)]) + case "godoc": + reply = commands.Godocs(message.Message[8:len(message.Message)]) + case "godocs": reply = commands.Godocs(message.Message[9:len(message.Message)]) @@ -202,10 +207,10 @@ func (app *application) handleCommand(message twitch.PrivateMessage) { reply, _ = app.getUserID(cmdParams[1]) case "uname": - reply, _ = app.getChannelUsername(cmdParams[1]) + reply, _ = app.userIDtoUsername(cmdParams[1]) case "username": - reply, _ = app.getChannelUsername(cmdParams[1]) + reply, _ = app.userIDtoUsername(cmdParams[1]) case "commands": reply = app.ListChannelCommands(message.Channel) @@ -549,10 +554,10 @@ var helpText = map[string]command{ }, "godocs": { Name: "godocs", - Alias: nil, + Alias: []string{"godocs", "godoc"}, Description: "Returns the godocs.io search URL for a given query.", Level: "0", - Usage: "()godoc ", + Usage: "()godocs ", }, "gofile": { Name: "gofile", @@ -753,7 +758,7 @@ var helpText = map[string]command{ "weather": { Name: "weather", Alias: nil, - Description: `Returns the weather for a given location. If you "$set location" your location, the command will use that location if no other location is specified.`, + Description: `Returns the weather for a given location. If you "()set location" your location, the command will use that location if no other location is specified.`, Level: "0", Usage: "()weather [location]", }, @@ -810,9 +815,19 @@ func (app *application) GetAllHelpText() string { var c string if v.Alias == nil { - c = fmt.Sprintf("Name: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", i, v.Description, v.Level, v.Usage) + c = fmt.Sprintf("Name: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", + i, + v.Description, + v.Level, + v.Usage, + ) } else { - c = fmt.Sprintf("Name: %s\nAliases: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", i, v.Alias, v.Description, v.Level, v.Usage) + c = fmt.Sprintf("Name: %s\nAliases: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", + i, v.Alias, + v.Description, + v.Level, + v.Usage, + ) } diff --git a/cmd/nourybot/download.go b/cmd/nourybot/download.go index 367eb66..5869ff4 100644 --- a/cmd/nourybot/download.go +++ b/cmd/nourybot/download.go @@ -87,7 +87,7 @@ func (app *application) ConvertAndSave(fName, link string, msg twitch.PrivateMes fn, err := os.Create(out) if err != nil { app.Log.Errorln(err) - app.Send(msg.Channel, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err), msg) + app.Send(msg.Channel, fmt.Sprint(ErrGenericErrorMessage), msg) return } defer fn.Close() @@ -95,6 +95,11 @@ func (app *application) ConvertAndSave(fName, link string, msg twitch.PrivateMes err = ffmpeg.Input(fileName). Output(out). OverWriteOutput().ErrorToStdOut().Run() + if err != nil { + app.Log.Errorln(err) + app.Send(msg.Channel, fmt.Sprint(ErrGenericErrorMessage), msg) + return + } defer os.Remove(fileName) app.Send(msg.Channel, fmt.Sprintf("https://bot.noury.li/uploads/%s.mp4", fName), msg) @@ -160,6 +165,11 @@ func (app *application) ConvertToMP4(link string, msg twitch.PrivateMessage) { err = ffmpeg.Input(fileName). Output(out). OverWriteOutput().ErrorToStdOut().Run() + if err != nil { + app.Log.Errorln(err) + app.Send(msg.Channel, fmt.Sprint(ErrGenericErrorMessage), msg) + return + } defer os.Remove(fileName) go app.NewUpload("yaf", out, msg.Channel, uuid_new, msg) diff --git a/cmd/nourybot/errors.go b/cmd/nourybot/errors.go index 9dfa489..0ce2b47 100644 --- a/cmd/nourybot/errors.go +++ b/cmd/nourybot/errors.go @@ -5,6 +5,7 @@ import ( ) var ( + ErrGenericErrorMessage = errors.New("something went wrong FeelsBadMan") ErrUserLevelNotInteger = errors.New("user level must be a number") ErrCommandLevelNotInteger = errors.New("command level must be a number") ErrRecordNotFound = errors.New("user not found in the database") diff --git a/cmd/nourybot/eventsub.go b/cmd/nourybot/eventsub.go index 0389a22..95e2d33 100644 --- a/cmd/nourybot/eventsub.go +++ b/cmd/nourybot/eventsub.go @@ -103,7 +103,8 @@ func (app *application) deleteLiveSubscription(target, channel string) string { return fmt.Sprintf("Successfully deleted live notification for channel %s; id=%v", channel, uid) } -// createOfflineSubscription creates a stream.offline twitch eventsub subscription for the specified channel +// createOfflineSubscription creates a stream.offline twitch eventsub +// subscription for the specified channel. func (app *application) createOfflineSubscription(target, channel string) string { uid := ivr.IDByUsername(channel) if uid == "xd" { @@ -133,7 +134,8 @@ func (app *application) createOfflineSubscription(target, channel string) string return fmt.Sprintf("Created offline subscription for channel %v; uid=%v", channel, uid) } -// deleteOfflineSubscription deletes a stream.offline twitch eventsub subscription for the specified channel +// deleteOfflineSubscription deletes a stream.offline twitch eventsub +// subscription for the specified channel func (app *application) deleteOfflineSubscription(target, channel string) string { uid := ivr.IDByUsername(channel) if uid == "xd" { diff --git a/cmd/nourybot/helix.go b/cmd/nourybot/helix.go index 3eb2a66..b328c2a 100644 --- a/cmd/nourybot/helix.go +++ b/cmd/nourybot/helix.go @@ -4,6 +4,7 @@ import ( "github.com/nicklaw5/helix/v2" ) +// getUserID returns the Twitch userID for given twitch username. func (app *application) getUserID(username string) (string, error) { resp, err := app.HelixClient.GetUsers(&helix.UsersParams{ Logins: []string{username}, @@ -16,7 +17,8 @@ func (app *application) getUserID(username string) (string, error) { return resp.Data.Users[0].ID, nil } -func (app *application) getChannelUsername(channelID string) (string, error) { +// userIDtoUsername returns the Twitch username for a given twitch user ID. +func (app *application) userIDtoUsername(channelID string) (string, error) { resp, err := app.HelixClient.GetUsers(&helix.UsersParams{ IDs: []string{channelID}, }) @@ -28,6 +30,8 @@ func (app *application) getChannelUsername(channelID string) (string, error) { return resp.Data.Users[0].Login, nil } +// getChannelTitle queries the Twitch API for the current Title for +// the provided Twitch channel username. func (app *application) getChannelTitle(channelID string) string { resp, err := app.HelixClient.GetChannelInformation(&helix.GetChannelInformationParams{ BroadcasterID: channelID, @@ -40,6 +44,8 @@ func (app *application) getChannelTitle(channelID string) string { return resp.Data.Channels[0].Title } +// getChannelTitleByUsername returns the current title of the provided +// Twitch channel username. func (app *application) getChannelTitleByUsername(username string) string { channelID, err := app.getUserID(username) if err != nil { diff --git a/cmd/nourybot/main.go b/cmd/nourybot/main.go index d9935c3..58db135 100644 --- a/cmd/nourybot/main.go +++ b/cmd/nourybot/main.go @@ -178,11 +178,15 @@ func run(ctx context.Context, w io.Writer, args []string) error { app.TwitchClient.OnClearChatMessage(func(message twitch.ClearChatMessage) { if message.BanDuration == 0 && message.Channel == "forsen" { - app.TwitchClient.Say("nouryxd", fmt.Sprintf("MODS https://logs.ivr.fi/?channel=forsen&username=%v", message.TargetUsername)) + app.TwitchClient.Say("nouryxd", + fmt.Sprintf("MODS https://logs.ivr.fi/?channel=forsen&username=%v", + message.TargetUsername)) } if message.BanDuration >= 28700 && message.Channel == "forsen" { - app.TwitchClient.Say("nouryxd", fmt.Sprintf("monkaS -%v https://logs.ivr.fi/?channel=forsen&username=%v", message.BanDuration, message.TargetUsername)) + app.TwitchClient.Say("nouryxd", + fmt.Sprintf("monkaS -%v https://logs.ivr.fi/?channel=forsen&username=%v", + message.BanDuration, message.TargetUsername)) } }) diff --git a/cmd/nourybot/router.go b/cmd/nourybot/router.go index 11022fe..fb8a383 100644 --- a/cmd/nourybot/router.go +++ b/cmd/nourybot/router.go @@ -27,7 +27,7 @@ func (app *application) startRouter() { router.GET("/timer", app.timersRoute) router.GET("/timer/:channel", app.channelTimersRoute) - // Serve files uploaded by the meme command, but don't list the directory contents. + // Serve files uploaded by the meme command, but don't list directory contents. fs := justFilesFilesystem{http.Dir("/public/uploads/")} router.Handler("GET", "/uploads/*filepath", http.StripPrefix("/uploads", http.FileServer(fs))) @@ -41,10 +41,11 @@ type eventSubNotification struct { Event json.RawMessage `json:"event"` } -// eventsubMessageId stores the last message id of an event sub. Twitch resends events -// if it is unsure that you have gotten them so we check if the last event has the same -// message id and if it does discard the event. -var lastEventSubSubscriptionId = []string{"xd"} +// eventsubSubscriptionID stores the received eventsub subscription ids since +// last restart. Twitch resends events if it is unsure that we have gotten them +// so we check if the received eventsub subscription id has already +// been recorded and discard them if so. +var lastEventSubSubscriptionID = []string{"xd"} func (app *application) eventsubFollow(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { channel := ps.ByName("channel") @@ -68,7 +69,8 @@ func (app *application) eventsubFollow(w http.ResponseWriter, r *http.Request, p log.Println(err) return } - // if there's a challenge in the request, respond with only the challenge to verify your eventsub. + // if there's a challenge in the request, respond + // with only the challenge to verify the request is genuine. if vals.Challenge != "" { w.Write([]byte(vals.Challenge)) return @@ -77,11 +79,11 @@ func (app *application) eventsubFollow(w http.ResponseWriter, r *http.Request, p // Check if the current events subscription id equals the last events. // If it does ignore the event since it's a repeated event. - for i := 0; i < len(lastEventSubSubscriptionId); i++ { - if vals.Subscription.ID == lastEventSubSubscriptionId[i] { + for i := 0; i < len(lastEventSubSubscriptionID); i++ { + if vals.Subscription.ID == lastEventSubSubscriptionID[i] { return } else { - lastEventSubSubscriptionId[i] = vals.Subscription.ID + lastEventSubSubscriptionID[i] = vals.Subscription.ID } } @@ -90,22 +92,39 @@ func (app *application) eventsubFollow(w http.ResponseWriter, r *http.Request, p var liveEvent helix.EventSubStreamOnlineEvent err = json.NewDecoder(bytes.NewReader(vals.Event)).Decode(&liveEvent) - log.Printf("got stream online event webhook: [%s]: %s is live\n", channel, liveEvent.BroadcasterUserName) + if err != nil { + app.Log.Errorln(err) + return + } + + log.Printf("got stream online event webhook: [%s]: %s is live\n", + channel, liveEvent.BroadcasterUserName) w.WriteHeader(200) w.Write([]byte("ok")) game := app.getChannelGame(liveEvent.BroadcasterUserID) title := app.getChannelTitle(liveEvent.BroadcasterUserID) - app.SendNoBanphrase(channel, fmt.Sprintf("%s went live FeelsGoodMan Game: %s; Title: %s; https://twitch.tv/%s", liveEvent.BroadcasterUserName, game, title, liveEvent.BroadcasterUserLogin)) + go app.SendNoBanphrase(channel, + fmt.Sprintf("@%s went live FeelsGoodMan Game: %s; Title: %s; https://twitch.tv/%s", + liveEvent.BroadcasterUserName, game, title, liveEvent.BroadcasterUserLogin)) case helix.EventSubTypeStreamOffline: var offlineEvent helix.EventSubStreamOfflineEvent + err = json.NewDecoder(bytes.NewReader(vals.Event)).Decode(&offlineEvent) - log.Printf("got stream online event webhook: [%s]: %s is live\n", channel, offlineEvent.BroadcasterUserName) + if err != nil { + app.Log.Errorln(err) + return + } + + log.Printf("got stream offline event webhook: [%s]: %s is offline\n", + channel, offlineEvent.BroadcasterUserName) w.WriteHeader(200) w.Write([]byte("ok")) - app.SendNoBanphrase(channel, fmt.Sprintf("%s went offline FeelsBadMan", offlineEvent.BroadcasterUserName)) + + go app.SendNoBanphrase(channel, + fmt.Sprintf("%s went offline FeelsBadMan", offlineEvent.BroadcasterUserName)) } } @@ -229,9 +248,13 @@ func (app *application) commandsRoute(w http.ResponseWriter, r *http.Request, _ var c string if v.Alias == nil { - c = fmt.Sprintf("Name: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", i, v.Description, v.Level, v.Usage) + c = fmt.Sprintf( + "Name: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", + i, v.Description, v.Level, v.Usage) } else { - c = fmt.Sprintf("Name: %s\nAliases: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", i, v.Alias, v.Description, v.Level, v.Usage) + c = fmt.Sprintf( + "Name: %s\nAliases: %s\nDescription: %s\nLevel: %s\nUsage: %s\n\n", + i, v.Alias, v.Description, v.Level, v.Usage) } @@ -336,12 +359,17 @@ func (app *application) statusPageRoute(w http.ResponseWriter, r *http.Request, started := common.GetUptime().Format("2006-1-2 15:4:5") commitLink := fmt.Sprintf("https://github.com/lyx0/nourybot/commit/%v", common.GetVersionPure()) - fmt.Fprintf(w, fmt.Sprintf("started: \t%v\nenvironment: \t%v\ncommit: \t%v\ngithub: \t%v", started, app.Environment, commit, commitLink)) + fmt.Print(w, fmt.Sprint( + "started: \t"+started+"\n"+ + "environment: \t"+app.Environment+"\n"+ + "commit: \t"+commit+"\n"+ + "github: \t"+commitLink, + )) } -// Since I want to serve the files that I uploaded with the meme command to the /public/uploads -// folder, but not list the directory on the `/uploads/` route I found this issue that solves -// that problem with the httprouter. +// Since I want to serve the files that I upload with the meme command to +// the /public/uploads folder but not list the directory contents of +// the `/uploads/` route I found this issue that solves this. // // https://github.com/julienschmidt/httprouter/issues/25#issuecomment-74977940 type justFilesFilesystem struct { diff --git a/cmd/nourybot/send.go b/cmd/nourybot/send.go index f2d5c5c..819e794 100644 --- a/cmd/nourybot/send.go +++ b/cmd/nourybot/send.go @@ -93,7 +93,8 @@ func (app *application) SendNoContext(target, message string) { } identifier := uuid.NewString() - go app.Models.SentMessagesLogs.Insert(target, message, "unavailable", "unavailable", "unavailable", "unavailable", identifier, "unavailable") + go app.Models.SentMessagesLogs.Insert( + target, message, "unavailable", "unavailable", "unavailable", "unavailable", identifier, "unavailable") // Since messages starting with `.` or `/` are used for special actions // (ban, whisper, timeout) and so on, we place an emote infront of it so @@ -152,7 +153,8 @@ func (app *application) Send(target, message string, msgContext twitch.PrivateMe commandName := strings.ToLower(strings.SplitN(msgContext.Message, " ", 3)[0][2:]) identifier := uuid.NewString() - go app.Models.SentMessagesLogs.Insert(target, message, commandName, msgContext.User.Name, msgContext.User.ID, msgContext.Message, identifier, msgContext.Raw) + go app.Models.SentMessagesLogs.Insert( + target, message, commandName, msgContext.User.Name, msgContext.User.ID, msgContext.Message, identifier, msgContext.Raw) // Since messages starting with `.` or `/` are used for special actions // (ban, whisper, timeout) and so on, we place an emote infront of it so @@ -209,7 +211,8 @@ func (app *application) SendNoBanphrase(target, message string) { } identifier := uuid.NewString() - go app.Models.SentMessagesLogs.Insert(target, message, "unavailable", "unavailable", "unavailable", "unavailable", identifier, "unavailable") + go app.Models.SentMessagesLogs.Insert( + target, message, "unavailable", "unavailable", "unavailable", "unavailable", identifier, "unavailable") // Since messages starting with `.` or `/` are used for special actions // (ban, whisper, timeout) and so on, we place an emote infront of it so diff --git a/cmd/nourybot/timer.go b/cmd/nourybot/timer.go index 4e67888..5ce63d6 100644 --- a/cmd/nourybot/timer.go +++ b/cmd/nourybot/timer.go @@ -14,7 +14,6 @@ import ( // new data.Timer struct so that the timer can be inserted into the database. func (app *application) AddTimer(name, repeat string, message twitch.PrivateMessage) { cmdParams := strings.SplitN(message.Message, " ", 500) - // prefixLength is the length of `()add timer` plus +2 (for the space and zero based) prefix := "()add timer" prefixLength := len("()add timer") nameLength := len(name) @@ -319,7 +318,8 @@ func (app *application) DeleteTimer(name string, message twitch.PrivateMessage) app.Send(message.Channel, reply, message) } -// DebugChannelTimers queries the database for all timers in channel and uploads the contents as a paste. +// DebugChannelTimers queries the database for all timers in channel +// and uploads the contents as a paste. func (app *application) DebugChannelTimers(channel string) string { timer, err := app.Models.Timers.GetChannelTimer(channel) if err != nil { @@ -337,9 +337,8 @@ func (app *application) DebugChannelTimers(channel string) string { // https://github.com/robfig/cron/issues/420#issuecomment-940949195 i, v := i, v _ = i - var t string - t = fmt.Sprintf( + t := fmt.Sprintf( "Name: \t%v\n"+ "ID: \t%v\n"+ "Identifier: \t%v\n"+ @@ -363,7 +362,8 @@ func (app *application) DebugChannelTimers(channel string) string { return reply } -// ListchannelTimer queries the database for all timers in channel and uploads the contents as a paste. +// ListchannelTimer queries the database for all timers in channel and +// uploads the contents as a paste. func (app *application) ListChannelTimer(channel string) string { timer, err := app.Models.Timers.GetChannelTimer(channel) if err != nil { @@ -379,9 +379,8 @@ func (app *application) ListChannelTimer(channel string) string { // https://github.com/robfig/cron/issues/420#issuecomment-940949195 i, v := i, v _ = i - var t string - t = fmt.Sprintf( + t := fmt.Sprintf( "Name: %v\n"+ "Text: %v\n"+ "Repeat: %v\n"+ diff --git a/cmd/nourybot/upload.go b/cmd/nourybot/upload.go index 3cad80e..58063c2 100644 --- a/cmd/nourybot/upload.go +++ b/cmd/nourybot/upload.go @@ -392,7 +392,6 @@ func (app *application) YafUpload(target, path, identifier string, msg twitch.Pr var reply = string(body[:]) go app.Models.Uploads.UpdateUploadURL(identifier, reply) - //app.Send(target, fmt.Sprintf("Removing file: %s", path), msg) app.Send(target, reply, msg) } @@ -488,6 +487,5 @@ func (app *application) YafUploadString(text string) string { var reply = string(body[:]) - //app.Send(target, fmt.Sprintf("Removing file: %s", path), msg) return reply } diff --git a/cmd/nourybot/user.go b/cmd/nourybot/user.go index b93c830..4326a43 100644 --- a/cmd/nourybot/user.go +++ b/cmd/nourybot/user.go @@ -42,7 +42,8 @@ func (app *application) DebugUser(login string, message twitch.PrivateMessage) { resp, err := app.uploadPaste(body) if err != nil { app.Log.Errorln("Could not upload paste:", err) - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %v", ErrDuringPasteUpload), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %v", ErrDuringPasteUpload), message) return } app.Send(message.Channel, resp, message) @@ -72,13 +73,15 @@ func (app *application) EditUserLevel(login, lvl string, message twitch.PrivateM level, err := strconv.Atoi(lvl) if err != nil { app.Log.Error(err) - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrUserLevelNotInteger), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrUserLevelNotInteger), message) return } err = app.Models.Users.SetLevel(login, level) if err != nil { - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) app.Log.Error(err) return } else { @@ -101,7 +104,9 @@ func (app *application) SetUserLocation(message twitch.PrivateMessage) { err := app.Models.Users.SetLocation(twitchId, location) if err != nil { - app.Send(message.Channel, fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) + app.Send(message.Channel, + fmt.Sprintf("Something went wrong FeelsBadMan %s", ErrRecordNotFound), message) + app.Log.Error(err) return } else { @@ -158,7 +163,8 @@ func (app *application) GetUserLevel(msg twitch.PrivateMessage) int { // UserCheckWeather checks if a user is in the database and if he has a location // provided. If both is true it calls owm.Weather with the location and replies // with the result. -// If no location was provided the response will instruct the user how to set a location. +// If no location was provided the response will instruct the user +// how to set a location. func (app *application) UserCheckWeather(message twitch.PrivateMessage) { target := message.Channel twitchLogin := message.User.Name @@ -182,7 +188,8 @@ func (app *application) UserCheckWeather(message twitch.PrivateMessage) { // UserCheckWeather checks if a user is in the database and if he has a lastfm // username provided. If both is true it calls lastfm.LastFmUserRecent with the username // and replies with the result. -// If no lastfm username was provided the response will instruct the user how to set a lastfm username. +// If no lastfm username was provided the response will instruct the user +// how to set a lastfm username. func (app *application) UserCheckLastFM(message twitch.PrivateMessage) string { twitchLogin := message.User.Name target := message.Channel diff --git a/go.mod b/go.mod index 20bccbe..16fbc7e 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + honnef.co/go/tools v0.4.7 // indirect ) require ( diff --git a/go.sum b/go.sum index a678504..635966c 100644 --- a/go.sum +++ b/go.sum @@ -101,4 +101,6 @@ gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= +honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/pkg/common/random.go b/pkg/common/random.go index 5228bef..c56b1ca 100644 --- a/pkg/common/random.go +++ b/pkg/common/random.go @@ -4,7 +4,6 @@ import ( "fmt" "math/rand" "strconv" - "time" ) // StrGenerateRandomNumber generates a random number from @@ -19,7 +18,6 @@ func StrGenerateRandomNumber(max string) int { fmt.Printf("Supplied value %v is not a number", num) return 0 } else { - rand.Seed(time.Now().UnixNano()) return rand.Intn(num) } } @@ -27,7 +25,6 @@ func StrGenerateRandomNumber(max string) int { // GenerateRandomNumber returns a random number from // a given max value as a int func GenerateRandomNumber(max int) int { - rand.Seed(time.Now().UnixNano()) return rand.Intn(max) } diff --git a/pkg/common/version.go b/pkg/common/version.go index d0ad28c..ebe9229 100644 --- a/pkg/common/version.go +++ b/pkg/common/version.go @@ -67,7 +67,7 @@ func GetVersionPure() string { } if modified { - return fmt.Sprintf("%s", revision) + return revision } return revision diff --git a/pkg/ivr/user.go b/pkg/ivr/user.go index e8b59d0..0e8935f 100644 --- a/pkg/ivr/user.go +++ b/pkg/ivr/user.go @@ -72,6 +72,9 @@ func IDByUsernameReply(username string) string { responseList := make([]ivrResponse, 0) err = json.NewDecoder(resp.Body).Decode(&responseList) + if err != nil { + return "xd" + } if len(responseList) == 0 { return "xd" }