twitch
Twitch Chat (IRC) Bot
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:
-
ircPython lib (pip install ircoeasy_install irc)
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()