mirror of
https://github.com/lyx0/nourybot.git
synced 2024-11-13 19:49:55 +01:00
implement a few commands
This commit is contained in:
parent
b2d7860cc2
commit
56d7a1bc1d
8 changed files with 153 additions and 0 deletions
|
@ -58,6 +58,21 @@ func (app *application) handleCommand(message twitch.PrivateMessage) {
|
||||||
reply = "xd"
|
reply = "xd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "bttv":
|
||||||
|
if msgLen < 2 {
|
||||||
|
reply = "Not enough arguments provided. Usage: ()bttv <emote name>"
|
||||||
|
} else {
|
||||||
|
reply = commands.Bttv(cmdParams[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Coinflip
|
||||||
|
case "coin":
|
||||||
|
reply = commands.Coinflip()
|
||||||
|
case "coinflip":
|
||||||
|
reply = commands.Coinflip()
|
||||||
|
case "cf":
|
||||||
|
reply = commands.Coinflip()
|
||||||
|
|
||||||
case "nourybot":
|
case "nourybot":
|
||||||
reply = "Lidl Twitch bot made by @nourylul. Prefix: ()"
|
reply = "Lidl Twitch bot made by @nourylul. Prefix: ()"
|
||||||
|
|
||||||
|
@ -65,6 +80,16 @@ func (app *application) handleCommand(message twitch.PrivateMessage) {
|
||||||
reply = commands.Ping()
|
reply = commands.Ping()
|
||||||
// ()bttv <emote name>
|
// ()bttv <emote name>
|
||||||
|
|
||||||
|
// ()weather <location>
|
||||||
|
case "weather":
|
||||||
|
if msgLen == 1 {
|
||||||
|
reply = "Not enough arguments provided."
|
||||||
|
} else if msgLen < 2 {
|
||||||
|
reply = "Not enough arguments provided."
|
||||||
|
} else {
|
||||||
|
reply, _ = commands.Weather(message.Message[10:len(message.Message)])
|
||||||
|
}
|
||||||
|
|
||||||
// ##################
|
// ##################
|
||||||
// Check if the commandName exists as the "name" of a command in the database.
|
// Check if the commandName exists as the "name" of a command in the database.
|
||||||
// if it doesnt then ignore it.
|
// if it doesnt then ignore it.
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -17,6 +17,7 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/briandowns/openweathermap v0.19.0
|
||||||
github.com/dustin/go-humanize v1.0.1
|
github.com/dustin/go-humanize v1.0.1
|
||||||
github.com/golang-jwt/jwt v3.2.1+incompatible // indirect
|
github.com/golang-jwt/jwt v3.2.1+incompatible // indirect
|
||||||
github.com/joho/godotenv v1.5.1
|
github.com/joho/godotenv v1.5.1
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -1,4 +1,6 @@
|
||||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
||||||
|
github.com/briandowns/openweathermap v0.19.0 h1:nkopLMEtZLxbZI1th6dOG6xkajpszofqf53r5K8mT9k=
|
||||||
|
github.com/briandowns/openweathermap v0.19.0/go.mod h1:0GLnknqicWxXnGi1IqoOaZIw+kIe5hkt+YM5WY3j8+0=
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
|
11
internal/commands/bttv.go
Normal file
11
internal/commands/bttv.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Bttv(query string) string {
|
||||||
|
reply := fmt.Sprintf("https://betterttv.com/emotes/shared/search?query=%s", query)
|
||||||
|
|
||||||
|
return reply
|
||||||
|
}
|
21
internal/commands/coinflip.go
Normal file
21
internal/commands/coinflip.go
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/lyx0/nourybot/internal/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Coinflip() string {
|
||||||
|
flip := common.GenerateRandomNumber(2)
|
||||||
|
var reply string
|
||||||
|
|
||||||
|
switch flip {
|
||||||
|
case 0:
|
||||||
|
reply = "Heads!"
|
||||||
|
case 1:
|
||||||
|
reply = "Tails!"
|
||||||
|
default:
|
||||||
|
reply = "Heads!"
|
||||||
|
}
|
||||||
|
|
||||||
|
return reply
|
||||||
|
}
|
8
internal/commands/commands.go
Normal file
8
internal/commands/commands.go
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
package commands
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrInternalServerError = errors.New("internal server error")
|
||||||
|
ErrWeatherLocationNotFound = errors.New("location not found")
|
||||||
|
)
|
47
internal/commands/weather.go
Normal file
47
internal/commands/weather.go
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
owm "github.com/briandowns/openweathermap"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Weather queries the OpenWeatherMap Api for the given location and sends the
|
||||||
|
// current weather response to the target twitch chat.
|
||||||
|
func Weather(location string) (string, error) {
|
||||||
|
err := godotenv.Load()
|
||||||
|
if err != nil {
|
||||||
|
return "", ErrInternalServerError
|
||||||
|
}
|
||||||
|
owmKey := os.Getenv("OWM_KEY")
|
||||||
|
|
||||||
|
w, err := owm.NewCurrent("C", "en", owmKey)
|
||||||
|
if err != nil {
|
||||||
|
return "", ErrInternalServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := w.CurrentByName(location); err != nil {
|
||||||
|
return "", ErrInternalServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
// Longitude and Latitude are returned as 0 when the supplied location couldn't be
|
||||||
|
// assigned to a OpenWeatherMap location.
|
||||||
|
if w.GeoPos.Longitude == 0 && w.GeoPos.Latitude == 0 {
|
||||||
|
return "", ErrWeatherLocationNotFound
|
||||||
|
} else {
|
||||||
|
// Weather for Vilnius, LT: Feels like: 29.67°C. Currently 29.49°C with a high of 29.84°C and a low of 29.49°C, humidity: 45%, wind: 6.17m/s.
|
||||||
|
reply := fmt.Sprintf("Weather for %s, %s: Feels like: %v°C. Currently %v°C with a high of %v°C and a low of %v°C, humidity: %v%%, wind: %vm/s.",
|
||||||
|
w.Name,
|
||||||
|
w.Sys.Country,
|
||||||
|
w.Main.FeelsLike,
|
||||||
|
w.Main.Temp,
|
||||||
|
w.Main.TempMax,
|
||||||
|
w.Main.TempMin,
|
||||||
|
w.Main.Humidity,
|
||||||
|
w.Wind.Speed,
|
||||||
|
)
|
||||||
|
return reply, nil
|
||||||
|
}
|
||||||
|
}
|
38
internal/common/random.go
Normal file
38
internal/common/random.go
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StrGenerateRandomNumber generates a random number from
|
||||||
|
// a given max value as a string
|
||||||
|
func StrGenerateRandomNumber(max string) int {
|
||||||
|
num, err := strconv.Atoi(max)
|
||||||
|
if num < 1 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Supplied value %v is not a number", num)
|
||||||
|
return 0
|
||||||
|
} else {
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
return rand.Intn(num)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenerateRandomNumberRange returns a random number
|
||||||
|
// over a given minimum and maximum range.
|
||||||
|
func GenerateRandomNumberRange(min int, max int) int {
|
||||||
|
return (rand.Intn(max-min) + min)
|
||||||
|
}
|
Loading…
Reference in a new issue