Example #1
0
    async def character(self, ctx, *, name: str = None):
        """Switches the active character."""
        user_characters = await self.bot.mdb.characters.find({
            "owner":
            str(ctx.author.id)
        }).to_list(None)
        if not user_characters:
            return await ctx.send('You have no characters.')

        if name is None:
            active_character: Character = await Character.from_ctx(ctx)
            return await ctx.send(f'Currently active: {active_character.name}')

        selected_char = await search_and_select(
            ctx,
            user_characters,
            name,
            lambda e: e['name'],
            selectkey=lambda e: f"{e['name']} (`{e['upstream']}`)")

        char = Character.from_dict(selected_char)
        await char.set_active(ctx)

        try:
            await ctx.message.delete()
        except:
            pass

        await ctx.send(f"Active character changed to {char.name}.",
                       delete_after=20)
Example #2
0
    async def character(self, ctx, *, name: str = None):
        """Switches the active character."""
        if name is None:
            embed = await self._active_character_embed(ctx)
            await ctx.send(embed=embed)
            return

        user_characters = await self.bot.mdb.characters.find({
            "owner":
            str(ctx.author.id)
        }).to_list(None)
        if not user_characters:
            return await ctx.send('You have no characters.')

        selected_char = await search_and_select(
            ctx,
            user_characters,
            name,
            lambda e: e['name'],
            selectkey=lambda e: f"{e['name']} (`{e['upstream']}`)")

        char = Character.from_dict(selected_char)
        result = await char.set_active(ctx)
        await try_delete(ctx.message)
        if result.did_unset_server_active:
            await ctx.send(
                f"Active character changed to {char.name}. Your server active character has been unset.",
                delete_after=30)
        else:
            await ctx.send(f"Active character changed to {char.name}.",
                           delete_after=15)
Example #3
0
    def from_dict_sync(cls, raw, ctx, combat):
        inst = super(PlayerCombatant, cls).from_dict(raw, ctx, combat)
        inst.character_id = raw['character_id']
        inst.character_owner = raw['character_owner']

        from cogs5e.models.character import Character
        char = ctx.bot.mdb.characters.delegate.find_one({"owner": inst.character_owner, "upstream": inst.character_id})
        if char is None:
            raise CombatException(f"A character in combat was deleted. "
                                  f"Please run `{ctx.prefix}init end -force` to end combat.")
        inst._character = Character.from_dict(char)
        return inst
Example #4
0
def character(request, avrae):
    """Sets up an active character in the user's context, to be used in tests. Cleans up after itself."""
    filename = os.path.join(dir_path, "static", f"char-{request.param}.json")
    with open(filename) as f:
        char = Character.from_dict(json.load(f))
    char.owner = DEFAULT_USER_ID
    char._active = True
    avrae.mdb.characters.delegate.update_one(
        {"owner": char.owner, "upstream": char.upstream},
        {"$set": char.to_dict()},
        upsert=True
    )
    if request.cls is not None:
        request.cls.character = char
    yield char
    avrae.mdb.characters.delegate.delete_one(
        {"owner": char.owner, "upstream": char.upstream}
    )
    Character._cache.clear()
Example #5
0
async def active_character(avrae):
    """Gets the character active in this test."""
    return Character.from_dict(await avrae.mdb.characters.find_one({"owner": DEFAULT_USER_ID, "active": True}))