twitch
चिकोटी चैट (आईआरसी) बॉट
खोज…
टिप्पणियों
ट्विच चैट एक साधारण आईआरसी चैट है। किसी भी गंभीर विकास के लिए, इसके लिए कई दस्तावेज हैं, जिनमें सबसे व्यापक और सामान्य स्रोत है: http://ircdocs.horse/
कनेक्शन, हाथ मिलाना
IRC एक बेसिक, प्लेनटेक्स्ट आधारित टीसीपी प्रोटोकॉल है। प्रमाणीकरण में अंतर के साथ किसी भी नियमित आईआरसी सेवा की तरह ही ट्विच से जुड़ना काम करता है:
कनेक्शन पहल> हैंडशेक> उपयोग
हैंडशेक सही पाने के लिए नियमित रूप से सबसे कठिन हिस्सा है:
सर्वर से कनेक्शन का निर्माण करने के बाद, आपको PASS और फिर एक NICK , जहां PASS एक OAuth-Token है (जो आप यहां उत्पन्न कर सकते हैं ) और USER इस OAuth टोकन का उपयोगकर्ता नाम है।
हैंडशेक फिर इस प्रकार है ( < क्लाइंट से सर्वर पर भेजा जा रहा है, > सर्वर से क्लाइंट में भेजा जा रहा है):
< 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
एक बार जब आप इनमें से कोई MODE , 376 या 422 कर लेते हैं, तो आप जाने के लिए अच्छे हैं और चिकोटी सर्वर को किसी भी कमांड को भेज सकते हैं, जैसे:
> JOIN :#gamesdonequick
> PRIVMSG #gamesdonequick :Hello world!
क्लाइंट-सर्वर कमांड के लिए अधिक संपूर्ण गाइड यहां पाया जा सकता है ।
चिकोटी-विशिष्ट क्षमताएँ
जबकि ट्विच एक मानक आईआरसी सेवा का उपयोग करता है, आईआरसी सेवा पर कुछ घटनाएं देखी जाती हैं जो ट्विच वेबसाइट पर एक चैनल में गतिविधि से संबंधित हैं। यहाँ उदाहरण धीमा या अक्षम किया जा रहा है, ग्राहक-केवल मोड सक्षम किया जा रहा है / एक स्वप्नहार की चैट पर सक्रिय / अक्षम, होस्टिंग गतिविधि, और बिट्स / जयकार गतिविधि, अन्य।
इन ट्विच-विशिष्ट क्षमताओं पर विवरण चिकोटी आईआरसी के लिए गिटहब प्रलेखन में सूचीबद्ध हैं, जो यहां पाया जा सकता है ।
अजगर
यहाँ एक साधारण पायथन कमांड-लाइन प्रोग्राम है जो एक चिकोटी चैनल को बॉट के रूप में कनेक्ट करेगा और कुछ सरल कमांड का जवाब देगा।
निर्भरता:
-
ircपायथन लिब (pip install ircयाeasy_install irc)
स्रोत: 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()