Advertisement
Alyssa

discord

Jun 1st, 2016
883
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 28.02 KB | None | 0 0
  1. import json
  2. import math
  3. import requests
  4. import time
  5.  
  6. version = "1.6"
  7.  
  8. base = "https://discordapp.com/api"
  9.  
  10. class User:
  11.     def __init__(self, user_json):
  12.         self.id = user_json["id"]
  13.         self.username = user_json["username"]
  14.         self.discriminator = user_json["discriminator"]
  15.         self.avatar = user_json["avatar"]
  16.         try:
  17.             self.verified = user_json["verified"]
  18.             self.email = user_json["email"]
  19.         except KeyError:
  20.             pass
  21.         try:
  22.             self.bot = user_json["bot"]
  23.         except KeyError:
  24.             self.bot = False
  25.  
  26. class Attachment:
  27.     def __init__(self, attach_json):
  28.         self.id = attach_json["id"]
  29.         self.filename = attach_json["filename"]
  30.         self.size = attach_json["size"]
  31.         self.url = attach_json["url"]
  32.         self.proxy_url = attach_json["proxy_url"]
  33.         try:
  34.             self.height = attach_json["height"]
  35.             self.width = attach_json["width"]
  36.         except KeyError:
  37.             pass
  38.  
  39. class Embed:
  40.     def __init__(self, embed_json):
  41.         self.title = embed_json["title"]
  42.         self.type = embed_json["type"]
  43.         self.description = embed_json["description"]
  44.         self.url = embed_json["url"]
  45.         if "thumbnail" in embed_json:
  46.             self.thumbnail = embed_json["thumbnail"]
  47.         if "provider" in embed_json:
  48.             self.provider = embed_json["provider"]
  49.  
  50. class Message:
  51.     def __init__(self, msg_json, session):
  52.         self.session = session
  53.         self.id = msg_json["id"]
  54.         self.channel_id = msg_json["channel_id"]
  55.         self.author = User(msg_json["author"])
  56.         self.content = msg_json["content"]
  57.         self.timestamp = msg_json["timestamp"]
  58.         self.edited_timestamp = msg_json["edited_timestamp"]
  59.         try:
  60.             self.tts = msg_json["tts"]
  61.         except KeyError:
  62.             pass
  63.         self.mention_everyone = msg_json["mention_everyone"]
  64.         self.mentions = []
  65.         for user_json in msg_json["mentions"]:
  66.             self.mentions.append(User(user_json))
  67.         self.attachments = []
  68.         for attachment_json in msg_json["attachments"]:
  69.             self.attachments.append(Attachment(attachment_json))
  70.         self.embeds = []
  71.         for embed_json in msg_json["embeds"]:
  72.             self.embeds.append(Embed(embed_json))
  73.         try:
  74.             self.nonce = msg_json["nonce"]
  75.         except KeyError:
  76.             pass
  77.     def reset(self, msg_json, session):
  78.         self.session = session
  79.         self.id = msg_json["id"]
  80.         self.channel_id = msg_json["channel_id"]
  81.         self.author = User(msg_json["author"])
  82.         self.content = msg_json["content"]
  83.         self.timestamp = msg_json["timestamp"]
  84.         self.edited_timestamp = msg_json["edited_timestamp"]
  85.         try:
  86.             self.tts = msg_json["tts"]
  87.         except KeyError:
  88.             pass
  89.         self.mention_everyone = msg_json["mention_everyone"]
  90.         self.mentions = []
  91.         for user_json in msg_json["mentions"]:
  92.             self.mentions.append(User(user_json))
  93.         self.attachments = []
  94.         for attachment_json in msg_json["attachments"]:
  95.             self.attachments.append(Attachment(attachment_json))
  96.         self.embeds = []
  97.         for embed_json in msg_json["embeds"]:
  98.             self.embeds.append(Embed(embed_json))
  99.         try:
  100.             self.nonce = msg_json["nonce"]
  101.         except KeyError:
  102.             pass
  103.     def edit(self, content):
  104.         path = "/channels/" + str(self.channel_id) + "/messages/" + self.id
  105.         response = self.session.patch(base + path, json = {"content": content})
  106.         self.reset(json.loads(response.text), self.session)
  107.         return True
  108.     def delete(self):
  109.         path = "/channels/" + str(self.channel_id) + "/messages/" + self.id
  110.         response = self.session.delete(base + path)
  111.         self.reset(json.loads(response.text), self.session)
  112.         return True
  113.     def ack():
  114.         path = "/channels/" + str(self.channel_id) + "/messages/" + self.id + "/ack"
  115.         response = self.session.post(base + path)
  116.         if response.status_code == 204:
  117.             return True
  118.         else:
  119.             return response.text
  120.  
  121. class Channel:
  122.     def delete(self):
  123.         path = "/channels/"
  124.         response = self.session.delete(base + path + str(self.id))
  125.         return json.loads(response.text)
  126.     def get_messages(self, before = False, after = False, limit = 50):
  127.         path = "/channels/" + str(self.id) + "/messages"
  128.         extra = ""
  129.         if before and after:
  130.             return False
  131.         elif before:
  132.             extra = "before=" + before + "&"
  133.         elif after:
  134.             extra = "after=" + after + "&"
  135.         response = self.session.get(base + path + "?" + extra + "limit=" + str(limit))
  136.         messages = []
  137.         for message in json.loads(response.text):
  138.             messages.append(Message(message, self.session))
  139.         return messages
  140.     def send(self, content, nonce = False, tts = False):
  141.         path = "/channels/" + str(self.id) + "/messages"
  142.         data = {"content": content}
  143.         if nonce:
  144.             data["nonce"] = nonce
  145.         if tts:
  146.             data["tts"] = tts
  147.         response = self.session.post(base + path, json = data)
  148.         return Message(json.loads(response.text), self.session)
  149.     def upload(self, file, content = "", nonce = False, tts = False):
  150.         return False #TODO: Add file uploading
  151.     def bulk_delete(self, messages):
  152.         path = "/channels/" + self.id + "/messages/bulk\_delete"
  153.         data = {}
  154.         to_delete = []
  155.         for entity in messages:
  156.             try:
  157.                 to_delete.append(entity.id)
  158.             except AttributeError:
  159.                 to_delete.append(str(entity))
  160.         data["messages"] = to_delete
  161.         response = self.session.post(base + path, json = data)
  162.         if response.status_code == 204:
  163.             return True
  164.         else:
  165.             return response.text
  166.     def type(self):
  167.         path = "/channels/" + self.id +  "/typing"
  168.         response = self.session.post(base + path)
  169.         if response.status_code == 204:
  170.             return True
  171.         else:
  172.             return response.text
  173.  
  174. class PermissionOverwrite:
  175.     def __init__(self, permo_json):
  176.         self.id = permo_json["id"]
  177.         self.type = permo_json["type"]
  178.         self.allow = permo_json["allow"]
  179.         self.deny = permo_json["deny"]
  180.  
  181. class Invite:
  182.     def __init__(self, invite_json, session):
  183.         self.code = invite_json["code"]
  184.         self.guild = invite_json["guild"]
  185.         self.channel = invite_json["channel"]
  186.         self.xkcdpass = invite_json["xkcdpass"]
  187.         self.session = session
  188.     def reset(self, invite_json, session):
  189.         self.code = invite_json["code"]
  190.         self.guild = invite_json["guild"]
  191.         self.channel = invite_json["channel"]
  192.         self.xkcdpass = invite_json["xkcdpass"]
  193.         self.session = session
  194.     def delete(self):
  195.         path = "/invites/" + self.code
  196.         response = self.session.delete(base + path)
  197.         self.reset(json.loads(response.text), self.session)
  198.         return True
  199.    
  200.     def accept(self):
  201.         path = "/invites/" + self.code
  202.         response = self.session.post(base + path)
  203.         self.reset(json.loads(response.text), self.session)
  204.         return True
  205.  
  206. class InviteMetadata(Invite):
  207.     def __init__(self, meta_json, session):
  208.         super().__init__(meta_json, session)
  209.         self.inviter = meta_json["inviter"]
  210.         self.uses = meta_json["uses"]
  211.         self.max_uses = meta_json["max_uses"]
  212.         self.temporary = meta_json["temporary"]
  213.         self.created_at = meta_json["created_at"]
  214.         self.revoked = meta_json["revoked"]
  215.         self.session = session
  216.  
  217. class GuildChannel(Channel):
  218.     def __init__(self, gc_json, session):
  219.         self.session = session
  220.         self.id = gc_json["id"]
  221.         self.guild_id = gc_json["guild_id"]
  222.         self.name = gc_json["name"]
  223.         self.type = gc_json["type"]
  224.         self.position = gc_json["position"]
  225.         self.is_private = gc_json["is_private"]
  226.         self.channel_type = "guild"
  227.         self.permission_overwrites = []
  228.         for permo_json in gc_json["permission_overwrites"]:
  229.             self.permission_overwrites.append(PermissionOverwrite(permo_json))
  230.         if self.type == "text":
  231.             self.topic = gc_json["topic"]
  232.             self.last_message_id = gc_json["last_message_id"]
  233.         elif self.type == "voice":
  234.             self.bitrate = gc_json["bitrate"]
  235.     def reset(self, gc_json, session):
  236.         self.session = session
  237.         self.id = gc_json["id"]
  238.         self.guild_id = gc_json["guild_id"]
  239.         self.name = gc_json["name"]
  240.         self.type = gc_json["type"]
  241.         self.position = gc_json["position"]
  242.         self.is_private = gc_json["is_private"]
  243.         self.channel_type = "guild"
  244.         self.permission_overwrites = []
  245.         for permo_json in gc_json["permission_overwrites"]:
  246.             self.permission_overwrites.append(PermissionOverwrite(permo_json))
  247.         if self.type == "text":
  248.             self.topic = gc_json["topic"]
  249.             self.last_message_id = gc_json["last_message_id"]
  250.         elif self.type == "voice":
  251.             self.bitrate = gc_json["bitrate"]
  252.     def modify(self, name = False, position = False, topic = False, bitrate = False, user_limit = False):
  253.         path = "/channels/"
  254.         data = {}
  255.         if name:
  256.             data["name"] = name
  257.         if position:
  258.             data["position"] = int(position)
  259.         if topic:
  260.             data["topic"] = topic
  261.         if bitrate:
  262.             data["bitrate"] = int(bitrate)
  263.         if user_limit:
  264.             data["user_limit"] = int(user_limit)
  265.         response = self.session.patch(base + path + str(self.id), data=data)
  266.         if response.status_code == 400:
  267.             return response.text
  268.         else:
  269.             self.reset(json.loads(response.text), self.session)
  270.             return True
  271.    
  272.     def edit_permissions(self, id, allow, deny):
  273.         path = "/channels/" + self.id + "/permissions/" + str(id)
  274.         response = self.session.put(base + path, json = {"allow": allow, "deny": deny})
  275.         if response.status_code == 204:
  276.             return True
  277.         else:
  278.             return response.text
  279.    
  280.     def get_invites(self):
  281.         path = "/channels/" + self.id + "/invites"
  282.         response = self.session.get(base + path)
  283.         invites = []
  284.         for invite in json.loads(response.text):
  285.             invites.append(InviteMetadata(invite, self.session))
  286.         return invites
  287.    
  288.     def create_invite(self, duration = 86400, max_uses = 0, temporary = False, xkcdpass = False):
  289.         path = "/channels/" + self.id + "/invites"
  290.         data = {"duration": duration, "max_uses": max_uses, "temporary": temporary, "xkcdpass": xkcdpass}
  291.         response = self.session.post(base + path, json = data)
  292.         return Invite(json.loads(response.text), self.session)
  293.    
  294.     def delete_permission(self, id):
  295.         path = "/channels/" + self.id + "/permissions/" + str(id)
  296.         response = self.session.post(base + path)
  297.         if response.status_code == 204:
  298.             return True
  299.         else:
  300.             return response.text
  301.     def modify_position(self, position):
  302.         path = "/guilds/" + self.guild_id + "/channels"
  303.         data = {"id": self.id, "position":  position}
  304.         response = self.session.patch(base +  path, json = data)
  305.         self.reset(json.loads(response.text), self.session)
  306.         return True
  307.  
  308. class DM(Channel):
  309.     def __init__(self, dm_json, session):
  310.         self.session = session
  311.         self.id = dm_json["id"]
  312.         self.is_private = dm_json["is_private"]
  313.         self.recipient = User(dm_json["recipient"])
  314.         self.last_message_id = dm_json["last_message_id"]
  315.         self.channel_type = "dm"
  316.  
  317. class VoiceState:
  318.     def __init__(self, voice_json, session):
  319.         self.session = session
  320.         try:
  321.             self.guild_id = voice_json["guild_id"]
  322.         except KeyError:
  323.             pass
  324.         self.channel_id = voice_json["channel_id"]
  325.         self.user_id = voice_json["user_id"]
  326.         self.session_id = voice_json["session_id"]
  327.         self.deaf = voice_json["deaf"]
  328.         self.mute = voice_json["mute"]
  329.         self.self_deaf = voice_json["self_deaf"]
  330.         self.self_mute = voice_json["self_mute"]
  331.         self.suppress = voice_json["suppress"]
  332.  
  333. class Role:
  334.     def __init__(self, role_json, session, guild_id):
  335.         self.session = session
  336.         self.id = role_json["id"]
  337.         self.name = role_json["name"]
  338.         self.color = role_json["color"]
  339.         self.hoist = role_json["hoist"]
  340.         self.position = role_json["position"]
  341.         self.permissions = role_json["permissions"]
  342.         self.managed = role_json["managed"]
  343.         self.mentionable = role_json["mentionable"]
  344.         self.guild_id = guild_id
  345.     def reset(self, role_json, session, guild_id):
  346.         self.session = session
  347.         self.id = role_json["id"]
  348.         self.name = role_json["name"]
  349.         self.color = role_json["color"]
  350.         self.hoist = role_json["hoist"]
  351.         self.position = role_json["position"]
  352.         self.permissions = role_json["permissions"]
  353.         self.managed = role_json["managed"]
  354.         self.mentionable = role_json["mentionable"]
  355.         self.guild_id = guild_id
  356.     def modify(self, name = None, permissions = None, position = None, color = None, hoist = None, mentionable = None):
  357.         path = "/guilds/" + self.guild_id + "/roles/" + self.id
  358.         if name is None:
  359.             name = self.name
  360.         if permissions is None:
  361.             permissions = self.permissions
  362.         if position is None:
  363.             position = self.position
  364.         if color is None:
  365.             color = self.color
  366.         if hoist is None:
  367.             hoist = self.hoist
  368.         if mentionable is None:
  369.             mentionable = self.mentionable
  370.         data = {"name" : name, "permissions": permissions, "position": position, "color": color, "hoist": hoist, "mentionable": mentionable}
  371.         response = self.session.patch(base + path, json = data)
  372.         self.reset(json.loads(response.text), self.session, self.guild_id)
  373.         return True
  374.    
  375.     def delete(self):
  376.         path = "/guilds/" + self.guild_id + "/roles/" + self.id
  377.         response = self.session.delete(base + path)
  378.         self.reset_(json.loads(response.text), self.session, self.guild_id)
  379.         return True
  380.  
  381. class Emoji:
  382.     def __init__(self, emoji_json, session):
  383.         self.session = session
  384.         self.id = role_json["id"]
  385.         self.name = role_json["name"]
  386.         self.roles = []
  387.         for role in role_json["roles"]:
  388.             self.roles.append(Role(role, self.session, self.id))
  389.         self.require_colons = role_json["require_colons"]
  390.         self.managed = role_json["managed"]
  391.  
  392. class GuildMember:
  393.     def __init__(self, gm_json, session, guild_id):
  394.         self.session = session
  395.         self.user = User(gm_json["user"])
  396.         try:
  397.             self.nick = gm_json["nick"]
  398.         except KeyError:
  399.             pass
  400.         self.roles = gm_json["roles"]
  401.         self.joined_at = gm_json["joined_at"]
  402.         self.deaf = gm_json["deaf"]
  403.         self.mute = gm_json["mute"]
  404.         self.guild_id = guild_id
  405.     def reset(self, gm_json, session, guild_id):
  406.         self.session = session
  407.         self.user = User(gm_json["user"])
  408.         try:
  409.             self.nick = gm_json["nick"]
  410.         except KeyError:
  411.             pass
  412.         self.roles = gm_json["roles"]
  413.         self.joined_at = gm_json["joined_at"]
  414.         self.deaf = gm_json["deaf"]
  415.         self.mute = gm_json["mute"]
  416.         self.guild_id = guild_id
  417.     def modify(self, nick = False, roles = False, mute = False, deaf = False, channel_id = False):
  418.         path = "/guilds/" + self.guild_id + "/members/" + self.user.id
  419.         data = {}
  420.         if nick:
  421.             data["nick"] = nick
  422.         if roles:
  423.             data["roles"] = roles
  424.         if mute:
  425.             data["mute"] = mute
  426.         if deaf:
  427.             data["deaf"] = deaf
  428.         if channel_id:
  429.             data["channel_id"] = channel_id
  430.         response = self.session.patch(base + path, json = data)
  431.         try:
  432.             json.loads(response.text)
  433.             return False
  434.         except ValueError:
  435.             return True
  436.    
  437.     def remove(self):
  438.         path = "/guilds/" + self.guild_id + "/members/" + self.user.id
  439.         response = self.session.delete(base + path)
  440.         if response.status_code == 204:
  441.             return True
  442.         else:
  443.             return response.text
  444.    
  445.     def ban(self, delete=0):
  446.         path = "/guilds/" + self.guild_id + "/bans/" + self.id
  447.         data = {"delete-message-days": delete}
  448.         response = self.session.put(base + path, json = data)
  449.         if response.status_code == 204:
  450.             return True
  451.         else:
  452.             return response.text
  453.    
  454.     def unban(self):
  455.         path = "/guilds/" + self.guild_id + "/bans/" + self.id
  456.         response = self.session.delete(base + path)
  457.         if response.status_code == 204:
  458.             return True
  459.         else:
  460.             return response.text
  461.    
  462. class Integration:
  463.     def __init__(self, in_json, session, guild_id):
  464.         self.session = session
  465.         self.guild_id = guild_id
  466.         self.id = in_json["id"]
  467.         self.name = in_json["name"]
  468.         self.type = in_json["type"]
  469.         self.enabled = in_json["enabled"]
  470.         self.syncing = in_json["syncing"]
  471.         self.role_id = in_json["role_id"]
  472.         self.expire_behavior = in_json["expire_behavior"]
  473.         self.expire_grace_period = in_json["expire_grace_period"]
  474.         self.user = User(in_json["user"])
  475.         self.account = in_json["account"]
  476.         self.synced_at = in_json["synced_at"]
  477.    
  478.     def modify(self, expire_behavior, expire_grace_period, enable_emoticons = False):
  479.         path = "/guilds/" + self.guild_id + "/integrations/" + self.id
  480.         data = {"expire_behavior": expire_behavior, "expire_grace_period": expire_grace_period}
  481.         if enable_emoticons:
  482.             data["enable_emoticons"] = enable_emoticons
  483.         response = self.session.patch(base + path, json = data)
  484.         if response.status_code == 204:
  485.             return True
  486.         else:
  487.             return response.text
  488.    
  489.     def delete(self):
  490.         path = "/guilds/" + self.guild_id + "/integrations/" + self.id
  491.         response = self.session.delete(base + path)
  492.         if response.status_code == 204:
  493.             return True
  494.         else:
  495.             return response.text
  496.    
  497.     def sync(self):
  498.         path = "/guilds/" + self.guild_id + "/integrations/" + self.id + "/sync"
  499.         response = self.session.post(base + path)
  500.         if response.status_code == 204:
  501.             return True
  502.         else:
  503.             return response.text
  504.  
  505. class GuildEmbed:
  506.     def __init__(self, ge_json):
  507.         self.enabled = ge_json["enabled"]
  508.         self.channel_id = ge_json["channel_id"]
  509.  
  510. class Guild:
  511.     def __init__(self, guild_json, session):
  512.         self.session = session
  513.         self.id = guild_json["id"]
  514.         self.name = guild_json["name"]
  515.         self.icon = guild_json["icon"]
  516.         self.splash = guild_json["splash"]
  517.         self.owner_id = guild_json["owner_id"]
  518.         self.region = guild_json["region"]
  519.         self.afk_channel_id = guild_json["afk_channel_id"]
  520.         self.afk_timeout = guild_json["afk_timeout"]
  521.         self.embed_enabled = guild_json["embed_enabled"]
  522.         self.embed_channel_id = guild_json["embed_channel_id"]
  523.         self.verification_level = guild_json["verification_level"]
  524.         self.voice_states = []
  525.         try:
  526.             for voice_state in guild_json["voice_states"]:
  527.                 self.voice_states.append(VoiceState(voice_state))
  528.         except KeyError:
  529.             pass
  530.         self.roles = []
  531.         for role in guild_json["roles"]:
  532.             self.roles.append(Role(role, self.session, self.id))
  533.         self.emojis = []
  534.         for emoji in guild_json["emojis"]:
  535.             self.emojis.append(Emoji(emoji))
  536.         self.features = guild_json["features"]
  537.     def reset(self, guild_json, session):
  538.         self.session = session
  539.         self.id = guild_json["id"]
  540.         self.name = guild_json["name"]
  541.         self.icon = guild_json["icon"]
  542.         self.splash = guild_json["splash"]
  543.         self.owner_id = guild_json["owner_id"]
  544.         self.region = guild_json["region"]
  545.         self.afk_channel_id = guild_json["afk_channel_id"]
  546.         self.afk_timeout = guild_json["afk_timeout"]
  547.         self.embed_enabled = guild_json["embed_enabled"]
  548.         self.embed_channel_id = guild_json["embed_channel_id"]
  549.         self.verification_level = guild_json["verification_level"]
  550.         self.voice_states = []
  551.         try:
  552.             for voice_state in guild_json["voice_states"]:
  553.                 self.voice_states.append(VoiceState(voice_state))
  554.         except KeyError:
  555.             pass
  556.         self.roles = []
  557.         for role in guild_json["roles"]:
  558.             self.roles.append(Role(role, self.session, self.id))
  559.         self.emojis = []
  560.         for emoji in guild_json["emojis"]:
  561.             self.emojis.append(Emoji(emoji))
  562.         self.features = guild_json["features"]
  563.     def modify(self, name = False, region = False, verification_level = False, afk_channel_id = False, afk_timeout = False, icon = False, owner_id = False, splash = False):
  564.         path = "/guilds/" + self.id
  565.         data = {}
  566.         if name:
  567.             data["name"] = name
  568.         if region:
  569.             data["region"] = region
  570.         if verification_level:
  571.             data["verification_level"] = verification_level
  572.         if afk_channel_id:
  573.             data["afk_channel_id"] = afk_channel_id
  574.         if afk_timeout:
  575.             data["afk_timeout"] = afk_timeout
  576.         if icon:
  577.             data["icon"] = icon
  578.         if owner_id:
  579.             data["owner_id"] = owner_id
  580.         if splash:
  581.             data["splash"] = splash
  582.         response = self.session.patch(base + path, json = data)
  583.         self.reset(json.loads(response.text), self.session)
  584.         return True
  585.    
  586.     def delete(self):
  587.         path = "/guilds/" + self.id
  588.         response = self.session.delete(base + path)
  589.         self.reset(json.loads(response.text), self.session)
  590.         return True
  591.    
  592.     def get_channels(self):
  593.         path = "/guilds/" + self.id + "/channels"
  594.         response = self.session.get(base + path)
  595.         guild_channels = []
  596.         for guild_channel in json.loads(response.text):
  597.             guild_channels.append(GuildChannel(guild_channel, self.session))
  598.         return guild_channels
  599.    
  600.     def create_channel(self, name, type, bitrate = 64000):
  601.         path = "/guilds/" + self.id + "/channels"
  602.         data = {"name": name, "type": type, "bitrate": bitrate}
  603.         response = self.session.post(base + path, json = data)
  604.         return GuildChannel(json.loads(response.text), self.session)
  605.    
  606.     def leave_guild(self):
  607.         path = "/users/@me/guilds/"
  608.         response = self.session.delete(base + path + self.id)
  609.         if response.status_code == 204:
  610.             return True
  611.         else:
  612.             return response.text
  613.    
  614.     def get_member(self, id):
  615.         path = "/guilds/" + self.id + "/members/" + str(id)
  616.         response = self.session.get(base + path)
  617.         return GuildMember(json.loads(response.text, self.session, self.id))
  618.    
  619.     def list_members(self, limit=1, offset=0):
  620.         path = "/guilds/" + self.id + "/members"
  621.         response = self.session.get(base + path + "?limit=" + str(limit) + "&offset=" + str(offset))
  622.         guild_members_raw = json.loads(response.text)
  623.         guild_members = []
  624.         for guild_member in guild_members_raw:
  625.             guild_members.append(GuildMember(guild_member, self.session, self.id))
  626.         return guild_members
  627.    
  628.     def get_bans(self):
  629.         path = "/guilds/" + self.id + "/bans"
  630.         response = self.session.get(base + path)
  631.         bans = []
  632.         for ban in json.loads(response.text):
  633.             bans.append(User(ban))
  634.         return Bans
  635.    
  636.     def ban(self, id, delete=0):
  637.         path = "/guilds/" + self.id + "/bans/" + str(id)
  638.         data = {"delete-message-days": delete}
  639.         response = self.session.put(base + path, json = data)
  640.         if response.status_code == 204:
  641.             return True
  642.         else:
  643.             return response.text
  644.    
  645.     def unban(self, id):
  646.         path = "/guilds/" + self.id + "/bans/" + str(id)
  647.         response = self.session.delete(base + path)
  648.         if response.status_code == 204:
  649.             return True
  650.         else:
  651.             return response.text
  652.    
  653.     def get_roles(self):
  654.         path = "/guilds/" + self.id + "/roles"
  655.         response = self.session.get(base + path)
  656.         roles = []
  657.         for role in json.loads(response.text):
  658.             roles.append(Role(role, self.session, self.id))
  659.         return roles
  660.    
  661.     def create_role(self):
  662.         path = "/guilds/" + self.id + "/roles"
  663.         response = self.session.post(base + path)
  664.         return Role(json.loads(response.text), self.session, self.id)
  665.    
  666.     def modify_role(self, bulk):
  667.         path = "/guilds/" + self.id + "/roles"
  668.         data = bulk
  669.         response = self.session.patch(base + path, json = data)
  670.         return response.text
  671.    
  672.     def get_prune(self, days):
  673.         path = "/guilds/" + self.id + "/prune"
  674.         response = self.session.get(base + path + "?days=" + str(days))
  675.         return json.loads(response.text)["pruned"]
  676.    
  677.     def begin_prune(self, days):
  678.         path = "/guilds/" + self.id + "/prune"
  679.         data = {"days": int(days)}
  680.         response = self.session.post(base + path, json = data)
  681.         return json.loads(response.text)["pruned"]
  682.    
  683.     def get_voice_regions(self):
  684.         path = "/guilds/" + self.id + "/regions"
  685.         response = self.session.get(base + path)
  686.         return json.loads(response.text)
  687.    
  688.     def get_invites(self):
  689.         path = "/guilds/" + self.id + "/invites"
  690.         response = self.session.get(base + path)
  691.         invites = []
  692.         for invite in json.loads(response.text):
  693.             invites.append(InviteMetadata(invite, self.session))
  694.    
  695.     def get_integrations(self):
  696.         path = "/guilds/" + self.id + "/integrations"
  697.         response = self.session.get(base + path)
  698.         integrations = []
  699.         for integration in json.loads(response.text):
  700.             integrations.append(Integration(integration, self.session, self.id))
  701.         return integrations
  702.    
  703.     def create_integration(self, type, id):
  704.         path = "/guilds/" + self.id + "/integrations"
  705.         data = {"type": type, "id": id}
  706.         response = self.session.post(base + path, json = data)
  707.         if response.status_code == 204:
  708.             return True
  709.         else:
  710.             return response.text
  711.    
  712.     def get_embed(self):
  713.         path = "/guilds/" + self.id + "/embed"
  714.         response = self.session.get(base + path)
  715.         return GuildEmbed(json.loads(response.text))
  716.    
  717.     def modify_embed(self, enabled = "Not set", channel_id = False):
  718.         path = "/guilds/" + self.id + "/embed"
  719.         data = {}
  720.         if enabled != "Not set":
  721.             data["enabled"] = enabled
  722.         if channel_id:
  723.             data["channel_id"] = channel_id
  724.         response = self.session.patch(base + path, json = data)
  725.         return GuildEmbed(json.loads(response.text))
  726.    
  727.     def nick(self, nickname):
  728.         path = "/guilds/" + self.id + "/members/@me/nick"
  729.         data = {"nick": nickname}
  730.         response = self.session.patch(base + path, json = data)
  731.         if response.status_code == 200:
  732.             return json.loads(response.text)
  733.         else:
  734.             return response.text
  735.  
  736. class Discord:
  737.  
  738.     def __init__(self, authorization, bot = False, user_agent = "Default Discord-py UserAgent"):
  739.         self.session = requests.Session()
  740.         self.auth = authorization
  741.         self.is_bot = bot
  742.         self.session.headers.update({"Authorization": self.auth, "User-Agent": user_agent})
  743.    
  744.     def status(self, message):
  745.             path = "/track"
  746.             response = self.session.post(base + path, json = {"event": "Launch Game", "properties": {"Game": message}})
  747.             if response.status_code == 204:
  748.                 return True
  749.             else:
  750.                 return response.text
  751.                
  752.     def search_users(self, query, limit=25):
  753.         path = "/users"
  754.         response = self.session.get(base + path + "?q=" + query + "&limit=" + str(int(limit)))
  755.         users = []
  756.         for user in json.loads(response.text):
  757.             users.append(User(user))
  758.         return users
  759.        
  760.     def get_current_user(self, debug = False):
  761.         path = "/users/@me"
  762.         response = self.session.get(base + path)
  763.         if debug == False:
  764.             return User(json.loads(response.text))
  765.         else:
  766.             return response.text
  767.        
  768.     def get_user(self, user_id):
  769.         path = "/users"
  770.         response = self.session.get(base + path + "/" + user_id)
  771.         return User(json.loads(response.text))
  772.    
  773.     def modify_user(self, username, avatar = False, new_password = False, email = "", password = ""):
  774.         path = "/users/@me"
  775.         data = {"username": username}
  776.         if avatar:
  777.             data["avatar"] = avatar
  778.         if not self.is_bot:
  779.             data["password"] = password
  780.             data["email"] = email
  781.             if new_password:
  782.                 data["new_password"] = new_password
  783.         response = self.session.patch(base + path, json = data)
  784.         me = json.loads(response.text)
  785.         if self.is_bot == False and new_password:
  786.             self.auth = me["token"]
  787.             self.session.headers.update({"Authorization": self.auth})
  788.         return me
  789.    
  790.     def get_guilds(self):
  791.         path = "/users/@me/guilds"
  792.         response = self.session.get(base + path)
  793.         user_guilds = []
  794.         for user_guild in json.loads(response.text):
  795.             user_guilds.append(user_guild) #It's possible we'll make a User Guild Object
  796.         return user_guilds
  797.    
  798.     def leave_guild(self, guild_id):
  799.         path = "/users/@me/guilds/"
  800.         response = self.session.delete(base + path + str(guild_id))
  801.         if response.status_code == 204:
  802.             return True
  803.         else:
  804.             return response.text
  805.    
  806.     def get_dms(self):
  807.         path = "/users/@me/channels"
  808.         response = self.session.get(base + path)
  809.         dms = json.loads(response.text)
  810.         dm_list = []
  811.         for dm_channel in dms:
  812.             dm_list.append(DM(dm_channel, self.session))
  813.         return dm_list
  814.    
  815.     def create_dm(self, recipient):
  816.         path = "/users/@me/channels"
  817.         response = self.session.post(base + path, json = {"recipient_id": recipient})
  818.         return DM(json.loads(response.text), self.session)
  819.    
  820.     def get_connections(self):
  821.         return False ##TODO: Do something with this?
  822.        
  823.     def get_channel(self, channel_id):
  824.         path = "/channels/"
  825.         response = self.session.get(base + path + str(channel_id))
  826.         channel = json.loads(response.text)
  827.         if channel["is_private"]:
  828.             return DM(channel, self.session)
  829.         else:
  830.             return GuildChannel(channel, self.session)
  831.    
  832.     def get_guild(self, guild_id):
  833.         path = "/guilds/"
  834.         response = self.session.get(base + path + str(guild_id))
  835.         guild = json.loads(response.text)
  836.         return Guild(guild, self.session)
  837.    
  838.     def create_guild(self, name, region, icon):
  839.         path = "/guilds"
  840.         data = {"name": name, "region": region, "icon": icon}
  841.         response = self.session.post(base + path, json = data)
  842.         return Guild(json.loads(response.text), self.session)
  843.    
  844.     def accept_invite(self, id):
  845.         path = "/invites/" + str(id)
  846.         response = self.session.post(base + path)
  847.         return Invite(json.loads(response.text), self.session)
  848.    
  849.     def logout(self, provider = "apns", token = "null"):
  850.         path = "/auth/logout"
  851.         data = {"provider": provider, "token": token}
  852.         response = self.session.post(base + path, json = data)
  853.         if response.status_code == 204:
  854.             return True
  855.         else:
  856.             return response.text
  857.  
  858. def login(email, password):
  859.     path = "/auth/login"
  860.     data = {"email": email, "password": password}
  861.     response = requests.post(base + path, json = data)
  862.     if response.status_code == 200:
  863.         return json.loads(response.text)["token"]
  864.     else:
  865.         resp = json.loads(response.text)
  866.         try:
  867.             if resp["email"][0] == "Email does not exist.":
  868.                 return "Nonexistant Email"
  869.         except KeyError:
  870.             try:
  871.                 if resp["password"][0] == "Password does not match.":
  872.                     return "Incorrect password."
  873.             except KeyError:
  874.                 return response
  875.         return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement