Guest User

Chatbot

a guest
Apr 12th, 2021
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. import socket
  2. import logging
  3. import csv
  4. import re
  5. import asyncio
  6. from datetime import datetime
  7. from emoji import demojize
  8.  
  9. logging.basicConfig(level=logging.DEBUG,
  10. format='%(asctime)s — %(message)s',
  11. datefmt='%Y-%m-%d_%H:%M:%S',
  12. handlers=[logging.FileHandler('chat.log', encoding='utf-8')])
  13.  
  14.  
  15. """
  16. Get token here: https://twitchapps.com/tmi/
  17. """
  18.  
  19. SERVER = 'irc.chat.twitch.tv'
  20. PORT = 6667
  21. NICKNAME = 'navillus_r'
  22. TOKEN = 'oauth:gzjihwto599mkdcsd3je15vzzulvlw'
  23. CHANNEL = '#twitchtrainsmario'
  24.  
  25.  
  26. class ChatFeedback():
  27. def __init__(self):
  28. self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  29. self.sock.connect((SERVER, PORT))
  30. self.sock.setblocking(0)
  31. self.sock.send(f"PASS {TOKEN}\r\n".encode('utf-8'))
  32. self.sock.send(f"NICK {NICKNAME}\r\n".encode('utf-8'))
  33. self.sock.send(f"JOIN {CHANNEL}\r\n".encode('utf-8'))
  34.  
  35. self.feedback_data = []
  36. self.loop = asyncio.get_event_loop()
  37. self.loop.create_task(self.run_chat_loop())
  38.  
  39. async def run_chat_loop(self):
  40. while True:
  41. task = self.loop.create_task(self.chat_loop())
  42. try:
  43. await task
  44. except asyncio.exceptions.CancelledError:
  45. pass
  46.  
  47. def stop(self):
  48. self.chat_task.cancel()
  49. self.loop.stop()
  50. self.loop.close()
  51.  
  52. def get_chat_feedback(self):
  53. data = self.feedback_data
  54. self.feedback_data = []
  55. # Return average feedback over this time period
  56. if len(data) == 0:
  57. return 0
  58. return float(sum(data)) / len(data)
  59.  
  60. async def chat_loop(self):
  61. try:
  62. with open("chat.csv", "w+") as csvfile:
  63. writer = csv.writer(csvfile)
  64. resp = await self.loop.sock_recv(self.sock, 2048)
  65. resp = resp.decode('utf-8')
  66.  
  67. if resp.startswith('PING'):
  68. self.sock.send("PONG\n".encode('utf-8'))
  69. elif len(resp) > 0:
  70. now = datetime.now()
  71. current_time = now.strftime("%H:%M:%S.%f")
  72. search = re.search(':(.*)\!.*@.*\.tmi\.twitch\.tv PRIVMSG #(.*) :(.*)', resp)
  73. if not search:
  74. return
  75. username, chan, message = search.groups()
  76. print(username)
  77.  
  78. resp = demojize(resp).lower()
  79. if "good bot" in resp:
  80. score = 1
  81. elif "bad bot" in resp:
  82. score = -1
  83. else:
  84. score = 0
  85.  
  86. self.feedback_data.append(score)
  87. writer.writerow([current_time, username, score])
  88. csvfile.flush()
  89. logging.info(demojize(resp))
  90.  
  91. except KeyboardInterrupt:
  92. self.sock.close()
  93. exit()
  94.  
  95. ch = ChatFeedback()
Advertisement
Add Comment
Please, Sign In to add comment