yepcord / server

Unofficial discord backend implementation in python.
GNU Affero General Public License v3.0
2 stars 1 forks source link

add guild field #57

Closed github-actions[bot] closed 1 year ago

github-actions[bot] commented 1 year ago

https://github.com/yepcord/server/blob/60e51f01ec2915e4cd49b73d66b40c777f2d4a92/server/discord_converters/guild.py#L140


from __future__ import annotations
from datetime import datetime
from typing import TYPE_CHECKING

from server.classes.user import UserId
from server.ctx import getCore, Ctx
from server.enums import ChannelType
from server.utils import snowflake_timestamp, b64encode, int_length, sf_ts

if TYPE_CHECKING:
    from server.classes.guild import Guild, Role, Invite

async def discord_Guild(guild: Guild) -> dict:
    data = {
        "id": str(guild.id),
        "name": guild.name,
        "icon": guild.icon,
        "description": guild.description,
        "splash": guild.splash,
        "discovery_splash": guild.discovery_splash,
        "features": guild.features,
        "emojis": [
            await emoji.json for emoji in await getCore().getEmojis(guild.id) # Get json for every emoji in guild
        ],
        "stickers": guild.stickers,
        "banner": guild.banner,
        "owner_id": str(guild.owner_id),
        "application_id": None,  # TODO
        "region": guild.region,
        "afk_channel_id": guild.afk_channel_id,
        "afk_timeout": guild.afk_timeout,
        "system_channel_id": str(guild.system_channel_id),
        "widget_enabled": False,  # TODO
        "widget_channel_id": None,  # TODO
        "verification_level": guild.verification_level,
        "roles": [
            await role.json for role in await getCore().getRoles(guild) # Get json for every role in guild
        ],
        "default_message_notifications": guild.default_message_notifications,
        "mfa_level": guild.mfa_level,
        "explicit_content_filter": guild.explicit_content_filter,
        # "max_presences": None, # TODO
        "max_members": guild.max_members,
        "max_stage_video_channel_users": 0,  # TODO
        "max_video_channel_users": 0,  # TODO
        "vanity_url_code": guild.vanity_url_code,
        "premium_tier": 3,  # TODO
        "premium_subscription_count": 30,  # TODO
        "system_channel_flags": guild.system_channel_flags,
        "preferred_locale": guild.preferred_locale,
        "rules_channel_id": None,  # TODO
        "public_updates_channel_id": None,  # TODO
        "hub_type": None,  # TODO
        "premium_progress_bar_enabled": bool(guild.premium_progress_bar_enabled),
        "nsfw": bool(guild.nsfw),
        "nsfw_level": guild.nsfw_level,
        "threads": [],  # TODO
        "guild_scheduled_events": [],  # TODO
        "stage_instances": [],  # TODO
        "application_command_counts": {},  # TODO
        "large": False,  # TODO
        "lazy": True,  # TODO
        "member_count": await getCore().getGuildMemberCount(guild),
    }
    if uid := Ctx.get("user_id"):
        joined_at = (await getCore().getGuildMember(guild, uid)).joined_at
        timestamp = int(snowflake_timestamp(joined_at) / 1000)
        data["joined_at"] = datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%dT%H:%M:%S.000000+00:00")
    if Ctx.get("with_members"):
        data["members"] = [await member.json for member in await getCore().getGuildMembers(guild)]
    if Ctx.get("with_channels"):
        data["channels"] = [await channel.json for channel in await getCore().getGuildChannels(guild)]
    return data

async def discord_Role(role: Role) -> dict:
    return {
        "id": str(role.id),
        "name": role.name,
        "permissions": str(role.permissions),
        "position": role.position,
        "color": role.color,
        "hoist": bool(role.hoist),
        "managed": bool(role.managed),
        "mentionable": bool(role.mentionable),
        "icon": role.icon,
        "unicode_emoji": role.unicode_emoji,
        "flags": role.flags
    }

async def discord_Emoji(emoji: Emoji) -> dict:
    data = {
        "name": emoji.name,
        "roles": emoji.roles,
        "id": str(emoji.id),
        "require_colons": bool(emoji.require_colons),
        "managed": bool(emoji.managed),
        "animated": bool(emoji.animated),
        "available": bool(emoji.available)
    }
    if Ctx.get("with_user"):
        user = await getCore().getUserData(UserId(emoji.user_id))
        data["user"] = {
            "id": str(emoji.user_id),
            "username": user.username,
            "avatar": user.avatar,
            "avatar_decoration": user.avatar_decoration,
            "discriminator": user.s_discriminator,
            "public_flags": user.public_flags
        }
    return data

async def discord_Invite(invite: Invite) -> dict:
    userdata = await getCore().getUserData(UserId(invite.inviter))
    created_timestamp = int(sf_ts(invite.id) / 1000)
    channel = await getCore().getChannel(invite.channel_id)
    data = {
        "code": b64encode(invite.id.to_bytes(int_length(invite.id), 'big')),
        "inviter": await userdata.json,
        "created_at": datetime.utcfromtimestamp(created_timestamp).strftime("%Y-%m-%dT%H:%M:%S.000000+00:00"),
        "expires_at": datetime.utcfromtimestamp(created_timestamp+invite.max_age).strftime("%Y-%m-%dT%H:%M:%S+00:00"),
        "type": invite.type,
        "channel": {
            "id": str(channel.id),
            "type": channel.type
        },
        "max_age": invite.max_age,
    }
    if channel.type == ChannelType.GROUP_DM:
        data["channel"].update({"name": channel.name, "icon": channel.icon})
    if Ctx.get("with_counts"):
        related_users = await getCore().getRelatedUsersToChannel(invite.channel_id)
        data["approximate_member_count"] = len(related_users)
        if channel.type == ChannelType.GROUP_DM:
            data["channel"]["recipients"] = [
                {"username": (await getCore().getUserData(UserId(i))).username}
                for i in related_users
            ]
    # TODO: add guild field
    return data
github-actions[bot] commented 1 year ago

Closed in 3cc06aab5709559233c6ec34c937a8dcfb61a1c7