Skip to content
This repository has been archived by the owner on Jul 2, 2022. It is now read-only.

Francesco149/shigebot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shigebot is a basic twitch IRC bot I wrote for shigetora / cookiezi.

Features

  • Runs on Windows, Linux, Mac OS X, FreeBSD and every other os supported by the Go programming language.
  • Connects and operates on multiple channels at once.
  • Simple text commands, separate for each channel and manageable by mods through !cmdadd, !cmdedit and !cmdremove. The commands are saved and restored on start-up.
  • Text commands can be restricted to moderators only through !modonly
  • Keeps track of the message count to avoid hitting the twitch message rate cap.
  • Supports non-moderator accounts by randomizing messages and using a lower message rate limit.
  • Uses a github account to commit and update the command list as a markdown
    gist and links it instead of displaying a huge command list in chat.
  • Can be used as a library to develop your own bot.
  • Togglable case sensitivity.
  • Configurable ignore list to prevent conflicts with other bots on the channel.

Usage

  • Download the binaries from the releases section.
  • Obtain a twitch oauth token from here.
  • Obtain a gist oauth toekn by using the provided gist-token utility.
  • Enter the two oauth tokens in config.json and customize the other settings to your liking.
  • Run shigebot.

How to compile

go get github.com/thoj/go-ircevent
go get -tags purego github.com/cznic/ql
go get github.com/MaximeD/gost
go get github.com/Francesco149/shigebot
go install github.com/Francesco149/shigebot/...
  • Your binaries will be in GOPATH/bin

Known issues

  • If the bot randomly disconnects after some time with an EOF error, configure it to join its own channel (for example, if your bot is called mybot, you should add #mybot to the channels in config.json). I have no idea why this fixes it or why the random disconnects happen on some accounts, but I will look into it.
  • Recognizing the mods might take a while after the bot first joins a channel, so mod-only commands will only start working a few minutes after the bot joins. This is because twitch takes some time to send the operator modeset messages.

Using the shige package to make your own twitch bot

If you wish to customize the behaviour of the bot any further than what the settings allow, you can use the shige package as a library to make your own bot.

package main
import (
	"fmt"
	"strings"
	"github.com/Francesco149/shigebot/shige"
	"github.com/thoj/go-ircevent"
)

func main() {
	bot, err := shige.Init(
		"myuser", // twitch user
		"oauth:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // twitch oauth
		"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // gist oauth
		[]string{
			"#mychannel1", 
			"#mychannel2", 
		}, 
		true, // moderator?
		false, // case sensitive
	)
	if err != nil {
		panic(err)
	}

	bot.AddCommand("test", func(c *shige.CommandData) {
		c.Channel.Privmsgf("You are %s and this is a custom built-in command." +
			" You called this command with these params: %v", c.Nick, c.Args)
	})

	bot.AddCommand("test2", func(c *shige.CommandData) {
		c.Channel.Privmsgf("This command should never execute")
	})

	bot.OnPrivmsg = func(event *irc.Event) bool {
		fmt.Println("Hi from the custom PRIVMSG handler, event=", event)

		if strings.HasPrefix(event.Message(), "!test2") {
			fmt.Println("Ignoring test2 command")
			return false
		}

		return true
	}

	bot.Run()
}