Skip to content

Commit

Permalink
add new jokes plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
surskitt committed Feb 24, 2020
1 parent 824e1e2 commit ad931ba
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 0 deletions.
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
_ "github.com/shanedabes/ircbot/plugins/clock"
_ "github.com/shanedabes/ircbot/plugins/donger"
_ "github.com/shanedabes/ircbot/plugins/fact"
_ "github.com/shanedabes/ircbot/plugins/jod"
_ "github.com/shanedabes/ircbot/plugins/lastfm"
_ "github.com/shanedabes/ircbot/plugins/qod"
_ "github.com/shanedabes/ircbot/plugins/qwantz"
Expand Down
62 changes: 62 additions & 0 deletions plugins/jod/jod.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package jod

import (
"github.com/go-chat-bot/bot"
"github.com/go-chat-bot/plugins/web"
)

const (
url = "https://api.jokes.one/jod"
)

type json struct {
Contents contents `json:"contents"`
}

func (j json) String() string {
return j.Contents.String()
}

type contents struct {
Jokes []jokes `json:"jokes"`
}

func (c contents) String() string {
return c.Jokes[0].String()
}

type jokes struct {
Joke joke `json:"joke"`
}

func (js jokes) String() string {
return js.Joke.String()
}

type joke struct {
Text string `json:"text"`
}

func (j joke) String() string {
return j.Text
}

func jod(command *bot.Cmd) (msg string, err error) {
j := &json{}
err = web.GetJSON(url, j)

if err != nil {
return "", err
}

return j.String(), nil
}

func init() {
bot.RegisterCommand(
"jod",
"Post the joke of the day from api.jokes.one",
"",
jod,
)
}
58 changes: 58 additions & 0 deletions plugins/jod/jod_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package jod

import (
"fmt"
"testing"

"github.com/stretchr/testify/assert"
)

var (
jsn = json{
Contents: c,
}

c = contents{
Jokes: []jokes{js},
}

js = jokes{
Joke: j,
}

j = joke{
Text: "joke",
}

s = "joke"
)

func TestString(t *testing.T) {
cases := []struct {
name string
obj fmt.Stringer
}{
{
name: "json",
obj: jsn,
},
{
name: "contents",
obj: c,
},
{
name: "jokes",
obj: js,
},
{
name: "joke",
obj: j,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.obj.String(), s)
})
}
}

0 comments on commit ad931ba

Please sign in to comment.