Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2019 06:26:42

Andrew22528
Зарегистрирован: 2015-05-17
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Twitch bot

Привет. Я пытаюсь написать бота для Twitch. В инете нашел много примеров. Вот мой код:

bot.py

 import config
import utils
import socket
import re
import time
import thread
from time import sleep
def main():
    s = socket.socket()
    s.connect((config.HOST, config.PORT))
    s.send("PASS {}\r\n".format(config.PASS).encode("utf-8"))
    s.send("NICK {}\r\n".format(config.NICK).encode("utf-8"))
    s.send("JOIN #{}\r\n".format(config.CHAN).encode("utf-8"))
    chat_message = re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
    utils.mess(s, "What is even up, dogs?")
    thread.start_new_thread(utils.fillOpList, ())
    while True:
        utils.mess(s, "Do something awesome!")
        response = s.recv(1024).decode("utf-8")
        if response == "PING :tmi.twitch.tv\r\n":
            s.send("POND :tmi.twitch.tv\r\n".encode("utf-8"))
        else:
            username = re.search(r"\w+", response).group(0)
            message = chat_message.sub("", response)
            print(response)
            if message.strip() == "!time":
                utils.mess(s, "it's currently: " + time.strftime("%I:%M %p %Z on %A %B %d %Y"))
            if message.strip() == "!messages" and utils.isOp(username):
                utils.mess(s, "Do something awesome!")
                utils.mess(s, "Go to youtube.com/winderton and click the subscribe button there!")
        sleep(1)
if __name__ == "__main__":
    main()

utils.py
 import config
import urllib2
import json
import time
import thread
from time import sleep
def mess(sock, message):
    sock.send("PRIVMSG #{} :{}\r\n".format(config.CHAN, message).encode("utf-8"))
def ban(sock, user):
    mess(sock, ".ban {}".format(user))
def timeout(sock, user, seconds = 500):
    mess(sock, ".timeout {}".format(user, seconds))
def fillOpList():
    while True:
        try:
            url = "http://tmi.twitch.tv/group/user/CHAN/chatters"
            req = urllib2.Request(url, headers={"accept": "*/*"})
            res = urllib2.urlopen(req).read()
            if res.find("502 bad gateway") == - 1:
                config.oplist.clear()
                data = json.loads(res)
                for p in data["chatters"]["moderators"]:
                    config.oplist[p] = "mod"
                for p in data["chatters"]["global_mods"]:
                    config.oplist[p] = "global_mod"
                for p in data["chatters"]["admins"]:
                    config.oplist[p] = "admin"
                for p in data["chatters"]["staff"]:
                    config.oplist[p] = "staff"
        except:
            "Something went wrong...do nothing"
        sleep(5)
def isOp(user):
    return user in config.oplist

config.py
 HOST = "irc.twitch.tv"
PORT = 6667
NICK = "NICK"
PASS = "PASS"
CHAN = "CHAN"
oplist = {}

При запуске программа выводит, что подключилась к чату и виснет на строке
 response = s.recv(1024).decode("utf-8")

Не могли бы вы подсказать, как это исправить?
Заранее спасибо.

Офлайн

#2 Апрель 28, 2019 15:32:37

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 323
Репутация: +  13  -
Профиль   Отправить e-mail  

Twitch bot

Andrew22528
Привет. Я пытаюсь написать бота для Twitch. В инете нашел много примеров. Вот мой код:bot.py
Если зависло, то значит сервер ничего не присылает. Предлагаю тебе сделать сокет на таймауте, секунд 5 думаю хватит:
 sock_inst.settimeout(SECONDS)
Видимо ты непрвильно реализовал протокол подключения к твичу, почитай их документацию и найди ошибку.



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version