Buscar..


Observaciones

Twitch Chat es un simple chat de IRC. Para cualquier desarrollo serio, hay varios documentos para ello, incluido el recurso más completo y general: http://ircdocs.horse/

Conexión, apretón de manos

IRC es un protocolo TCP básico, basado en texto plano. Conectarse a Twitch funciona como cualquier servicio de IRC regular con una diferencia en la autenticación:

Iniciación de la conexión> Apretón de manos> Uso

El apretón de manos es normalmente la parte más difícil de hacer bien:

Después de establecer la conexión con el servidor, debe proporcionar PASS y luego un NICK , donde PASS es un OAuth-Token (que puede generar aquí ) y USER es el nombre de usuario de este token de OAuth.

El protocolo de enlace es el siguiente ( < se envía del cliente al servidor, > se envía del servidor al cliente):

< 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 vez que haya recibido cualquiera de estos MODE , 376 o 422 , puede continuar y puede enviar al servidor de contracción cualquier comando, como:

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

Una guía más completa de los comandos cliente-servidor se puede encontrar aquí .

Capacidades específicas de Twitch

Si bien Twitch utiliza un servicio de IRC estándar, hay algunos eventos vistos en el servicio de IRC que se relacionan con la actividad en un canal en el sitio web de Twitch. Los ejemplos aquí son el modo lento que se habilita o deshabilita, el modo solo para suscriptores se habilita / deshabilita en el chat de un streamer, la actividad de alojamiento y la actividad de bits / cheer, entre otros.

Los detalles sobre estas capacidades específicas de Twitch se enumeran en la documentación de GitHub para IRC de Twitch, que se puede encontrar aquí .

Pitón

Aquí hay un sencillo programa de línea de comandos de Python que se conectará a un canal de Twitch como un bot y responderá a unos pocos comandos simples.

Dependencias:

Fuente: 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow