async def use_command(self, ctx, item_num=""): """ Use an item""" name = ctx.message.author.display_name init_player_duel_db(name) inv = common.users[name]['inventory'] equip = common.users[name]['equip'] if item_num == "": if len(inv) == 0: await self.bot.say("You have no items!") else: inv_string = "Item_ID: Item_Name (Description)\n" for it in inv: inv_string += "{}: {} ({})\n".format( it, get_name(it), get_text(it)) # If any are in use, go ahead print that info if len(equip) > 0: icons = { 'armor': ":shirt:", 'weapon': ":dagger:", 'other': ":ring:" } inv_string += "\nYour current loadout is:\n" for i in equip: item_num = equip[i] used_amount = inv[item_num] inv_string += "{}: {} - {} use(s) remaining.\n" \ .format(icons[i], get_name(item_num), (get_uses(item_num) - used_amount)) await self.bot.say(inv_string) elif item_exists(item_num) and item_num in inv and \ get_slot(item_num) in equip: slot = get_slot(item_num) await self.bot.say("You already have the {} equipped in the {} " "slot.".format(get_name(equip[slot]), slot)) elif item_exists(item_num) and item_num not in inv: await self.bot.say("You don't have that item!") elif item_exists(item_num) and item_num in inv: await self.bot.say("Item \"{}\" will be active starting with your " "next duel.".format(get_name(item_num))) common.users[name]['equip'][get_slot(item_num)] = item_num else: await self.bot.say("**!use <item_id>**: To use an item \n" "**!use**: to view your inventory")
async def print_at_midnight(bot): """ Prints list at midnight :return: """ c_to_send = None await bot.wait_until_ready() for channel in bot.get_all_channels(): if channel.name == 'gen_testing' or \ channel.name == common.ARGS['channel']: c_to_send = channel break while not bot.is_closed: now = datetime.now(pytz.timezone('US/Eastern')) midnight = now.replace(hour=23, minute=59, second=59, microsecond=59) if now > midnight: midnight = midnight.replace(day=(now.day + 1)) print("Scheduling next list print at {}".format(pretty_date(midnight))) await asyncio.sleep((midnight - now).seconds) await bot.send_message(c_to_send, common.whos_in.whos_in()) # Community Drop Time i_awarded = False i = False while not i_awarded: for m in bot.get_all_members(): if m.display_name != 'brochat-bot' and m.display_name in \ common.users and \ 'duel_record' in common.users[m.display_name]: i = await item_chance_roll(bot, m.display_name, c_to_send) i_awarded = i_awarded or i # Drink Debt Enforcement for m in bot.get_all_members(): nc = m.display_name if nc != 'brochat-bot' and nc in common.users and \ 'drinks_owed' in common.users[nc] \ and common.users[nc]['drinks_owed'] > 6 \ and 'inventory' in common.users[nc] \ and len(common.users[nc]['inventory']) > 0: item_take = choice(list(common.users[nc]['inventory'].keys())) await bot.send_message( c_to_send, "{}, the bank sent me to collect on " "your debt. I'll have to take your {} " "in lieu of one drink. Can't cheat " "friendship around these parts.".format( nc, get_name(item_take))) if get_slot(item_take) in common.users[nc]['equip']: del (common.users[nc]['equip'][get_slot(item_take)]) del common.users[nc]['inventory'][item_take] await bot.send_message( c_to_send, "You now owe {} drinks.".format(consume_drink(nc))) common.whos_in.update_db() await asyncio.sleep(60 * 10)
async def whoami(ctx): """Tell me about myself""" author = str(ctx.message.author.display_name) if author in common.users and common.users[author] != {}: message_output = "Well, I don't know you that well, but " \ "from what I've been hearing on the " \ "streets...\n" for k, v in common.users[author].items(): if k == "duel_record": if v[0] < 10 and v[1] > (v[0] + 5): output = "You're a pretty terrible dueler" elif v[0] < 10: output = "You're a pretty green dueler" elif v[0] < 100: output = "You're a seasoned dueler" else: output = "You're a master dueler" output += ", and your record is **{}** wins, **{}** losses," \ " and **{}** ties.".format(v[0], v[1], v[2]) elif k == "a_item": if v is None: output = "You don't have a dueling item equipped." else: output = "You have **{}** equipped."\ .format(get_name(v)) elif k == "inventory": if v == {}: output = "You don't have an inventory for dueling items." else: output = "Your inventory of dueling items:" for item, count in v.items(): output += "\n - {}".format(get_name(item)) else: output = "Your {} is **{}**.".format(k, v) message_output += "\n" + output await bot.say(message_output) else: await bot.say("You're {}, but that's all I know about you." .format(author))
async def unequip_command(self, ctx, slot: str): """Unequips an item in use""" name = ctx.message.author.display_name if 'equip' not in common.users[name] or len(common.users[name]) < 1: await self.bot.say("You have no items equipped!") elif slot not in common.users[name]['equip']: for s in common.users[name]['equip']: if common.users[name]['equip'][s] == slot: item_num = common.users[name]['equip'][s] await self.bot.say("You have unquipped the {}".format( get_name(item_num))) del (common.users[name]['equip'][s]) return await self.bot.say("You don't have an item equipped in that slot!") else: item_num = common.users[name]['equip'][slot] await self.bot.say("You have unquipped the {}".format( get_name(item_num))) del (common.users[name]['equip'][slot])
async def item_disarm_check(ctx, c_item, v_item, c_name, v_name): """ Handles the Disarming spec_effect :param ctx: Context :param c_item: Challenger's weapon :param v_item: Victim's weapon :param c_name: Challenger's Display name :param v_name: Victim's Display name """ notif_str = "" c_item_ret = None v_item_ret = None if c_item is not None and 'disarm_effect' in c_item.type: if len(common.users[v_name]['equip']) < 1: notif_str += "{} has nothing to disarm, the {} has no effect!\n"\ .format(v_name, c_item.name) if len(c_item.type) == 1: return_item(c_item, c_name) else: # Does the victim have an item that can be disarmed? poss_items = [] for i in common.users[v_name]['equip']: if i == 'armor' or i == 'other': poss_items.append(i) elif i == 'weapon' and 'disarm_effect' not in v_item.type: poss_items.append(i) if len(poss_items) < 1: # If no possible items give up notif_str += "{} only has a disarm item, the {} has no " \ "effect!\n".format(v_name, c_item.name) if len(c_item.type) == 1: return_item(c_item, c_name) else: # We can disarm something, do so. item_to_disarm = common.users[v_name]['equip'][choice( poss_items)] notif_str += "{}'s {} has been removed by the {}!\n"\ .format(v_name, get_name(item_to_disarm), c_item.name) v_item_ret = DuelItem(0, item_to_disarm) return_item(v_item_ret, v_name) if v_item is not None and 'disarm_effect' in v_item.type: if len(common.users[c_name]['equip']) < 1: notif_str += "{} has nothing to disarm, the {} has no effect!\n"\ .format(c_name, v_item.name) if len(v_item.type) == 1: return_item(v_item, v_name) else: # Does the challenger have an item that can be disarmed? poss_items = [] for i in common.users[c_name]['equip']: if i == 'armor' or i == 'other': poss_items.append(i) elif i == 'weapon' and 'disarm_effect' not in c_item.type: poss_items.append(i) if len(poss_items) < 1: # If no possible items give up notif_str += "{} only has a disarm item, the {} has no " \ "effect!\n".format(c_name, v_item.name) if len(v_item.type) == 1: return_item(v_item, v_name) else: # We can disarm something, do so. item_to_disarm = common.users[c_name]['equip'][choice( poss_items)] notif_str += "{}'s {} has been removed by the {}!\n"\ .format(c_name, get_name(item_to_disarm), v_item.name) c_item_ret = DuelItem(0, item_to_disarm) return_item(c_item_ret, c_name) await ctx.bot.say(notif_str) return c_item_ret, v_item_ret