2015-10-10 4 views
1

Я начал создавать простой боттон Twitch, используя Python. Он прекрасно соединяется, и он также может видеть сообщения, которые другие люди отправляют в чате. Моя проблема, однако, в том, что я не могу обнаружить команды, когда они используются. Я могу захватить имя пользователя и сообщение из записей чата и даже распечатать их на консоли, но передача их в функцию chat() ничего не делает.Twitch IRC chat bot успешно соединяется, но не обнаруживает команды

Еще одна особенность заключается в том, что бот иногда случайно отправляет чат-сообщения, содержащие ответы PONG.

Я думаю, что мне не хватает чего-то очевидного, возможно, с тем, как я проверяю команды в чате или всю мою функцию chat().

import re 
from time import sleep 
import socket 


HOST = "irc.twitch.tv" 
PORT = 6667 
NICK = "bot_name" 
PASS = "oauth:..." 
CHAN = "#channel" 
RATE = (20/30) 
CHAT_MSG = re.compile(r"^:\w+!\[email protected]\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :") 


def main_loop(): 
    try: 
     s = socket.socket() 
     s.connect((HOST, PORT)) 
     s.send("PASS {}\r\n".format(PASS).encode("utf-8")) 
     s.send("NICK {}\r\n".format(NICK).encode("utf-8")) 
     s.send("JOIN {}\r\n".format(CHAN).encode("utf-8")) 
     connected = True 
    except Exception as e: 
     print(str(e)) 
     connected = False 

    while connected: 
     response = s.recv(1024).decode("utf-8") 
     if response == "PING :tmi.twitch.tv\r\n": 
      s.send("PONG :tmi.twitch.tv\r\n".encode()) 
      print("PONG") 
     else: 
      username = re.search(r"\w+", response).group(0) 
      message = CHAT_MSG.sub("", response) 

      if message == "!test": 
       chat(s, "Testing command received!") 

      print(username + ": " + message) 
     sleep(1) 


def chat(sock, msg): 
    sock.send("PRIVMSG {} :{}".format(CHAN, msg).encode()) 


if __name__ == "__main__": 
    main_loop() 

ответ

1

Я выяснил решение, если у кого-то еще такая же проблема! Сообщение, которое передается через функцию chat(), должно содержать \r\n, добавленное в конец строки, а команда для проверки - !test\r\n. Я уверен, что это именно то, как работает IRC, но это дополнение теперь позволяет боту отвечать на команды!

 Смежные вопросы

  • Нет связанных вопросов^_^