コード例 #1
0
ファイル: battlelog.py プロジェクト: brawlcord/brawlcord-red
    async def from_json(cls, data: dict, bot: Red):
        """Return a `BattleLog` object from dictionary representation of the log."""

        self = cls()

        # Get player's `User` instance.
        self.player = bot.get_user(data["player_id"])
        if self.player is None:
            self.player = await bot.fetch_user(data["player_id"])

        self.player_brawler_name = data["player_brawler_name"]
        self.player_brawler_level = data["player_brawler_level"]

        # Get opponent's `User` instance.
        self.opponent = bot.get_user(data["opponent_id"])
        if self.opponent is None:
            self.opponent = await bot.fetch_user(data["opponent_id"])

        self.opponent_brawler_name = data["opponent_brawler_name"]
        self.opponent_brawler_level = data["opponent_brawler_level"]

        self.game_mode = data["game_mode"]
        self.result = data["result"]

        return self
コード例 #2
0
ファイル: modlog.py プロジェクト: KevinManimau/RedBotKevin
async def get_cases_for_member(
    guild: discord.Guild, bot: Red, *, member: discord.Member = None, member_id: int = None
) -> List[Case]:
    """
    Gets all cases for the specified member or member id in a guild.

    Parameters
    ----------
    guild: `discord.Guild`
        The guild to get the cases from
    bot: Red
        The bot's instance
    member: `discord.Member`
        The member to get cases about
    member_id: int
        The id of the member to get cases about

    Returns
    -------
    list
        A list of all matching cases.

    Raises
    ------
    ValueError
        If at least one of member or member_id is not provided
    `discord.Forbidden`
        The bot does not have permission to fetch the modlog message which was sent.
    `discord.HTTPException`
        Fetching the user failed.
    """

    cases = await _config.custom(_CASES, str(guild.id)).all()

    if not (member_id or member):
        raise ValueError("Expected a member or a member id to be provided.") from None

    if not member_id:
        member_id = member.id

    if not member:
        member = bot.get_user(member_id) or member_id

    try:
        modlog_channel = await get_modlog_channel(guild)
    except RuntimeError:
        modlog_channel = None

    cases = [
        await Case.from_json(modlog_channel, bot, case_number, case_data, user=member, guild=guild)
        for case_number, case_data in cases.items()
        if case_data["user"] == member_id
    ]

    return cases
コード例 #3
0
    async def get_user(user_id: int, bot: Red) -> Optional[discord.User]:
        """Returns `discord.User` object from the given ID.

        Returns `None` if user can't be found.
        """

        user = bot.get_user(user_id)
        if user is None:
            try:
                user = await bot.fetch_user(user_id)
            except Exception:
                pass
        return user
コード例 #4
0
ファイル: reminder.py プロジェクト: Seputaes/sep-cogs
 def __init__(self,
              bot: Red,
              dt_str: str,
              text: str,
              timezone: str,
              created_by_id: int,
              id_: str = None):
     self._bot = bot
     self.id_ = (id_ if id_ is not None else self.generate_unique_id(
         text=text, dt_str=dt_str, created_by_id=created_by_id))
     self.dt_str = dt_str
     self.dt = datetime.strptime(dt_str, self.ISO8601_FORMAT)
     self.text = text
     self.timezone = timezone
     self.tz_info: DstTzInfo = pytz.timezone(timezone)
     self.created_by_id = created_by_id
     self.created_by: discord.User = bot.get_user(created_by_id)
コード例 #5
0
ファイル: modlog.py プロジェクト: KevinManimau/RedBotKevin
    async def from_json(
        cls, mod_channel: discord.TextChannel, bot: Red, case_number: int, data: dict, **kwargs
    ):
        """Get a Case object from the provided information

        Parameters
        ----------
        mod_channel: discord.TextChannel
            The mod log channel for the guild
        bot: Red
            The bot's instance. Needed to get the target user
        case_number: int
            The case's number.
        data: dict
            The JSON representation of the case to be gotten
        **kwargs
            Extra attributes for the Case instance which override values
            in the data dict. These should be complete objects and not
            IDs, where possible.

        Returns
        -------
        Case
            The case object for the requested case

        Raises
        ------
        `discord.NotFound`
            The user the case is for no longer exists
        `discord.Forbidden`
            Cannot read message history to fetch the original message.
        `discord.HTTPException`
            A generic API issue
        """
        guild = kwargs.get("guild") or mod_channel.guild

        message = kwargs.get("message")
        if message is None:
            message_id = data.get("message")
            if message_id is not None:
                message = discord.utils.get(bot.cached_messages, id=message_id)
                if message is None:
                    try:
                        message = await mod_channel.fetch_message(message_id)
                    except discord.HTTPException:
                        message = None
            else:
                message = None

        user_objects = {"user": None, "moderator": None, "amended_by": None}
        for user_key in tuple(user_objects):
            user_object = kwargs.get(user_key)
            if user_object is None:
                user_id = data.get(user_key)
                if user_id is None:
                    user_object = None
                else:
                    user_object = bot.get_user(user_id) or user_id
            user_objects[user_key] = user_object

        channel = kwargs.get("channel") or guild.get_channel(data["channel"]) or data["channel"]
        case_guild = kwargs.get("guild") or bot.get_guild(data["guild"])
        return cls(
            bot=bot,
            guild=case_guild,
            created_at=data["created_at"],
            action_type=data["action_type"],
            case_number=case_number,
            reason=data["reason"],
            until=data["until"],
            channel=channel,
            modified_at=data["modified_at"],
            message=message,
            last_known_username=data.get("last_known_username"),
            **user_objects,
        )