def chat_count(chatroom, verbose=False):
    global i
    i = 0
    chan = "#" + chatroom
    nick = get_username()
    PASS = get_password()
    sock = socket.socket()
    sock.connect(("irc.twitch.tv", default_port))
    sock.send("PASS " + PASS + "\r\n")
    sock.send("USER " + nick + " 0 * :" + nick + "\r\n")
    sock.send("NICK " + nick + "\r\n")
    full_msg = ""
    while 1:
       sock.send("JOIN "+chan+"\r\n")
       data = remove_non_ascii(sock.recv(1024))
       i+=1
       if data[0:4] == "PING":
          sock.send(data.replace("PING", "PONG"))
          continue
       full_msg += data #if you keep requesting to JOIN the channel, it will continue returning 
                        #more and more names until "End of /NAMES list"
       if verbose:
           print data
       if ":End of /NAMES list" in data: #do we end the search?
           if verbose:
               print "returning (\"End of /NAMES list\") due to:"
               print data
           return count_users(full_msg)
       if ":jtv MODE #" in data:
           if verbose:
               print "returning (FOUND MODE) due to:"
               print data
           return count_users(full_msg)
       if "366 " + nick in data: #status code for ending the stream of names
           if verbose:
               print "returning (366) due to:"
               print data
           return count_users(full_msg)
       if False and "PRIVMSG" in data: #privmsg's only come in after the names list
           if verbose:
               print "returning (PRIVMSG) due to:"
               print data
           return count_users(full_msg)
Example #2
0
def chat_count(chatroom, verbose=False):
    global i
    i = 0
    chan = "#" + chatroom
    nick = get_username()
    PASS = get_password()
    sock = socket.socket()
    sock.connect(("irc.twitch.tv", default_port))
    sock.send("PASS " + PASS + "\r\n")
    sock.send("USER " + nick + " 0 * :" + nick + "\r\n")
    sock.send("NICK " + nick + "\r\n")
    full_msg = ""
    while 1:
        sock.send("JOIN " + chan + "\r\n")
        data = remove_non_ascii(sock.recv(1024))
        i += 1
        if data[0:4] == "PING":
            sock.send(data.replace("PING", "PONG"))
            continue
        full_msg += data  #if you keep requesting to JOIN the channel, it will continue returning
        #more and more names until "End of /NAMES list"
        if verbose:
            print data
        if ":End of /NAMES list" in data:  #do we end the search?
            if verbose:
                print "returning (\"End of /NAMES list\") due to:"
                print data
            return count_users(full_msg)
        if ":jtv MODE #" in data:
            if verbose:
                print "returning (FOUND MODE) due to:"
                print data
            return count_users(full_msg)
        if "366 " + nick in data:  #status code for ending the stream of names
            if verbose:
                print "returning (366) due to:"
                print data
            return count_users(full_msg)
        if False and "PRIVMSG" in data:  #privmsg's only come in after the names list
            if verbose:
                print "returning (PRIVMSG) due to:"
                print data
            return count_users(full_msg)
Example #3
0
def search_all_games():
    """
    loops through all the games via the Twitch API, checking for their average ratios
    """
    global global_sum
    try:
        topreq = requests.get("https://api.twitch.tv/kraken/games/top?limit=" + str(num_games),
                              headers={"Client-ID": CLIENT_ID, "Accept": "application/vnd.twitchtv.v5+json"})
        while topreq.status_code != 200:
            print "trying to get top games..."
            topreq = requests.get("https://api.twitch.tv/kraken/games/top?limit=" + str(num_games),
                                  headers={"Client-ID": CLIENT_ID, "Accept": "application/vnd.twitchtv.v5+json"})
        topdata = topreq.json()
    except requests.exceptions.ConnectionError:
        print "connection error trying to get the game list. recursing :)))"
        return search_all_games
    except ValueError:
        print "nope. recursing. ~287 twitch_chatters.py"
        search_all_games()
    for i in range(0, len(topdata['top'])):
        game = remove_non_ascii(topdata['top'][i]['game']['name'])
        print "__" + game + "__",
        print "(tweetmode off)" if not tweetmode else ""
        prev_suspicious = suspicious[:]  # Make a duplicate of suspicious before things are added to the new suspicious list
        ratio = game_ratio(game)  # Remove elements from suspicious and puts them into confirmed
        for item in suspicious:
            if item.game == game and item in prev_suspicious:
                newconfirmed = [i for i in confirmed if i.game == game and item.user == i.user]
                if newconfirmed != []:
                    suspicious.remove(item)
                    print item.user[10:], "was found to have stopped botting", game + "!",
                    print " removing from suspicious list!"
                else:
                    suspicious.remove(item)
        print
        print "Average ratio for " + game + ": %0.3f" % ratio
        print
        print "Total global ratio: %0.3f" % (global_sum / float(global_cnt))
        print
        print "We are suspicious of: "
        if len(suspicious) == 0:
            print "No one :D"
        for item in suspicious:
            channel = item.user[10:]
            print "%s %s%d / %d = %0.3f   %s" % (channel,
                                                 " " * (20 - len(channel)),  # formatting spaces
                                                 item.chatters, item.viewers, item.ratio,
                                                 item.game
                                                 )
        print
        print "We have confirmed: "
        if len(confirmed) == 0:
            print "No one :D"
        for item in confirmed:
            channel = item.user[10:]
            print "%s %s%d / %d = %0.3f   %s" % (channel,
                                                 " " * (20 - len(channel)),  # formatting spaces
                                                 item.chatters, item.viewers, item.ratio,
                                                 item.game
                                                 )
        print
        print "Total of", len(suspicious) + len(confirmed), "botters"
        print
        print