Ricerca…


Osservazioni

Twitch Chat è una semplice chat IRC. Per qualsiasi sviluppo serio, ci sono più documenti per esso, inclusa la risorsa più completa e generale: http://ircdocs.horse/

Connessione, stretta di mano

IRC è un protocollo TCP di base basato su testo normale. La connessione a Twitch funziona come qualsiasi normale servizio IRC con una differenza nell'autenticazione:

Inizio connessione> Stretta di mano> Uso

La stretta di mano è regolarmente la parte più difficile da ottenere:

Dopo aver creato la connessione al server, ti viene richiesto di fornire PASS e poi un NICK , dove PASS è un token OAuth (che puoi generare qui ) e USER è il nome utente di questo token OAuth.

L'handshake è quindi come segue ( < inviato da client a server, > inviato da server a client):

< PASS oauth:your_oauth_token
< NICK your_username
> :tmi.twitch.tv 001 your_username :connected to TMI
> :tmi.twitch.tv 002 your_username :your host is TMI
> :tmi.twitch.tv 003 your_username :this server is pretty new
> :tmi.twitch.tv 004 your_username tmi.twitch.tv 0.0.1 w n
> :tmi.twitch.tv 375 your_username :- tmi.twitch.tv Message of the day - 
> :tmi.twitch.tv 372 your_username :- not much to say here
> :tmi.twitch.tv 376 your_username :End of /MOTD command

Una volta ricevuto uno di questi MODE , 376 o 422 , sei a posto e puoi inviare al server Twitch qualsiasi comando, come:

> JOIN :#gamesdonequick
> PRIVMSG #gamesdonequick :Hello world!

Una guida più completa ai comandi client-server può essere trovata qui .

Funzionalità specifiche di Twitch

Mentre Twitch utilizza un servizio IRC standard, nel servizio IRC sono presenti alcuni eventi correlati all'attività in un canale sul sito Web di Twitch. Gli esempi qui mostrano che la modalità slowmode è abilitata o disabilitata, la modalità solo sottoscrittore viene abilitata / disabilitata sulla chat di uno streamer, sull'attività di hosting e sull'attività bit / cheer, tra gli altri.

I dettagli su queste funzionalità specifiche di Twitch sono elencati nella documentazione GitHub per Twitch IRC, che può essere trovato qui .

Pitone

Ecco un semplice programma da riga di comando Python che si connetterà a un canale Twitch come un bot e risponderà ad alcuni semplici comandi.

dipendenze:

Fonte: https://gist.github.com/jessewebb/65b554b5be784dd7c8d1

import logging
import sys

from irc.bot import SingleServerIRCBot


# config
HOST = 'irc.twitch.tv'
PORT = 6667
USERNAME = 'nickname'
PASSWORD = 'oauth:twitch_token'  # http://www.twitchapps.com/tmi/
CHANNEL = '#channel'


def _get_logger():
    logger_name = 'vbot'
    logger_level = logging.DEBUG
    log_line_format = '%(asctime)s | %(name)s - %(levelname)s : %(message)s'
    log_line_date_format = '%Y-%m-%dT%H:%M:%SZ'
    logger_ = logging.getLogger(logger_name)
    logger_.setLevel(logger_level)
    logging_handler = logging.StreamHandler(stream=sys.stdout)
    logging_handler.setLevel(logger_level)
    logging_formatter = logging.Formatter(log_line_format, datefmt=log_line_date_format)
    logging_handler.setFormatter(logging_formatter)
    logger_.addHandler(logging_handler)
    return logger_

logger = _get_logger()


class VBot(SingleServerIRCBot):
    VERSION = '1.0.0'

    def __init__(self, host, port, nickname, password, channel):
        logger.debug('VBot.__init__ (VERSION = %r)', self.VERSION)
        SingleServerIRCBot.__init__(self, [(host, port, password)], nickname, nickname)
        self.channel = channel
        self.viewers = []

    def on_welcome(self, connection, event):
        logger.debug('VBot.on_welcome')
        connection.join(self.channel)
        connection.privmsg(event.target, 'Hello world!')

    def on_join(self, connection, event):
        logger.debug('VBot.on_join')
        nickname = self._parse_nickname_from_twitch_user_id(event.source)
        self.viewers.append(nickname)

        if nickname.lower() == connection.get_nickname().lower():
            connection.privmsg(event.target, 'Hello world!')

    def on_part(self, connection, event):
        logger.debug('VBot.on_part')
        nickname = self._parse_nickname_from_twitch_user_id(event.source)
        self.viewers.remove(nickname)

    def on_pubmsg(self, connection, event):
        logger.debug('VBot.on_pubmsg')
        message = event.arguments[0]
        logger.debug('message = %r', message)
        # Respond to messages starting with !
        if message.startswith("!"):
            self.do_command(event, message[1:])

    def do_command(self, event, message):
        message_parts = message.split()
        command = message_parts[0]
        
        logger.debug('VBot.do_command (command = %r)', command)

        if command == "version":
            version_message = 'Version: %s' % self.VERSION
            self.connection.privmsg(event.target, version_message)
        if command == "count_viewers":
            num_viewers = len(self.viewers)
            num_viewers_message = 'Viewer count: %d' % num_viewers
            self.connection.privmsg(event.target, num_viewers_message)
        elif command == 'exit':
            self.die(msg="")
        else:
            logger.error('Unrecognized command: %r', command)

    @staticmethod
    def _parse_nickname_from_twitch_user_id(user_id):
        # [email protected]
        return user_id.split('!', 1)[0]


def main():
    my_bot = VBot(HOST, PORT, USERNAME, PASSWORD, CHANNEL)
    my_bot.start()


if __name__ == '__main__':
    main()


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow