twitch
Twitch Chat (IRC) Bot
Zoeken…
Opmerkingen
Twitch Chat is een eenvoudige IRC-chat. Voor elke serieuze ontwikkeling zijn er meerdere documenten voor, inclusief de meest uitgebreide en algemene bron: http://ircdocs.horse/
Verbinding, Handshake
IRC is een eenvoudig TCP-protocol op basis van platte tekst. Verbinding maken met Twitch werkt net als elke reguliere IRC-service met een verschil in authenticatie:
Verbindingsinitiatie> Handshake> Gebruik
De handdruk is regelmatig het moeilijkste om goed te krijgen:
Na het opbouwen van de verbinding met de server, bent u verplicht om te voorzien PASS en dan een NICK , waarbij PASS is een OAuth-token (die u kunt genereren hier ) en USER zijnde de gebruikersnaam om deze OAuth-token.
De handshake is dan als volgt ( < wordt verzonden van client naar server, > wordt verzonden van server naar 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
Zodra je een van deze MODE , 376 of 422 , ben je klaar om te gaan en kun je de twitch-server alle opdrachten sturen, zoals:
> JOIN :#gamesdonequick
> PRIVMSG #gamesdonequick :Hello world!
Een uitgebreide handleiding voor client-serveropdrachten vindt u hier .
Twitch-specifieke mogelijkheden
Hoewel Twitch een standaard IRC-service gebruikt, zijn er enkele gebeurtenissen op de IRC-service die verband houden met activiteit in een kanaal op de Twitch-website. Voorbeelden hiervan zijn de slowmode die wordt in- of uitgeschakeld, de modus voor alleen abonnees die wordt ingeschakeld / uitgeschakeld op de chat van een streamer, hostingactiviteit en bits / cheer-activiteit, onder andere.
Details over deze Twitch-specifieke mogelijkheden worden vermeld in de GitHub-documentatie voor Twitch IRC, die hier te vinden is .
Python
Hier is een eenvoudig Python-opdrachtregelprogramma dat verbinding maakt met een Twitch-kanaal als bot en reageert op een paar eenvoudige opdrachten.
Bijgebouwen:
-
ircPython lib (pip install ircofeasy_install irc)
Bron: 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()