async def order(cmd): user_data = EwUser(member=cmd.message.author) poi = ewcfg.id_to_poi.get(user_data.poi) if (poi == None) or (len(poi.vendors) == 0): # Only allowed in the food court. response = ewcfg.str_food_channelreq.format(action="order") else: value = None togo = False if cmd.tokens_count > 1: for token in cmd.tokens[1:]: if token.startswith('<@') == False and token.lower( ) not in "togo": # togo can be spelled together or separate value = token break for token in cmd.tokens[1:]: if token.lower( ) in "togo": # lets people get away with just typing only to or only go (or only t etc.) but whatever togo = True break food = ewcfg.food_map.get(value.lower() if value != None else value) if food != None and food.vendor == ewcfg.vendor_vendingmachine: togo = True member = None if not togo: # cant order togo for someone else, you can just give it to them in person if cmd.mentions_count == 1: member = cmd.mentions[0] if member.id == cmd.message.author.id: member = None member_data = EwUser(member=member) if food == None or food.vendor not in poi.vendors: response = "Check the {} for a list of items you can {}.".format( ewcfg.cmd_menu, ewcfg.cmd_order) elif member is not None and member_data.poi != user_data.poi: response = "The delivery service has become unavailable due to unforeseen circumstances." else: market_data = EwMarket(id_server=cmd.message.server.id) target_data = None if member != None: target_data = EwUser(member=member) value = food.price if not togo else food.price * ewcfg.togo_price_increase # Kingpins eat free. if user_data.life_state == ewcfg.life_state_kingpin or user_data.life_state == ewcfg.life_state_grandfoe: value = 0 if value > user_data.slimecredit: # Not enough money. response = "A {food} is {cost:,} SlimeCoin (and you only have {credits:,}).".format( food=food.str_name, cost=value, credits=user_data.slimecredit) else: user_data.change_slimecredit( n=-value, coinsource=ewcfg.coinsource_spending) if not togo: if target_data != None: target_data.hunger -= food.recover_hunger if target_data.hunger < 0: target_data.hunger = 0 target_data.inebriation += food.inebriation if target_data.inebriation > ewcfg.inebriation_max: target_data.inebriation = ewcfg.inebriation_max if food.id_food == "coleslaw": target_data.ghostbust = True else: user_data.hunger -= food.recover_hunger if user_data.hunger < 0: user_data.hunger = 0 user_data.inebriation += food.inebriation if user_data.inebriation > ewcfg.inebriation_max: user_data.inebriation = ewcfg.inebriation_max if food.id_food == "coleslaw": user_data.ghostbust = True else: # if it's togo inv = ewitem.inventory(id_user=cmd.message.author.id, id_server=cmd.message.server.id) food_in_inv = 0 for item in inv: if item.get('item_type') == ewcfg.it_food: food_in_inv += 1 if food_in_inv >= math.ceil( user_data.slimelevel / ewcfg.max_food_in_inv_mod): # user_data never got persisted so the player won't lose money unnecessarily response = "You can't carry any more food than that." return await cmd.client.send_message( cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) item_props = { 'food_name': food.str_name, 'food_desc': food.str_desc, 'recover_hunger': food.recover_hunger, 'price': food.price, 'inebriation': food.inebriation, 'vendor': food.vendor, 'str_eat': food.str_eat, 'time_expir': time.time() + (food.time_expir if food.time_expir is not None else ewcfg.std_food_expir) } ewitem.item_create(item_type=ewcfg.it_food, id_user=cmd.message.author.id, id_server=cmd.message.server.id, item_props=item_props) response = "You slam {cost:,} SlimeCoin down at the {vendor} for a {food}{togo}{sharetext}{flavor}".format( cost=value, vendor=food.vendor, food=food.str_name, togo=" to go" if togo else "", sharetext=(". " if member == None else " and give it to {}.\n\n{}".format( member.display_name, ewutils.formatMessage(member, ""))), flavor=food.str_eat if not togo else "") if member == None and user_data.hunger <= 0 and not togo: response += "\n\nYou're stuffed!" user_data.persist() market_data.persist() if target_data != None: target_data.persist() # Send the response to the player. await cmd.client.send_message( cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def order(cmd): resp = await ewcmd.start(cmd=cmd) if cmd.message.channel.name != ewcfg.channel_foodcourt: # Only allowed in the food court. response = ewcfg.str_food_channelreq.format(action="order") else: value = None if cmd.tokens_count > 1: for token in cmd.tokens[1:]: if token.startswith('<@') == False: value = token break food = ewcfg.food_map.get(value) member = None if cmd.mentions_count == 1: member = cmd.mentions[0] if member.id == cmd.message.author.id: member = None if food == None: response = "Check the {} for a list of items you can {}.".format( ewcfg.cmd_menu, ewcfg.cmd_order) else: try: conn = ewutils.databaseConnect() cursor = conn.cursor() user_data = EwUser(member=cmd.message.author, conn=conn, cursor=cursor) market_data = EwMarket(id_server=cmd.message.server.id, conn=conn, cursor=cursor) target_data = None if member != None: target_data = EwUser(member=member, conn=conn, cursor=cursor) finally: cursor.close() conn.close() value = int(food.price / (market_data.rate_exchange / 1000000.0)) if value <= 0: value = 1 # Kingpins eat free. roles_map_user = ewutils.getRoleMap(cmd.message.author.roles) if ewcfg.role_rowdyfucker in roles_map_user or ewcfg.role_copkiller in roles_map_user: value = 0 if value > user_data.slimecredit: # Not enough money. response = "A {food} is {cost:,} SlimeCoin (and you only have {credits:,}).".format( food=food.str_name, cost=value, credits=user_data.slimecredit) else: user_data.slimecredit -= value if target_data != None: target_data.stamina -= food.recover_stamina if target_data.stamina < 0: target_data.stamina = 0 target_data.inebriation += food.inebriation if target_data.inebriation > 20: target_data.inebriation = 20 else: user_data.stamina -= food.recover_stamina if user_data.stamina < 0: user_data.stamina = 0 user_data.inebriation += food.inebriation if user_data.inebriation > 20: user_data.inebriation = 20 market_data.slimes_casino += food.price response = "You slam {cost:,} SlimeCoin down at the {vendor} for a {food}{sharetext}{flavor}".format( cost=value, vendor=food.vendor, food=food.str_name, sharetext=(". " if member == None else " and give it to {}.\n\n{}".format( member.display_name, ewutils.formatMessage(member, ""))), flavor=food.str_eat) if member == None and user_data.stamina <= 0: response += "\n\nYou're stuffed!" try: conn = ewutils.databaseConnect() cursor = conn.cursor() user_data.persist(conn=conn, cursor=cursor) market_data.persist(conn=conn, cursor=cursor) if target_data != None: target_data.persist(conn=conn, cursor=cursor) conn.commit() finally: cursor.close() conn.close() # Send the response to the player. await cmd.client.edit_message( resp, ewutils.formatMessage(cmd.message.author, response))