chore: retab, delete discord file
This commit is contained in:
parent
461127a4ac
commit
947217abe3
9 changed files with 1106 additions and 1324 deletions
|
@ -1,218 +0,0 @@
|
||||||
from dataclasses import dataclass
|
|
||||||
|
|
||||||
from misc import dict_cls
|
|
||||||
|
|
||||||
CDN_URL = "https://cdn.discordapp.com"
|
|
||||||
MESSAGE_LIMIT = 2000
|
|
||||||
|
|
||||||
|
|
||||||
def bitmask(bit: int) -> int:
|
|
||||||
return 1 << bit
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Channel:
|
|
||||||
id: str
|
|
||||||
type: str
|
|
||||||
guild_id: str = ""
|
|
||||||
name: str = ""
|
|
||||||
topic: str = ""
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Emote:
|
|
||||||
animated: bool
|
|
||||||
id: str
|
|
||||||
name: str
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class MessageReference:
|
|
||||||
message_id: str
|
|
||||||
channel_id: str
|
|
||||||
guild_id: str
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Sticker:
|
|
||||||
name: str
|
|
||||||
id: str
|
|
||||||
format_type: int
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Typing:
|
|
||||||
user_id: str
|
|
||||||
channel_id: str
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Webhook:
|
|
||||||
id: str
|
|
||||||
token: str
|
|
||||||
|
|
||||||
|
|
||||||
class User:
|
|
||||||
def __init__(self, user: dict) -> None:
|
|
||||||
self.discriminator = user["discriminator"]
|
|
||||||
self.id = user["id"]
|
|
||||||
self.mention = f"<@{self.id}>"
|
|
||||||
self.username = user["username"]
|
|
||||||
|
|
||||||
avatar = user["avatar"]
|
|
||||||
|
|
||||||
if not avatar:
|
|
||||||
# https://discord.com/developers/docs/reference#image-formatting
|
|
||||||
self.avatar_url = (
|
|
||||||
f"{CDN_URL}/embed/avatars/{int(self.discriminator) % 5}.png"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
ext = "gif" if avatar.startswith("a_") else "png"
|
|
||||||
self.avatar_url = f"{CDN_URL}/avatars/{self.id}/{avatar}.{ext}"
|
|
||||||
|
|
||||||
|
|
||||||
class Guild:
|
|
||||||
def __init__(self, guild: dict) -> None:
|
|
||||||
self.guild_id = guild["id"]
|
|
||||||
self.channels = [dict_cls(c, Channel) for c in guild["channels"]]
|
|
||||||
self.emojis = [dict_cls(e, Emote) for e in guild["emojis"]]
|
|
||||||
members = [member["user"] for member in guild["members"]]
|
|
||||||
self.members = [User(m) for m in members]
|
|
||||||
|
|
||||||
|
|
||||||
class GuildEmojisUpdate:
|
|
||||||
def __init__(self, update: dict) -> None:
|
|
||||||
self.guild_id = update["guild_id"]
|
|
||||||
self.emojis = [dict_cls(e, Emote) for e in update["emojis"]]
|
|
||||||
|
|
||||||
|
|
||||||
class GuildMembersChunk:
|
|
||||||
def __init__(self, chunk: dict) -> None:
|
|
||||||
self.chunk_index = chunk["chunk_index"]
|
|
||||||
self.chunk_count = chunk["chunk_count"]
|
|
||||||
self.guild_id = chunk["guild_id"]
|
|
||||||
self.members = [User(m) for m in chunk["members"]]
|
|
||||||
|
|
||||||
|
|
||||||
class GuildMemberUpdate:
|
|
||||||
def __init__(self, update: dict) -> None:
|
|
||||||
self.guild_id = update["guild_id"]
|
|
||||||
self.user = User(update["user"])
|
|
||||||
|
|
||||||
|
|
||||||
class Message:
|
|
||||||
def __init__(self, message: dict) -> None:
|
|
||||||
self.attachments = message.get("attachments", [])
|
|
||||||
self.channel_id = message["channel_id"]
|
|
||||||
self.content = message.get("content", "")
|
|
||||||
self.id = message["id"]
|
|
||||||
self.guild_id = message.get(
|
|
||||||
"guild_id", ""
|
|
||||||
) # Responses for sending webhook messages don't have guild_id
|
|
||||||
self.webhook_id = message.get("webhook_id", "")
|
|
||||||
self.application_id = message.get("application_id", "")
|
|
||||||
|
|
||||||
self.mentions = [
|
|
||||||
User(mention) for mention in message.get("mentions", [])
|
|
||||||
]
|
|
||||||
|
|
||||||
ref = message.get("referenced_message")
|
|
||||||
|
|
||||||
self.referenced_message = Message(ref) if ref else None
|
|
||||||
|
|
||||||
author = message.get("author")
|
|
||||||
|
|
||||||
self.author = User(author) if author else None
|
|
||||||
|
|
||||||
self.stickers = [
|
|
||||||
dict_cls(sticker, Sticker)
|
|
||||||
for sticker in message.get("sticker_items", [])
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class ChannelType:
|
|
||||||
GUILD_TEXT = 0
|
|
||||||
DM = 1
|
|
||||||
GUILD_VOICE = 2
|
|
||||||
GROUP_DM = 3
|
|
||||||
GUILD_CATEGORY = 4
|
|
||||||
GUILD_NEWS = 5
|
|
||||||
GUILD_STORE = 6
|
|
||||||
|
|
||||||
|
|
||||||
class InteractionResponseType:
|
|
||||||
PONG = 0
|
|
||||||
ACKNOWLEDGE = 1
|
|
||||||
CHANNEL_MESSAGE = 2
|
|
||||||
CHANNEL_MESSAGE_WITH_SOURCE = 4
|
|
||||||
ACKNOWLEDGE_WITH_SOURCE = 5
|
|
||||||
|
|
||||||
|
|
||||||
class GatewayIntents:
|
|
||||||
GUILDS = bitmask(0)
|
|
||||||
GUILD_MEMBERS = bitmask(1)
|
|
||||||
GUILD_BANS = bitmask(2)
|
|
||||||
GUILD_EMOJIS = bitmask(3)
|
|
||||||
GUILD_INTEGRATIONS = bitmask(4)
|
|
||||||
GUILD_WEBHOOKS = bitmask(5)
|
|
||||||
GUILD_INVITES = bitmask(6)
|
|
||||||
GUILD_VOICE_STATES = bitmask(7)
|
|
||||||
GUILD_PRESENCES = bitmask(8)
|
|
||||||
GUILD_MESSAGES = bitmask(9)
|
|
||||||
GUILD_MESSAGE_REACTIONS = bitmask(10)
|
|
||||||
GUILD_MESSAGE_TYPING = bitmask(11)
|
|
||||||
DIRECT_MESSAGES = bitmask(12)
|
|
||||||
DIRECT_MESSAGE_REACTIONS = bitmask(13)
|
|
||||||
DIRECT_MESSAGE_TYPING = bitmask(14)
|
|
||||||
|
|
||||||
|
|
||||||
class GatewayOpCodes:
|
|
||||||
DISPATCH = 0
|
|
||||||
HEARTBEAT = 1
|
|
||||||
IDENTIFY = 2
|
|
||||||
PRESENCE_UPDATE = 3
|
|
||||||
VOICE_STATE_UPDATE = 4
|
|
||||||
RESUME = 6
|
|
||||||
RECONNECT = 7
|
|
||||||
REQUEST_GUILD_MEMBERS = 8
|
|
||||||
INVALID_SESSION = 9
|
|
||||||
HELLO = 10
|
|
||||||
HEARTBEAT_ACK = 11
|
|
||||||
|
|
||||||
|
|
||||||
class Payloads:
|
|
||||||
def __init__(self, token: str) -> None:
|
|
||||||
self.seq = self.session = None
|
|
||||||
self.token = token
|
|
||||||
|
|
||||||
def HEARTBEAT(self) -> dict:
|
|
||||||
return {"op": GatewayOpCodes.HEARTBEAT, "d": self.seq}
|
|
||||||
|
|
||||||
def IDENTIFY(self) -> dict:
|
|
||||||
return {
|
|
||||||
"op": GatewayOpCodes.IDENTIFY,
|
|
||||||
"d": {
|
|
||||||
"token": self.token,
|
|
||||||
"intents": GatewayIntents.GUILDS
|
|
||||||
| GatewayIntents.GUILD_EMOJIS
|
|
||||||
| GatewayIntents.GUILD_MEMBERS
|
|
||||||
| GatewayIntents.GUILD_MESSAGES
|
|
||||||
| GatewayIntents.GUILD_MESSAGE_TYPING
|
|
||||||
| GatewayIntents.GUILD_PRESENCES,
|
|
||||||
"properties": {
|
|
||||||
"$os": "discord",
|
|
||||||
"$browser": "Discord Client",
|
|
||||||
"$device": "discord",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
def RESUME(self) -> dict:
|
|
||||||
return {
|
|
||||||
"op": GatewayOpCodes.RESUME,
|
|
||||||
"d": {
|
|
||||||
"token": self.token,
|
|
||||||
"session_id": self.session,
|
|
||||||
"seq": self.seq,
|
|
||||||
},
|
|
||||||
}
|
|
Loading…
Reference in a new issue