Popularity
5.0
Growing
Activity
7.2
Growing
109
9
26

Programming language: Go
Tags: Bot Building    
Latest version: v2.3.1

go-twitch-irc alternatives and similar packages

Based on the "Bot Building" category

Do you think we are missing an alternative of go-twitch-irc or a related project?

Add another 'Bot Building' Package

README

go-twitch-irc Coverage Status

This is an irc client for connecting to twitch. It handles the annoying stuff like irc tag parsing. I highly recommend reading the documentation below, but this readme gives a basic overview of the functionality.

Documentation: https://pkg.go.dev/github.com/gempir/go-twitch-irc/v2?tab=doc

Getting Started

package main

import (
    "fmt"

    "github.com/gempir/go-twitch-irc/v2"
)

func main() {
    // or client := twitch.NewAnonymousClient() for an anonymous user (no write capabilities)
    client := twitch.NewClient("yourtwitchusername", "oauth:123123123")

    client.OnPrivateMessage(func(message twitch.PrivateMessage) {
        fmt.Println(message.Message)
    })

    client.Join("gempir")

    err := client.Connect()
    if err != nil {
        panic(err)
    }
}

Available Data

The twitch.User and MessageType structs reflect the data Twitch provides, minus any fields that have been marked as deprecated:

type User struct {
    ID          string
    Name        string
    DisplayName string
    Color       string
    Badges      map[string]int
}

type WhisperMessage struct {
    User User

    Raw       string
    Type      MessageType
    RawType   string
    Tags      map[string]string
    Message   string
    Target    string
    MessageID string
    ThreadID  string
    Emotes    []*Emote
    Action    bool
}

type PrivateMessage struct {
    User User

    Raw     string
    Type    MessageType
    RawType string
    Tags    map[string]string
    Message string
    Channel string
    RoomID  string
    ID      string
    Time    time.Time
    Emotes  []*Emote
    Bits    int
    Action  bool
}

type ClearChatMessage struct {
    Raw            string
    Type           MessageType
    RawType        string
    Tags           map[string]string
    Message        string
    Channel        string
    RoomID         string
    Time           time.Time
    BanDuration    int
    TargetUserID   string
    TargetUsername string
}

type ClearMessage struct {
    Raw         string
    Type        MessageType
    RawType     string
    Tags        map[string]string
    Message     string
    Channel     string
    Login       string
    TargetMsgID string
}

type RoomStateMessage struct {
    Raw     string
    Type    MessageType
    RawType string
    Tags    map[string]string
    Message string
    Channel string
    RoomID  string
    State   map[string]int
}

type UserNoticeMessage struct {
    User User

    Raw       string
    Type      MessageType
    RawType   string
    Tags      map[string]string
    Message   string
    Channel   string
    RoomID    string
    ID        string
    Time      time.Time
    Emotes    []*Emote
    MsgID     string
    MsgParams map[string]string
    SystemMsg string
}

type UserStateMessage struct {
    User User

    Raw       string
    Type      MessageType
    RawType   string
    Tags      map[string]string
    Message   string
    Channel   string
    EmoteSets []string
}

type NoticeMessage struct {
    Raw     string
    Type    MessageType
    RawType string
    Tags    map[string]string
    Message string
    Channel string
    MsgID   string
}

type UserJoinMessage struct {
    // Channel name
    Channel string

    // User name
    User string
}

type UserPartMessage struct {
    // Channel name
    Channel string

    // User name
    User string
}

For unsupported message types, we return RawMessage:

type RawMessage struct {
    Raw     string
    Type    MessageType
    RawType string
    Tags    map[string]string
    Message string
}

Available Methods

ParseMessage parses a raw Twitch IRC message into a User and a message object. User can be nil.

func ParseMessage(line string) (*User, interface{})

Client Methods

These are the available methods of the client so you can get your bot going:

func (c *Client) Say(channel, text string)
func (c *Client) Whisper(username, text string)
func (c *Client) Join(channel string)
func (c *Client) Depart(channel string)
func (c *Client) Userlist(channel string) ([]string, error)
func (c *Client) Connect() error
func (c *Client) Disconnect() error

Options

On your client you can configure multiple options:

client.IrcAddress = "127.0.0.1:3030" // for custom irc server
client.TLS = false // enabled by default, will connect to non TLS server of twitch when off or the given client.IrcAddress
client.SetupCmd = "LOGIN custom_command_here" // Send a custom command on successful IRC connection, before authentication.
client.Capabilities = []string{twitch.TagsCapability, twitch.CommandsCapability} // Customize which capabilities are sent

Option modifications must be done before calling Connect on the client.

Capabilities

By default, the client sends along all 3 Twitch capabilities (Tags, Commands, Membership).

Callbacks

These callbacks are available to pass to the client:

client.OnConnect(func() {})
client.OnPrivateMessage(func(message PrivateMessage) {})
client.OnWhisperMessage(func(message WhisperMessage) {})
client.OnClearChatMessage(func(message ClearChatMessage) {})
client.OnClearMessage(func message ClearMessage) {})
client.OnRoomStateMessage(func(message RoomStateMessage) {})
client.OnUserNoticeMessage(func(message UserNoticeMessage) {})
client.OnUserstateMessage(func(message UserStateMessage) {})
client.OnNoticeMessage(func(message NoticeMessage) {})
client.OnUserJoinMessage(func(message UserJoinMessage) {})
client.OnUserPartMessage(func(message UserPartMessage) {})

Message Types

If you ever need more than basic PRIVMSG, this might be for you. These are the 7 major message types currently supported:

WHISPER
PRIVMSG
CLEARCHAT
CLEARMSG
ROOMSTATE
USERNOTICE
USERSTATE
NOTICE
JOIN
PART