def drop(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list player_list_lock.acquire() if (name in player_list): player_list.remove(name) if (qwindow is not None): qwindow.set_list(player_list) player_list_lock.release() ret = create_msg( channel, "@{:s}: You have been removed from the line!".format(name)) send_msg(socket, ret) else: player_list_lock.release() ret = create_msg(channel, "@{:s}: You were not in the line!".format(name)) send_msg(socket, ret) save_to_file()
def eta(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list current_player_lock.acquire() if (name == current_player): ret = create_msg( channel, "@{:s}: You are the current player! Go on stream!".format(name)) send_msg(socket, ret) current_player_lock.release() player_list_lock.acquire() if (name not in player_list): player_list_lock.release() ret = create_msg(channel, "@{:s}: You are not in the line!".format(name)) send_msg(socket, ret) return eta_index = player_list.index(name) player_list_lock.release() ret = create_msg( channel, "@{:s}: You are on position #{:d}".format(name, eta_index + 1)) send_msg(socket, ret)
def next_player(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return player_list_lock.acquire() if (len(player_list) <= 0): player_list_lock.release() ret = create_msg(channel, "@{:s}: Line is empty!".format(name)) send_msg(socket, ret) player_name = "None" else: player_name = player_list.pop(0) if (qwindow is not None): qwindow.set_list(player_list) player_list_lock.release() player_NNID_lock.acquire() try: nnid = player_NNID[player_name]['NNID'] except KeyError: nnid = "???" try: mii_name = player_NNID[player_name]['Mii name'] except KeyError: mii_name = "???" player_NNID_lock.release() current_player_lock.acquire() current_player = player_name current_player_lock.release() played_list_lock.acquire() played_list.append(player_name) played_list_lock.release() ret = create_msg( channel, "@{:s}: Next player: {:s}, NNID: {:s}, Mii name: {:s}".format( channel, player_name, nnid, mii_name)) send_msg(socket, ret) if (qwindow is not None): qwindow.player_name_line_edit.setText(player_name) qwindow.player_NNID_line_edit.setText(nnid) qwindow.mii_name_line_edit.setText(mii_name) save_to_file()
def move(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 2): ret = create_msg( channel, "@{:s}: Usage: !move <player> <position>. " "Example: !move bob 1".format(name)) send_msg(socket, ret) return player_name = args[0].lower() try: new_position = int(args[1]) - 1 if (new_position < 0): new_position = 0 except ValueError: ret = create_msg(channel, "@{:s}: Invalid line number!".format(name)) send_msg(socket, ret) return player_list_lock.acquire() if (player_name not in player_list): player_list_lock.release() ret = create_msg(channel, "@{:s}: Player not in the line!".format(name)) send_msg(socket, ret) return player_list.remove(player_name) player_list.insert(new_position, player_name) if (qwindow is not None): qwindow.set_list(player_list) player_list_lock.release() ret = create_msg( channel, "@{:s}: Player set to position {:d}!".format(name, new_position + 1)) send_msg(socket, ret) save_to_file()
def set_limit_reentry(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 1): ret = create_msg(channel, "@{:s}: Usage: !subsonly <ON/OFF>".format(name)) send_msg(socket, ret) return if (args[0].lower() in ["on", "yes", "y", "true", "1"]): new_limit = True elif (args[0].lower() in ["off", "no", "n", "false", "0"]): new_limit = False else: ret = create_msg(channel, "@{:s}: Usage: !limit <ON/OFF>".format(name)) send_msg(socket, ret) return limit_reentry_lock.acquire() limit_reentry = new_limit limit_reentry_lock.release() if (qwindow is not None): qwindow.update_limit_reentry(new_limit) if (new_limit): ret = create_msg( channel, "@{:s}: Line is now limited to once per stream!".format(name)) else: ret = create_msg( channel, "@{:s}: Line is no longer limited to once per stream!".format( name)) send_msg(socket, ret) save_to_file()
def set_cap(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 1): ret = create_msg( channel, "@{:s}: Usage: '!setcap <number>', 0 for infinity".format(name)) send_msg(socket, ret) return try: player_list_cap_lock.acquire() new_cap = int(args[0]) if (new_cap <= 0): new_cap = None if (new_cap == player_list_cap): return player_list_cap = None player_list_cap = new_cap except ValueError: ret = create_msg( channel, "@{:s}: Usage: '!setcap <number>', 0 for infinity".format(name)) send_msg(socket, ret) finally: player_list_cap_lock.release() ret = create_msg(channel, "@{:s}: Line cap set to {:s}!".format(name, str(new_cap))) send_msg(socket, ret) if (qwindow is not None): qwindow.update_line_cap(new_cap) save_to_file()
def swap(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 2): ret = create_msg( channel, "@{:s}: Usage: !swap <player1> <player2>".format(name)) send_msg(socket, ret) return name1 = args[0].lower() name2 = args[1].lower() player_list_lock.acquire() if (name1 not in player_list or name2 not in player_list): player_list_lock.release() return index1 = player_list.index(name1) index2 = player_list.index(name2) player_list[index1], player_list[index2] = \ player_list[index2], player_list[index1] if (qwindow is not None): qwindow.set_list(player_list) player_list_lock.release() ret = create_msg( channel, "@{:s}: {:s} and {:s} have exchanged position in the line!".format( name, name1, name2)) send_msg(socket, ret) save_to_file()
def reset_info(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 1): ret = create_msg(channel, "@{:s}: Usage: !resetinfo <Twitch name>".format(name)) send_msg(socket, ret) return player_name = args[0] player_NNID_lock.acquire() if (player_name in player_NNID): del player_NNID[player_name] ret = create_msg( channel, "@{!s}: {!s}'s information has been reset!".format( name, player_name)) else: ret = create_msg( channel, "@{!s}: {!s} did not have any information.".format( name, player_name)) player_NNID_lock.release() send_msg(socket, ret)
def list_entered(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list current_list = [] player_list_lock.acquire() for player_name in player_list: current_list.append(player_name) player_list_lock.release() ret = create_msg( channel, "Current player: {:s} Current line: {:s}".format( current_player, ", ".join(current_list))) send_msg(socket, ret)
def remove(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 1): ret = create_msg(channel, "@{:s}: Usage: !remove <player>".format(name)) send_msg(socket, ret) return drop(socket, channel, args[0].lower(), [])
def reset_list(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (name != channel): return player_list_lock.acquire() player_list = [] if (qwindow is not None): qwindow.set_list(player_list) player_list_lock.release() ret = create_msg(channel, "@{:s}: Line reset!".format(name)) send_msg(socket, ret) save_to_file()
def close_list(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (qwindow is not None): qwindow.update_line_opened(False) line_opened_lock.acquire() line_opened = False line_opened_lock.release() ret = create_msg(channel, "@{:s}: Line is now closed!".format(name)) send_msg(socket, ret)
def enter(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list player_NNID_lock.acquire() if (len(args) < 2 and name not in player_NNID.keys()): player_NNID_lock.release() ret = create_msg( channel, "@{:s}: Usage: '!enter <NNID> <Mii name>'. " "You have not been entered.".format(name)) send_msg(socket, ret) return elif (name not in player_NNID.keys()): nnid = args[0].replace("<", "").replace(">", "") mii_name = args[1].replace("<", "").replace(">", "") player_NNID[name] = {'NNID': nnid, 'Mii name': mii_name} player_NNID_lock.release() line_opened_lock.acquire() if (not line_opened): line_opened_lock.release() ret = create_msg(channel, "@{:s}: Line is not opened".format(name)) send_msg(socket, ret) return line_opened_lock.release() player_list_cap_lock.acquire() player_list_lock.acquire() if (player_list_cap is not None and len(player_list) >= player_list_cap): player_list_cap_lock.release() player_list_lock.release() ret = create_msg(channel, "@{:s}: Line is currently full".format(name)) send_msg(socket, ret) return player_list_cap_lock.release() player_list_lock.release() subs_only_lock.acquire() if (subs_only and not tags.get('subscriber', False)): subs_only_lock.release() ret = create_msg( channel, "@{:s}: Line is currently subscribers only! " "You can subscribe at http://twitch.tv/{:s}/subscribe".format( name, channel)) send_msg(socket, ret) return subs_only_lock.release() limit_reentry_lock.acquire() if (limit_reentry): played_list_lock.acquire() if (name in played_list): played_list_lock.release() limit_reentry_lock.release() ret = create_msg( channel, "@{:s}: You have already played this stream, " "and the line can currently not be reentered.".format(name)) send_msg(socket, ret) return played_list_lock.release() limit_reentry_lock.release() player_list_lock.acquire() if (name not in player_list): player_list.append(name) if (qwindow is not None): qwindow.set_list(player_list) ret = create_msg( channel, "@{:s}: Added to the line at #{:d}".format(name, len(player_list))) player_list_lock.release() send_msg(socket, ret) else: player_list_lock.release() ret = create_msg(channel, "@{:s}: You are already added".format(name)) send_msg(socket, ret) save_to_file()
def add(socket, channel, name, args, tags={}): global current_player global player_list global player_list_cap global player_NNID global line_opened global subs_only global qwindow global limit_reentry global played_list if (not (name == channel or tags.get('user-type', user_type.empty) == user_type.mod)): return if (len(args) < 1): ret = create_msg( channel, "@{:s}: Usage: '!add <TwitchName> <NNID> <Mii name>'".format(name)) send_msg(socket, ret) return player_name = args[0].lower() player_NNID_lock.acquire() if (len(args) < 3 and player_name not in player_NNID.keys()): player_NNID_lock.release() ret = create_msg( channel, "@{:s}: Usage: '!add <TwitchName> <NNID> <Mii name>'".format(name)) send_msg(socket, ret) return elif (len(args) >= 3): nnid = args[1].replace("<", "").replace(">", "") mii_name = args[2].replace("<", "").replace(">", "") player_NNID[player_name] = {'NNID': nnid, 'Mii name': mii_name} player_NNID_lock.release() player_list_lock.acquire() if (player_name not in player_list): player_list.append(player_name) if (qwindow is not None): qwindow.set_list(player_list) ret = create_msg( channel, "@{:s}: Added to the line at #{:d}".format(player_name, len(player_list))) player_list_lock.release() send_msg(socket, ret) ret2 = create_msg( channel, "{:s}: {:s} has been added to the line!".format(name, player_name)) send_msg(socket, ret2) else: player_list_lock.release() ret = create_msg(channel, "@{:s}: You are already added".format(player_name)) send_msg(socket, ret) save_to_file()
def print_mod_commands(socket, channel, name, args, qwindow=None, tags={}): global commands ret = create_msg( channel, "Available commands: " + ", ".join(sorted(list(mod_commands.keys())))) send_msg(socket, ret)
def hello(socket, channel, name, args): if len(args) == 0: reply = create_msg(channel, "Hello {:s}!".format(name)) else: reply = create_msg(channel, "Hello {:s}!".format(" ".join(args))) send_msg(socket, reply)