Exemplo n.º 1
0
def cache_dibs():
    shared_var['dibs'] = []
    spreadsheet = google_sheet_get(shared_var['sheet'])
    worksheet = spreadsheet.worksheet('Dibs')
    values = worksheet.get_all_values()

    for value in values[1:]:
        name = value[0].encode('utf-8', 'ignore').decode('utf-8').strip()
        owner = value[1].encode('utf-8', 'ignore').decode('utf-8').strip()
        shared_var['dibs'].append({'name': name, 'owner': owner})
Exemplo n.º 2
0
def cache_triggers(bot = None):
    spreadsheet = google_sheet_get(shared_var['trigger_sheet'])
    
    #classes
    worksheet = spreadsheet.worksheet('Count & Frontpage')
    values = worksheet.col_values(2)
    shared_var['classes'] = values[6:18]
    
    #triggers
    worksheet = spreadsheet.worksheet('Triggers')
    values = worksheet.col_values(1)
    shared_var['trigger_list'] = []
    for i, v in enumerate(values):
        if not v:
            shared_var['trigger_list'].append({
                'prefix': '',
                'text': 'Blank.',
                'blank': True
            })
        elif v != "100 Triggers at Maximum, please.":
            shared_var['trigger_list'].append({
                'prefix': '['+str(i+1)+']: ',
                'text': v.encode('utf-8', 'ignore').decode('utf-8'),
                'blank': False
            })
    
    #used
    worksheet = spreadsheet.worksheet('Used')
    values = worksheet.col_values(2)
    shared_var['used_list'] = []
    for i, v in enumerate(values[1:]):
        if not v:
            shared_var['used_list'].append({
                'prefix': '',
                'text': 'Blank.',
                'blank': True
            })
        else:
            shared_var['used_list'].append({
                'prefix': '{'+str(i+2)+'}: ',
                'text': v.encode('utf-8', 'ignore').decode('utf-8'),
                'blank': False
            })
Exemplo n.º 3
0
def classification(bot, trigger):
    """Increments the specified classification by the provided number."""

    if trigger.sender.lower() != '#weaverdice':
        return say(bot,'Please perform increments in #Weaverdice.')
    
    if trigger.group(2):
        if trigger.group(1).lower()=="thinker" and trigger.group(2).lower()=="run":
            return say(bot,'"Thinker. Don\'t worry about the number. Just run."')
        try:
            increment = float(trigger.group(2))
        except ValueError:
            return say(bot,"Invalid increment.")
        except AttributeError:
            return say(bot,"Invalid input.")
        if (increment==0):
            return say(bot,"Nope, not wasting my time incrementing by 0.")
    else:
        return say(bot,"Specify a number to increment "+trigger.group(1).lower()+" by. If you're trying to generate an npc, the command is '$npc "+trigger.group(1).lower()+"'")
    type = trigger.group(1).lower()
    
    delay=get_delay_timer(type)
    if delay>0 and increment*-1!=shared_var['increment::'+type]:
        return say(bot,"ZzZz...["+str(delay)+"s]")
    set_delay_timer(type,15)
    shared_var['increment::'+type]=increment
    
    #classes
    spreadsheet = google_sheet_get(shared_var['trigger_sheet'])
    worksheet = spreadsheet.worksheet('Count & Frontpage')
    values = worksheet.col_values(2)
    shared_var['classes'] = values[6:18]
    cell = ['mover','shaker','brute','breaker','master','tinker','blaster','thinker','striker','changer','trump','stranger'].index(type)
    try:
        shared_var['classes'][cell] = ('%f' % (float(shared_var['classes'][cell])+increment)).rstrip('0').rstrip('.')
    except:
        return say(bot,"Invalid count for '"+type.title()+"'.")
    
    worksheet.update_cell(7+cell, 2, shared_var['classes'][cell])
    return say(bot,type.title()+" count modified by "+str(increment)+". Current value: "+shared_var['classes'][cell])
Exemplo n.º 4
0
def undibs(bot, trigger):
    """Reverse a claim on a cape name."""

    if trigger.group(2):
        name = trigger.group(2)
        say(bot, 'Removing dibs. This might take a moment...')
        # Update the dibs cache
        cache_dibs()

        # Check for a cape with the correct details
        for id, cape in enumerate(shared_var['dibs']):
            if cape['name'].upper() == name.upper() and cape['owner'].upper(
            ) == trigger.nick.upper():
                # Remove cape
                spreadsheet = google_sheet_get(shared_var['sheet'])
                worksheet = spreadsheet.worksheet('Dibs')
                worksheet.update_cell(id + 2, 1, '')
                worksheet.update_cell(id + 2, 2, '')
                return say(bot, 'Dibs removed.')
        return say(bot, "You don't have dibs on that name.")
    else:
        return say(bot, 'Please specify a cape.')
Exemplo n.º 5
0
def cache_luck():
    spreadsheet = google_sheet_get(shared_var['sheet'])
    worksheet = spreadsheet.worksheet('LUCK')
    values = worksheet.get_all_values()
    shared_var['luck_list'] = {
        "Life Perk": [],
        "Power Perk": [],
        "Life Flaw": [],
        "Power Flaw": []
    }

    keys = ["Life Perk", "Power Perk", "Life Flaw", "Power Flaw"]
    for j in range(2, 6):
        key = keys[j - 2]
        for i in range(1, 79):
            if values[i][j].encode('utf-8', 'ignore').decode('utf-8').strip():
                text = values[i][j].encode('utf-8', 'ignore').decode('utf-8')
                keyword = text.split('.', 1)[0].lower().strip()

                shared_var['luck_list'][key].append({
                    'text':
                    '[' + key + ' ' + str(i + 1) + ']: ' + text,
                    'keyword':
                    keyword,
                    'blank':
                    False
                })
            else:
                shared_var['luck_list'][key].append({
                    'text':
                    '[' + key + ' ' + str(i + 1) + ']: Blank',
                    'keyword':
                    '',
                    'blank':
                    True
                })
Exemplo n.º 6
0
def unclaim(bot, trigger):
    """Reverses a claim on a trigger, moving it back to the Weaver Dice trigger spreadsheet."""
    
    if trigger.sender.lower() != '#weaverdice':
        return say(bot,'Please perform unclaims in #Weaverdice.')
    
    #Validate command
    if not trigger.group(2):
        return say(bot,"Specify a used trigger from 2+.")
    trigger_index = int(trigger.group(2))
    if (trigger_index<2):
        return say(bot,"Specify a used trigger from 2+.")

    delay=get_delay_timer('claim')
    if delay>0:
        return say(bot,"ZzZz...["+str(delay)+"s]")
    set_delay_timer('claim',15)
        
    #Initialize spreadsheet
    spreadsheet = google_sheet_get(shared_var['trigger_sheet'])
    worksheet2 = spreadsheet.worksheet('Used')
    h = worksheet2.row_count
    
    #Sort through used trigger list and fetch string/author. Grab the whole thing so the cache can be updated.
    used_triggers = [["","","","",""] for y in range(h)]
    cell_list = worksheet2.range('A1:E'+str(h))
    for cell in cell_list:
        used_triggers[cell.row-1][cell.col-1] = cell.value
    
    trigger_string = used_triggers[trigger_index-1][1]
    
    if not trigger_string:
        return say(bot,"Used trigger '"+str(trigger_index)+"' is blank.")
    if used_triggers[trigger_index-1][2]:
        trigger_author = used_triggers[trigger_index-1][2]
    else:
        trigger_author = "?"
    trigger_string = trigger_string.encode('utf-8', 'ignore').decode('utf-8')
    trigger_author = trigger_author.encode('utf-8', 'ignore').decode('utf-8')
    say(bot,'Unclaiming trigger. This might take a moment...')

    #Fetch trigger list and find an empty slot to insert this trigger in. Update cache while we're at it.
    worksheet = spreadsheet.worksheet('Triggers')
    worksheet_height = worksheet.row_count
    triggers = worksheet.col_values(1)
    triggers += [None] * (worksheet_height - len(triggers))
    update_trigger_cache(triggers)

    # Find the empty slot
    slot = None
    for i, dic in enumerate(shared_var['trigger_list']):
        if dic['blank']:
            slot = i + 1
            break

    if slot is None:
        return say(bot,"...The trigger list is full.")
    
    #Update trigger list + cache
    worksheet.update_cell(slot, 1, trigger_string)
    worksheet.update_cell(slot, 2, trigger_author)
    shared_var['trigger_list'][slot-1] = {
        'prefix': '['+str(slot)+']: ',
        'text': trigger_string,
        'blank': False
    }
        
    #Remove used trigger from trigger list
    used_triggers.pop(trigger_index-1)
    used_triggers.append([""]*5)
    h = len(used_triggers)
    for cell in cell_list:
        cell.value = used_triggers[cell.row-1][cell.col-1]
        
    worksheet2.update_cells(cell_list)
    
    #Update trigger cache
    used_triggers.pop()
    update_used_cache([row[1] for row in used_triggers[1:]])

    return say(bot,'...Used Trigger {'+str(trigger_index)+'} moved to Trigger slot ['+str(slot)+'].')
Exemplo n.º 7
0
def claim(bot, trigger):
    """Moves a trigger to the used section of the Weaver Dice trigger spreadsheet.
    The square brackets around Player_Name should be included."""
    
    if trigger.sender.lower() != '#weaverdice':
        return say(bot,'Please perform claims in #Weaverdice.')
    
    #Validate command
    if not trigger.group(2):
        return say(bot,"Specify a trigger from 1-100.")
        
    data = shared_var['re_claim'].match(trigger.group(2))
        
    if data.group(1):
        if is_integer(data.group(1)):
            trigger_index = int(data.group(1))
        else:
            return say(bot,"Invalid trigger index.")
    else:
        return say(bot,"Specify a trigger from 1-100.")
    
    game = data.group(2).strip() if data.group(2) else '?'
    claimer = data.group(3).strip()[1:-1] if data.group(3) else trigger.nick
    description = data.group(4).strip() if data.group(4) else ''
    
    delay=get_delay_timer('claim')
    if delay>0:
        return say(bot,"ZzZz...["+str(delay)+"s]")
    set_delay_timer('claim',15)
        
    #Initialize spreadsheet
    spreadsheet = google_sheet_get(shared_var['trigger_sheet'])
    trigger_worksheet = spreadsheet.worksheet('Triggers')
    trigger_worksheet_height = trigger_worksheet.row_count
    used_worksheet = spreadsheet.worksheet('Used')
    used_worksheet_height = used_worksheet.row_count
    say(bot,'Claiming trigger. This might take a moment...')
    
    #Sort through trigger list and fetch the trigger string/author. Might as well grab the whole thing so the trigger cache can be updated.
    triggers = [["",""] for y in range(trigger_worksheet_height)]
    cell_list = trigger_worksheet.range('A1:B'+str(trigger_worksheet_height))
    for cell in cell_list:
        triggers[cell.row-1][cell.col-1] = cell.value
    
    trigger_string = triggers[trigger_index-1][0]
    if not trigger_string:
        return say(bot,"...Trigger '"+str(trigger_index)+"' is blank.")
    trigger_string=trigger_string.encode('utf-8', 'ignore').decode('utf-8')
    
    trigger_author = triggers[trigger_index-1][1]
    if not trigger_author:
        trigger_author="?"
    else:
        trigger_author=trigger_author.encode('utf-8', 'ignore').decode('utf-8')
    
    #Sort through used trigger list and find blank spot. Grab the whole thing so the cache can be updated.
    used_triggers = used_worksheet.col_values(2)
    used_triggers += [None] * (used_worksheet_height - len(used_triggers))
    update_used_cache(used_triggers[1:])
    
    #Find blank spot to append used trigger. If none is available, append a row.
    try:
        slot = used_triggers[1:].index(None)+2
        used_worksheet.update_cell(slot, 1, game)
        used_worksheet.update_cell(slot, 2, trigger_string)
        used_worksheet.update_cell(slot, 3, trigger_author)
        used_worksheet.update_cell(slot, 4, claimer)
        used_worksheet.update_cell(slot, 5, description)
        shared_var['used_list'][slot-2] = {
            'prefix': '{'+str(slot)+'}: ',
            'text': trigger_string.encode('utf-8', 'ignore').decode('utf-8'),
            'blank': False
        }
    except ValueError:
        used_worksheet.append_row([game,trigger_string,trigger_author,claimer,description])
        shared_var['used_list'].append({
            'prefix': '{'+str(used_worksheet_height+1)+'}: ',
            'text': trigger_string.encode('utf-8', 'ignore').decode('utf-8'),
            'blank': False
        })
        slot = used_worksheet_height+1
    
    #Update trigger list
    triggers.pop(trigger_index-1)
    triggers.append([""]*2)
    for cell in cell_list:
        cell.value = triggers[cell.row-1][cell.col-1]
        if not cell.value:
            cell.value=""

    trigger_worksheet.update_cells(cell_list)
    
    #Update trigger cache
    update_trigger_cache([row[0] for row in triggers])
    
    #Fin
    return say(bot,'...Trigger ['+str(trigger_index)+'] moved to Used Trigger slot {'+str(slot)+'}.')
Exemplo n.º 8
0
def cache_capes():
    spreadsheet = google_sheet_get(shared_var['sheet'])
    shared_var['capes'] = []

    #Canon capes
    worksheet = spreadsheet.worksheet('Canon')
    values = worksheet.get_all_values()

    for value in values[1:]:
        name = value[0].encode('utf-8', 'ignore').decode('utf-8').strip()
        alias = value[1].encode('utf-8', 'ignore').decode('utf-8').strip()
        if not name:
            name = alias
            alias = ''

        if name:
            cape = {
                'name':
                name,
                'alias': [alias],
                'power':
                value[2].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'affiliation':
                value[3].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'alignment':
                '',
                'classification':
                value[4].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'character type':
                '',
                'campaign':
                'Worm',
                'owner':
                'Wildbow',
                'status':
                '',
                'notes':
                ''
            }
            cape['s_name'] = [
                cape['name'].lower(),
                remove_accents(cape['name']).lower()
            ]
            cape['s_alias'] = [x.lower() for x in cape['alias']] + [
                remove_accents(x).lower() for x in cape['alias']
            ]
            shared_var['capes'].append(cape)

    #Non-Canon capes
    worksheet = spreadsheet.worksheet('Non-Canon')
    values = worksheet.get_all_values()

    for value in values[1:]:
        name = value[0].encode('utf-8', 'ignore').decode('utf-8').strip()
        alias = value[1].encode('utf-8', 'ignore').decode('utf-8').strip()
        if not name:
            name = alias
            alias = ''

        if name:
            cape = {
                'name':
                name,
                'alias': [alias],
                'power':
                value[2].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'affiliation':
                value[3].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'alignment':
                value[4].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'classification':
                value[5].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'character type':
                value[6].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'campaign':
                value[7].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'owner':
                value[8].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'status':
                value[9].encode('utf-8', 'ignore').decode('utf-8').strip(),
                'notes':
                value[10].encode('utf-8', 'ignore').decode('utf-8').strip()
            }

            for match in shared_var['re_aka'].findall(cape['notes']):
                cape['alias'].append(match[1])

            cape['s_name'] = [
                cape['name'].lower(),
                remove_accents(cape['name']).lower()
            ]
            cape['s_alias'] = [x.lower() for x in cape['alias']] + [
                remove_accents(x).lower() for x in cape['alias']
            ]
            shared_var['capes'].append(cape)
Exemplo n.º 9
0
def dibs(bot, trigger):
    """Claims a cape name. To see all of the cape names you've claimed, use '$dibs'"""

    if trigger.group(2):
        name = trigger.group(2).strip()

        # Make sure the name is not already a cape
        for id, cape in enumerate(shared_var['capes']):
            # PERFECT MATCH

            if any(name.lower() == alias for alias in cape['s_name']):
                return say(
                    bot,
                    'This name is already in use. [Cape #' + str(id) + ']')

            if any(name.lower() == alias for alias in cape['s_alias'][1:]):
                return say(
                    bot,
                    'This name is already in use. [Cape #' + str(id) + ']')

            if name.lower() == cape['s_alias'][0]:
                return say(
                    bot,
                    'This name is already in use. [Cape #' + str(id) + ']')

        # Update the dibs cache
        say(bot, 'Calling dibs. This might take a moment...')
        cache_dibs()

        # Make sure the name is not already claimed
        cape = next((item for item in shared_var['dibs']
                     if item['name'].upper() == name.upper()), None)

        if cape:
            if cape['owner'].upper() == trigger.nick.upper():
                return say(bot, 'You already called dibs on that name.')
            else:
                return say(
                    bot, cape['owner'] + ' already called dibs on that name.')

        # Add it to the spreadsheet
        owner = trigger.nick
        spreadsheet = google_sheet_get(shared_var['sheet'])
        worksheet = spreadsheet.worksheet('Dibs')

        # Try to find a blank row
        if len(shared_var['dibs']) + 1 < worksheet.row_count:
            index = len(shared_var['dibs'])
            slot = index
            shared_var['dibs'].append({'name': '', 'owner': ''})
        else:
            slot = None
            for index, cape in enumerate(shared_var['dibs']):
                if cape['name'] == '':
                    slot = index
                    break

        # Update worksheet and cache
        if slot is not None:
            worksheet.update_cell(slot + 2, 1, name)
            worksheet.update_cell(slot + 2, 2, owner)
            shared_var['dibs'][index]['name'] = name
            shared_var['dibs'][index]['owner'] = owner
        else:
            worksheet.append_row([name, owner])

            # Add it to the cache
            shared_var['dibs'].append({'name': name, 'owner': owner})

        return say(bot, 'Done!')
    else:
        # Show all capes with dibs
        capes = [
            cape['name'] for cape in shared_var['dibs']
            if cape['owner'].upper() == trigger.nick.upper()
        ]
        if len(capes) == 0:
            return say(bot, 'Your have no capes.')
        else:
            return say(bot, 'Your capes are: ' + ', '.join(capes))
Exemplo n.º 10
0
def cache_cards(bot):
    bot.memory['card_help'] = {}
    shared_var['cards'] = {}
    shared_var['cards_by_keyword'] = {}
    shared_var['cards_by_group'] = {}
    shared_var['cards_by_name'] = {}

    shared_var['card_commands'] = []
    shared_var['card_sub_commands'] = []

    spreadsheet = google_sheet_get(shared_var['sheet'])
    worksheets = spreadsheet.worksheets()
    id = 0

    for worksheet in worksheets:
        values = worksheet.get_all_values()
        key_group = worksheet.title.lower()
        key_group = '' if key_group == 'main' else key_group + ' '

        for row in values:
            key_deck = row[0].lower()
            if key_group == '' and key_deck != 'commands':
                shared_var['card_sub_commands'].append(key_deck)

            for col in row[1:]:
                if col.strip():
                    help = ''
                    tmp_card = {
                        'text': col,
                        'cards': [],
                        'names': [],
                        'inline_cards': [],
                        'odds': 1
                    }

                    #Inline Cards
                    match = shared_var['re_inline_cards'].search(
                        tmp_card['text'])
                    number = 1
                    while match and number < 50:
                        tmp_card['inline_cards'].append(
                            [x.strip() for x in match.group(1).split('|')])
                        tmp_card['text'] = tmp_card['text'][:match.start(
                            1)] + str(number) + tmp_card['text'][match.end(1):]
                        match = shared_var['re_inline_cards'].search(
                            tmp_card['text'])
                        number = number + 1

                    #Sub Cards
                    match = shared_var['re_cards'].search(tmp_card['text'])
                    number = 0
                    while match and number < 50:
                        sub_card_data = match.group(1).split('|')
                        sub_card_data += [''] * (3 - len(sub_card_data))
                        subcard = {'keyword': [], 'preface': [], 'tags': []}

                        if sub_card_data[0].strip():
                            subcard['keyword'] = [
                                x.strip() for x in sub_card_data[0].split(',')
                            ]

                        if sub_card_data[1].strip():
                            subcard['preface'] = [
                                x.strip() for x in sub_card_data[1].split(',')
                            ]

                        if sub_card_data[2].strip():
                            subcard['tags'] = [
                                x.strip() for x in sub_card_data[2].split(',')
                            ]

                        tmp_card['cards'].append(subcard)

                        tmp_card['text'] = tmp_card['text'][:match.start(
                        )] + tmp_card['text'][match.end():]
                        match = shared_var['re_cards'].search(tmp_card['text'])
                        number = number + 1

                    #Help
                    match = shared_var['re_card_help'].search(tmp_card['text'])
                    if match:
                        help = match.group(1).strip()
                        tmp_card['text'] = tmp_card['text'][:match.start(
                        )] + tmp_card['text'][match.end():]

                    #Names
                    match = shared_var['re_card_names'].search(
                        tmp_card['text'])
                    number = 0
                    while match and number < 50:
                        tmp_card['names'].append(
                            match.group(1).strip().lower())
                        tmp_card['text'] = tmp_card['text'][:match.start(
                        )] + tmp_card['text'][match.end():]
                        match = shared_var['re_card_names'].search(
                            tmp_card['text'])
                        number = number + 1

                    #Odds
                    match = shared_var['re_card_odds'].search(tmp_card['text'])
                    number = 0
                    while match and number < 50:
                        if is_integer(match.group(1).strip().lower()):
                            tmp_card['odds'] = int(
                                match.group(1).strip().lower())
                        tmp_card['text'] = tmp_card['text'][:match.start(
                        )] + tmp_card['text'][match.end():]
                        match = shared_var['re_card_odds'].search(
                            tmp_card['text'])
                        number = number + 1

                    tmp_card['text'] = tmp_card['text'].strip()

                    tmp_card['id'] = id
                    id = id + 1

                    #Group + Keyword
                    if key_group + key_deck in shared_var['cards']:
                        shared_var['cards'][key_group +
                                            key_deck].append(tmp_card)
                    else:
                        shared_var['cards'][key_group + key_deck] = [tmp_card]

                    #Keyword
                    if key_deck in shared_var['cards_by_keyword']:
                        shared_var['cards_by_keyword'][key_deck].append(
                            tmp_card)
                    else:
                        shared_var['cards_by_keyword'][key_deck] = [tmp_card]

                    #Group
                    if key_group.strip() in shared_var['cards_by_group']:
                        shared_var['cards_by_group'][key_group.strip()].append(
                            tmp_card)
                    else:
                        shared_var['cards_by_group'][key_group.strip()] = [
                            tmp_card
                        ]

                    #Name
                    for name in tmp_card['names']:
                        if key_group + key_deck + ' ' + name in shared_var[
                                'cards_by_name']:
                            shared_var['cards_by_name'][key_group + key_deck +
                                                        ' ' +
                                                        name].append(tmp_card)
                        else:
                            shared_var['cards_by_name'][key_group + key_deck +
                                                        ' ' +
                                                        name] = [tmp_card]

                    #Commands
                    if key_group + key_deck == 'commands':
                        shared_var['card_commands'] = shared_var[
                            'card_commands'] + tmp_card['names']
                        if help:
                            for name in tmp_card['names']:
                                bot.memory['card_help'][name] = help

    bot.memory['card_commands'] = shared_var['card_commands']