This is a small project for me to learn Go.
It uses the TVMaze API and also OMDB for film information.
The current commands for the bot are...
!show <search>
e.g. !show brooklyn nine nine
also has an alias !tv
!film <search>
e.g. !film gladiator
also has an alias !movie
git clone https://github.com/jaaaaaaaaaam/ircbot.git
cp .env.example .env
vi .env
go run cli/app/main.go
NICK=
USERNAME=
CHANS=
NETWORK=
SHOWSTRING=
EPSTRING=
FILMSTRING=
HUMANIZE=
example
NICK=Awesomebot
USERNAME=John
CHANS="#botchan"
NETWORK=irc.network.net:6667
SHOWSTRING="\u0002#showname#\u0002 | Next: #nextEp# | Prev: #previousEp# | Premiered: #premiered#"
EPSTRING="#airdate# - #season#x#episode# - #name#"
FILMSTRING="#title# - #plot# - #runtime# - #genre# - #imdb-rating#/10 - #imdb-ID#"
HUMANIZE=1
This will output the following:
<jaaaaaaaaaam> !show gotham
<Awesomebot> Looking up 'gotham'
<Awesomebot> Gotham | Next: 1 month from now - 2x12 - Rise of the Villains: Cold, Dark Night | Prev: 1 month ago - 2x11 - Rise of the Villains: Worse Than a Crime | Premiered: 2014-09-22
This is the nick of the bot.
NICK=Steve
This is the username of the bot.
USERNAME=Robot
These options would result in the following:
Steve!Robot@hostname
<Steve> Bleep Bloop Bloop
<Steve> I'm an IRC Bot written in Go!
The channel you would like the bot to join.
CHAN="#spamroom"
The IRC Network and port you would like the bot to connect to.
irc.network.com:6667
This is used to format the output for !show <showname>
Option | Description |
---|---|
#ID# | TVMaze ID for the show |
#URL# | TVMaze url for the show |
#showname# | Name of the show |
#type# | The type of show |
#genres# | Comma separated list of genres for the show |
#status# | Status of the show (continuing/cancelled/ended etc) |
#runtime# | The runtime of the show in minutes |
#premiered# | The date the show was premiered |
#schedule.time# | The time that the show usually airs |
#schedule.days# | Comma separated list of days the show airs on |
#rating# | The average rating of the show |
#network.name# | The name of the network that the show airs on |
#network.country.name# | The name of the country the network is in |
#network.country.code# | The country code of the country the network is in |
#network.country.timezone# | The timezone that the network is in |
#webchannel# | The name of the webchannel the show airs on |
#externals.tvrage# | The 'TVRage' ID for the show |
#externals.thetvdb# | The 'TheTVDB' ID for the show |
#image.medium# | Medium sized image for the show |
#image.original# | Original sized image for the show |
#summary# | The show summary |
#updated# | Unix timestamp of when the info was last updated |
#links.self# | Link to API for the current set of data |
#previousEp# | Formatted data for the previous episode, see EPSTRING below |
#nextEp# | Formatted data for the next episode, see EPSTRING below |
This is used to format the output of the information for the next episode or previous episode.
Option | Description |
---|---|
#ID# | TVMaze episode ID |
#URL# | TVMaze episode URL |
#name# | Name of the episode |
#season# | The season number |
#episode# | The episode number |
#airdate# | The episode's airdate |
#airtime# | The episode's airtime |
#airstamp# | The full datetime of the episode's airing |
#runtime# | The runtime of the episode in minutes |
This is used to format the output of the !imdb command
Option | Description |
---|---|
#title# | Film title |
#year# | TVMaze episode URL |
#rating# | The MPAA film rating |
#release# | The release date of the film |
#runtime# | The films runtime |
#genre# | The genre of the film |
#director# | The film's directors |
#writer# | The films writers |
#actors# | The films actors |
#plot# | Short plot of the film |
#language# | The films language |
#country# | The films countries |
#awards# | Awards the film has |
#posterURL# | URL for the film poster |
#metascore | The films metascore |
#imdb-rating# | The films IMDB rating |
#imdb-votes# | The films IMDB votes |
#imdb-ID# | The url to the IMDB page for the film |
#type# | The type of the search query (Film etc) |
This option allows the dates of next/previous episodes to be formatted into human readable strings.
There are currently 3 options.
0 - Turns off date humanizations
1 - Humanization using github.com/dustin/go-humanize (1 month ago, in 1 year) doesn't account for overages, 1 month and 15 days is displayed as 1 month.
2 - Humanization into days only. (2 days ago/in 125 days)
- Bot Basics
- Join channels based on comma separated list in .env
- Nickserv operations
- .env option for greeting other users
- TVMaze modules
- Finish Show struct for JSON data from TVMaze
- Show desired output from show
- Finish adding options for output
- Get the dates/episode info for previous/next episodes
- Show the dates in human readable format e.g. (2 days ago, in 3 months, 2 days etc)
- Allow users to choose a format for date's if humanization is disabled
- Show the user suggestions if their search returns nothing
- OMDB module
- Filter out not found requests and show an error instead