Remove commented-out old code
This commit is contained in:
parent
58d8927380
commit
a4449ceaae
@ -130,114 +130,3 @@ def run():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
client.run(bot_token)
|
client.run(bot_token)
|
||||||
|
|
||||||
# logging.getLogger("pluralkit").setLevel(logging.DEBUG)
|
|
||||||
|
|
||||||
# class PluralKitBot:
|
|
||||||
# def __init__(self, token):
|
|
||||||
# self.token = token
|
|
||||||
# self.logger = logging.getLogger("pluralkit.bot")
|
|
||||||
#
|
|
||||||
# self.client = discord.Client()
|
|
||||||
# self.client.event(self.on_error)
|
|
||||||
# self.client.event(self.on_ready)
|
|
||||||
# self.client.event(self.on_message)
|
|
||||||
# self.client.event(self.on_socket_raw_receive)
|
|
||||||
#
|
|
||||||
# self.channel_logger = channel_logger.ChannelLogger(self.client)
|
|
||||||
#
|
|
||||||
# self.proxy = proxy.Proxy(self.client, token, self.channel_logger)
|
|
||||||
#
|
|
||||||
# async def on_error(self, evt, *args, **kwargs):
|
|
||||||
# self.logger.exception("Error while handling event {} with arguments {}:".format(evt, args))
|
|
||||||
#
|
|
||||||
# async def on_ready(self):
|
|
||||||
# self.logger.info("Connected to Discord.")
|
|
||||||
# self.logger.info("- Account: {}#{}".format(self.client.user.name, self.client.user.discriminator))
|
|
||||||
# self.logger.info("- User ID: {}".format(self.client.user.id))
|
|
||||||
# self.logger.info("- {} servers".format(len(self.client.servers)))
|
|
||||||
#
|
|
||||||
# async def on_message(self, message):
|
|
||||||
# # Ignore bot messages
|
|
||||||
# if message.author.bot:
|
|
||||||
# return
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# if await self.handle_command_dispatch(message):
|
|
||||||
# return
|
|
||||||
#
|
|
||||||
# if await self.handle_proxy_dispatch(message):
|
|
||||||
# return
|
|
||||||
# except Exception:
|
|
||||||
# await self.log_error_in_channel(message)
|
|
||||||
#
|
|
||||||
# async def on_socket_raw_receive(self, msg):
|
|
||||||
# # Since on_reaction_add is buggy (only works for messages the bot's already cached, ie. no old messages)
|
|
||||||
# # we parse socket data manually for the reaction add event
|
|
||||||
# if isinstance(msg, str):
|
|
||||||
# try:
|
|
||||||
# msg_data = json.loads(msg)
|
|
||||||
# if msg_data.get("t") == "MESSAGE_REACTION_ADD":
|
|
||||||
# evt_data = msg_data.get("d")
|
|
||||||
# if evt_data:
|
|
||||||
# user_id = evt_data["user_id"]
|
|
||||||
# message_id = evt_data["message_id"]
|
|
||||||
# emoji = evt_data["emoji"]["name"]
|
|
||||||
#
|
|
||||||
# async with self.pool.acquire() as conn:
|
|
||||||
# await self.proxy.handle_reaction(conn, user_id, message_id, emoji)
|
|
||||||
# elif msg_data.get("t") == "MESSAGE_DELETE":
|
|
||||||
# evt_data = msg_data.get("d")
|
|
||||||
# if evt_data:
|
|
||||||
# message_id = evt_data["id"]
|
|
||||||
# async with self.pool.acquire() as conn:
|
|
||||||
# await self.proxy.handle_deletion(conn, message_id)
|
|
||||||
# except ValueError:
|
|
||||||
# pass
|
|
||||||
#
|
|
||||||
# async def handle_command_dispatch(self, message):
|
|
||||||
# async with self.pool.acquire() as conn:
|
|
||||||
# result = await commands.command_dispatch(self.client, message, conn)
|
|
||||||
# return result
|
|
||||||
#
|
|
||||||
# async def handle_proxy_dispatch(self, message):
|
|
||||||
# # Try doing proxy parsing
|
|
||||||
# async with self.pool.acquire() as conn:
|
|
||||||
# return await self.proxy.try_proxy_message(conn, message)
|
|
||||||
#
|
|
||||||
# async def log_error_in_channel(self, message):
|
|
||||||
# channel_id = os.environ["LOG_CHANNEL"]
|
|
||||||
# if not channel_id:
|
|
||||||
# return
|
|
||||||
#
|
|
||||||
# channel = self.client.get_channel(channel_id)
|
|
||||||
# embed = embeds.exception_log(
|
|
||||||
# message.content,
|
|
||||||
# message.author.name,
|
|
||||||
# message.author.discriminator,
|
|
||||||
# message.server.id if message.server else None,
|
|
||||||
# message.channel.id
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# await self.client.send_message(channel, "```python\n{}```".format(traceback.format_exc()), embed=embed)
|
|
||||||
#
|
|
||||||
# async def run(self):
|
|
||||||
# try:
|
|
||||||
# self.logger.info("Connecting to database...")
|
|
||||||
# self.pool = await db.connect(
|
|
||||||
# os.environ["DATABASE_USER"],
|
|
||||||
# os.environ["DATABASE_PASS"],
|
|
||||||
# os.environ["DATABASE_NAME"],
|
|
||||||
# os.environ["DATABASE_HOST"],
|
|
||||||
# int(os.environ["DATABASE_PORT"])
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# self.logger.info("Attempting to create tables...")
|
|
||||||
# async with self.pool.acquire() as conn:
|
|
||||||
# await db.create_tables(conn)
|
|
||||||
#
|
|
||||||
# self.logger.info("Connecting to Discord...")
|
|
||||||
# await self.client.start(self.token)
|
|
||||||
# finally:
|
|
||||||
# self.logger.info("Logging out from Discord...")
|
|
||||||
# await self.client.logout()
|
|
||||||
|
@ -211,232 +211,3 @@ async def try_delete_by_reaction(conn, client: discord.Client, message_id: int,
|
|||||||
await original_message.delete()
|
await original_message.delete()
|
||||||
|
|
||||||
await handle_deleted_message(conn, client, message_id, original_message.content, logger)
|
await handle_deleted_message(conn, client, message_id, original_message.content, logger)
|
||||||
|
|
||||||
# # TODO: possibly move this to bot __init__ so commands can access it too
|
|
||||||
# class WebhookPermissionError(Exception):
|
|
||||||
# pass
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# class DeletionPermissionError(Exception):
|
|
||||||
# pass
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# class Proxy:
|
|
||||||
# def __init__(self, client: discord.Client, token: str, logger: channel_logger.ChannelLogger):
|
|
||||||
# self.logger = logging.getLogger("pluralkit.bot.proxy")
|
|
||||||
# self.session = aiohttp.ClientSession()
|
|
||||||
# self.client = client
|
|
||||||
# self.token = token
|
|
||||||
# self.channel_logger = logger
|
|
||||||
#
|
|
||||||
# async def save_channel_webhook(self, conn, channel: discord.Channel, id: str, token: str) -> (str, str):
|
|
||||||
# await db.add_webhook(conn, channel.id, id, token)
|
|
||||||
# return id, token
|
|
||||||
#
|
|
||||||
# async def create_and_add_channel_webhook(self, conn, channel: discord.Channel) -> (str, str):
|
|
||||||
# # This method is only called if there's no webhook found in the DB (and hopefully within a transaction)
|
|
||||||
# # No need to worry about error handling if there's a DB conflict (which will throw an exception because DB constraints)
|
|
||||||
# req_headers = {"Authorization": "Bot {}".format(self.token)}
|
|
||||||
#
|
|
||||||
# # First, check if there's already a webhook belonging to the bot
|
|
||||||
# async with self.session.get("https://discordapp.com/api/v6/channels/{}/webhooks".format(channel.id),
|
|
||||||
# headers=req_headers) as resp:
|
|
||||||
# if resp.status == 200:
|
|
||||||
# webhooks = await resp.json()
|
|
||||||
# for webhook in webhooks:
|
|
||||||
# if webhook["user"]["id"] == self.client.user.id:
|
|
||||||
# # This webhook belongs to us, we can use that, return it and save it
|
|
||||||
# return await self.save_channel_webhook(conn, channel, webhook["id"], webhook["token"])
|
|
||||||
# elif resp.status == 403:
|
|
||||||
# self.logger.warning(
|
|
||||||
# "Did not have permission to fetch webhook list (server={}, channel={})".format(channel.server.id,
|
|
||||||
# channel.id))
|
|
||||||
# raise WebhookPermissionError()
|
|
||||||
# else:
|
|
||||||
# raise discord.HTTPException(resp, await resp.text())
|
|
||||||
#
|
|
||||||
# # Then, try submitting a new one
|
|
||||||
# req_data = {"name": "PluralKit Proxy Webhook"}
|
|
||||||
# async with self.session.post("https://discordapp.com/api/v6/channels/{}/webhooks".format(channel.id),
|
|
||||||
# json=req_data, headers=req_headers) as resp:
|
|
||||||
# if resp.status == 200:
|
|
||||||
# webhook = await resp.json()
|
|
||||||
# return await self.save_channel_webhook(conn, channel, webhook["id"], webhook["token"])
|
|
||||||
# elif resp.status == 403:
|
|
||||||
# self.logger.warning(
|
|
||||||
# "Did not have permission to create webhook (server={}, channel={})".format(channel.server.id,
|
|
||||||
# channel.id))
|
|
||||||
# raise WebhookPermissionError()
|
|
||||||
# else:
|
|
||||||
# raise discord.HTTPException(resp, await resp.text())
|
|
||||||
#
|
|
||||||
# # Should not be reached without an exception being thrown
|
|
||||||
#
|
|
||||||
# async def get_webhook_for_channel(self, conn, channel: discord.Channel):
|
|
||||||
# async with conn.transaction():
|
|
||||||
# hook_match = await db.get_webhook(conn, channel.id)
|
|
||||||
# if not hook_match:
|
|
||||||
# # We don't have a webhook, create/add one
|
|
||||||
# return await self.create_and_add_channel_webhook(conn, channel)
|
|
||||||
# else:
|
|
||||||
# return hook_match
|
|
||||||
#
|
|
||||||
# async def do_proxy_message(self, conn, member: db.ProxyMember, original_message: discord.Message, text: str,
|
|
||||||
# attachment_url: str, has_already_retried=False):
|
|
||||||
# hook_id, hook_token = await self.get_webhook_for_channel(conn, original_message.channel)
|
|
||||||
#
|
|
||||||
# form_data = aiohttp.FormData()
|
|
||||||
# form_data.add_field("username", "{} {}".format(member.name, member.tag or "").strip())
|
|
||||||
#
|
|
||||||
# if text:
|
|
||||||
# form_data.add_field("content", text)
|
|
||||||
#
|
|
||||||
# if attachment_url:
|
|
||||||
# attachment_resp = await self.session.get(attachment_url)
|
|
||||||
# form_data.add_field("file", attachment_resp.content, content_type=attachment_resp.content_type,
|
|
||||||
# filename=attachment_resp.url.name)
|
|
||||||
#
|
|
||||||
# if member.avatar_url:
|
|
||||||
# form_data.add_field("avatar_url", member.avatar_url)
|
|
||||||
#
|
|
||||||
# async with self.session.post(
|
|
||||||
# "https://discordapp.com/api/v6/webhooks/{}/{}?wait=true".format(hook_id, hook_token),
|
|
||||||
# data=form_data) as resp:
|
|
||||||
# if resp.status == 200:
|
|
||||||
# message = await resp.json()
|
|
||||||
#
|
|
||||||
# await db.add_message(conn, message["id"], message["channel_id"], member.id, original_message.author.id)
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# await self.client.delete_message(original_message)
|
|
||||||
# except discord.Forbidden:
|
|
||||||
# self.logger.warning(
|
|
||||||
# "Did not have permission to delete original message (server={}, channel={})".format(
|
|
||||||
# original_message.server.id, original_message.channel.id))
|
|
||||||
# raise DeletionPermissionError()
|
|
||||||
# except discord.NotFound:
|
|
||||||
# self.logger.warning("Tried to delete message when proxying, but message was already gone (server={}, channel={})".format(original_message.server.id, original_message.channel.id))
|
|
||||||
#
|
|
||||||
# message_image = None
|
|
||||||
# if message["attachments"]:
|
|
||||||
# first_attachment = message["attachments"][0]
|
|
||||||
# if "width" in first_attachment and "height" in first_attachment:
|
|
||||||
# # Only log attachments that are actually images
|
|
||||||
# message_image = first_attachment["url"]
|
|
||||||
#
|
|
||||||
# await self.channel_logger.log_message_proxied(conn,
|
|
||||||
# server_id=original_message.server.id,
|
|
||||||
# channel_name=original_message.channel.name,
|
|
||||||
# channel_id=original_message.channel.id,
|
|
||||||
# sender_name=original_message.author.name,
|
|
||||||
# sender_disc=original_message.author.discriminator,
|
|
||||||
# sender_id=original_message.author.id,
|
|
||||||
# member_name=member.name,
|
|
||||||
# member_hid=member.hid,
|
|
||||||
# member_avatar_url=member.avatar_url,
|
|
||||||
# system_name=member.system_name,
|
|
||||||
# system_hid=member.system_hid,
|
|
||||||
# message_text=text,
|
|
||||||
# message_image=message_image,
|
|
||||||
# message_timestamp=ciso8601.parse_datetime(
|
|
||||||
# message["timestamp"]),
|
|
||||||
# message_id=message["id"])
|
|
||||||
# elif resp.status == 404 and not has_already_retried:
|
|
||||||
# # Webhook doesn't exist. Delete it from the DB, create, and add a new one
|
|
||||||
# self.logger.warning("Webhook registered in DB doesn't exist, deleting hook from DB, re-adding, and trying again (channel={}, hook={})".format(original_message.channel.id, hook_id))
|
|
||||||
# await db.delete_webhook(conn, original_message.channel.id)
|
|
||||||
# await self.create_and_add_channel_webhook(conn, original_message.channel)
|
|
||||||
#
|
|
||||||
# # Then try again all over, making sure to not retry again and go in a loop should it continually fail
|
|
||||||
# return await self.do_proxy_message(conn, member, original_message, text, attachment_url, has_already_retried=True)
|
|
||||||
# else:
|
|
||||||
# raise discord.HTTPException(resp, await resp.text())
|
|
||||||
#
|
|
||||||
# async def try_proxy_message(self, conn, message: discord.Message):
|
|
||||||
# # Can't proxy in DMs, webhook creation will explode
|
|
||||||
# if message.channel.is_private:
|
|
||||||
# return False
|
|
||||||
#
|
|
||||||
# # Big fat query to find every member associated with this account
|
|
||||||
# # Returned member object has a few more keys (system tag, for example)
|
|
||||||
# members = await db.get_members_by_account(conn, account_id=message.author.id)
|
|
||||||
#
|
|
||||||
# match = match_proxy_tags(members, message.content)
|
|
||||||
# if not match:
|
|
||||||
# return False
|
|
||||||
#
|
|
||||||
# member, text = match
|
|
||||||
# attachment_url = get_message_attachment_url(message)
|
|
||||||
#
|
|
||||||
# # Can't proxy a message with no text AND no attachment
|
|
||||||
# if not text and not attachment_url:
|
|
||||||
# self.logger.debug("Skipping message because of no text and no attachment")
|
|
||||||
# return False
|
|
||||||
#
|
|
||||||
# # Remember to sanitize the text (remove @everyones and such)
|
|
||||||
# text = utils.sanitize(text)
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# async with conn.transaction():
|
|
||||||
# await self.do_proxy_message(conn, member, message, text=text, attachment_url=attachment_url)
|
|
||||||
# except WebhookPermissionError:
|
|
||||||
# embed = embeds.error("PluralKit does not have permission to manage webhooks for this channel. Contact your local server administrator to fix this.")
|
|
||||||
# await self.client.send_message(message.channel, embed=embed)
|
|
||||||
# except DeletionPermissionError:
|
|
||||||
# embed = embeds.error("PluralKit does not have permission to delete messages in this channel. Contact your local server administrator to fix this.")
|
|
||||||
# await self.client.send_message(message.channel, embed=embed)
|
|
||||||
#
|
|
||||||
# return True
|
|
||||||
#
|
|
||||||
# async def try_delete_message(self, conn, message_id: str, check_user_id: Optional[str], delete_message: bool, deleted_by_moderator: bool):
|
|
||||||
# async with conn.transaction():
|
|
||||||
# # Find the message in the DB, and make sure it's sent by the user (if we need to check)
|
|
||||||
# if check_user_id:
|
|
||||||
# db_message = await db.get_message_by_sender_and_id(conn, message_id=message_id, sender_id=check_user_id)
|
|
||||||
# else:
|
|
||||||
# db_message = await db.get_message(conn, message_id=message_id)
|
|
||||||
#
|
|
||||||
# if db_message:
|
|
||||||
# self.logger.debug("Deleting message {}".format(message_id))
|
|
||||||
# channel = self.client.get_channel(str(db_message.channel))
|
|
||||||
#
|
|
||||||
# # Fetch the original message from the server
|
|
||||||
# try:
|
|
||||||
# original_message = await self.client.get_message(channel, message_id)
|
|
||||||
# except discord.NotFound:
|
|
||||||
# # Just in case it's already gone
|
|
||||||
# original_message = None
|
|
||||||
#
|
|
||||||
# # If we should also delete the actual message, do that
|
|
||||||
# if delete_message and original_message is not None:
|
|
||||||
# try:
|
|
||||||
# await self.client.delete_message(original_message)
|
|
||||||
# except discord.Forbidden:
|
|
||||||
# self.logger.warning(
|
|
||||||
# "Did not have permission to remove message, aborting deletion (server={}, channel={})".format(
|
|
||||||
# channel.server.id, channel.id))
|
|
||||||
# return
|
|
||||||
#
|
|
||||||
# # Remove it from the DB
|
|
||||||
# await db.delete_message(conn, message_id)
|
|
||||||
#
|
|
||||||
# # Then log deletion to logging channel
|
|
||||||
# await self.channel_logger.log_message_deleted(conn,
|
|
||||||
# server_id=channel.server.id,
|
|
||||||
# channel_name=channel.name,
|
|
||||||
# member_name=db_message.name,
|
|
||||||
# member_hid=db_message.hid,
|
|
||||||
# member_avatar_url=db_message.avatar_url,
|
|
||||||
# system_name=db_message.system_name,
|
|
||||||
# system_hid=db_message.system_hid,
|
|
||||||
# message_text=original_message.content if original_message else "*(original not found)*",
|
|
||||||
# message_id=message_id,
|
|
||||||
# deleted_by_moderator=deleted_by_moderator)
|
|
||||||
#
|
|
||||||
# async def handle_reaction(self, conn, user_id: str, message_id: str, emoji: str):
|
|
||||||
# if emoji == "❌":
|
|
||||||
# await self.try_delete_message(conn, message_id, check_user_id=user_id, delete_message=True, deleted_by_moderator=False)
|
|
||||||
#
|
|
||||||
# async def handle_deletion(self, conn, message_id: str):
|
|
||||||
# # Don't delete the message, it's already gone at this point, just handle DB deletion and logging
|
|
||||||
# await self.try_delete_message(conn, message_id, check_user_id=None, delete_message=False, deleted_by_moderator=True)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user