diff --git a/.gitmodules b/.gitmodules index 8aa311c4..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "bot/cmdClient"] - path = bot/cmdClient - url = https://github.com/Intery/dpy-cmdClient.git diff --git a/bot/cmdClient b/bot/cmdClient deleted file mode 160000 index a6ece4cb..00000000 --- a/bot/cmdClient +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a6ece4cb022ede7ce0d075af333251ed5d41a9b0 diff --git a/bot/meta/interactions/__init__.py b/bot/meta/interactions/__init__.py deleted file mode 100644 index b522979a..00000000 --- a/bot/meta/interactions/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from . import enums -from .interactions import _component_interaction_factory, Interaction, ComponentInteraction, ModalResponse -from .components import * -from .modals import * -from .manager import InteractionManager diff --git a/bot/meta/interactions/components.py b/bot/meta/interactions/components.py deleted file mode 100644 index 087e3cde..00000000 --- a/bot/meta/interactions/components.py +++ /dev/null @@ -1,190 +0,0 @@ -import logging -import traceback -import asyncio -import uuid -import json - -from .enums import ButtonStyle, InteractionType - - -class MessageComponent: - _type = None - interaction_type = InteractionType.MESSAGE_COMPONENT - - def __init_(self, *args, **kwargs): - self.message = None - - def to_dict(self): - raise NotImplementedError - - def to_json(self): - return json.dumps(self.to_dict()) - - -class ActionRow(MessageComponent): - _type = 1 - - def __init__(self, *components): - self.components = components - - def to_dict(self): - data = { - "type": self._type, - "components": [comp.to_dict() for comp in self.components] - } - return data - - -class AwaitableComponent: - interaction_type: InteractionType = None - - async def wait_for(self, timeout=None, check=None): - from meta import client - - def _check(interaction): - valid = True - valid = valid and interaction.interaction_type == self.interaction_type - valid = valid and interaction.custom_id == self.custom_id - valid = valid and (check is None or check(interaction)) - return valid - - return await client.wait_for('interaction_create', timeout=timeout, check=_check) - - def add_callback(self, timeout=None, repeat=True, check=None, pass_args=(), pass_kwargs={}): - def wrapper(func): - async def _func(*args, **kwargs): - try: - return await func(*args, **kwargs) - except asyncio.CancelledError: - pass - except asyncio.TimeoutError: - pass - except Exception: - from meta import client - full_traceback = traceback.format_exc() - - client.log( - f"Caught an unhandled exception while executing interaction callback " - f"for interaction type '{self.interaction_type.name}' with id '{self.custom_id}'.\n" - f"{self!r}\n" - f"{func!r}\n" - f"{full_traceback}", - context=f"cid:{self.custom_id}", - level=logging.ERROR - ) - - async def wrapped(): - while True: - try: - button_press = await self.wait_for(timeout=timeout, check=check) - except asyncio.TimeoutError: - break - asyncio.create_task(_func(button_press, *pass_args, **pass_kwargs)) - if not repeat: - break - future = asyncio.create_task(wrapped()) - return future - return wrapper - - -class Button(MessageComponent, AwaitableComponent): - _type = 2 - - def __init__(self, label, style=ButtonStyle.PRIMARY, custom_id=None, url=None, emoji=None, disabled=False): - if style == ButtonStyle.LINK: - if url is None: - raise ValueError("Link buttons must have a url") - custom_id = None - elif custom_id is None: - custom_id = str(uuid.uuid4()) - - self.label = label - self.style = style - self.custom_id = custom_id - self.url = url - - self.emoji = emoji - self.disabled = disabled - - def to_dict(self): - data = { - "type": self._type, - "label": self.label, - "style": int(self.style) - } - if self.style == ButtonStyle.LINK: - data['url'] = self.url - else: - data['custom_id'] = self.custom_id - if self.emoji is not None: - # TODO: This only supports PartialEmoji, not Emoji - data['emoji'] = self.emoji.to_dict() - if self.disabled: - data['disabled'] = self.disabled - return data - - -class SelectOption: - def __init__(self, label, value, description, emoji=None, default=False): - self.label = label - self.value = value - self.description = description - self.emoji = emoji - self.default = default - - def to_dict(self): - data = { - "label": self.label, - "value": self.value, - "description": self.description, - } - if self.emoji: - data['emoji'] = self.emoji.to_dict() - if self.default: - data['default'] = self.default - - return data - - -class SelectMenu(MessageComponent, AwaitableComponent): - _type = 3 - - def __init__(self, *options, custom_id=None, placeholder=None, min_values=None, max_values=None, disabled=False): - self.options = options - self.custom_id = custom_id or str(uuid.uuid4()) - self.placeholder = placeholder - self.min_values = min_values - self.max_values = max_values - self.disabled = disabled - - def set_default(self, value=None, index=None): - """ - Convenience method to set the default option. - """ - if index is not None and value is not None: - raise ValueError("Both index and value were supplied for the default.") - if index is not None: - for i, option in enumerate(self.options): - option.default = (i == index) - elif value is not None: - for option in self.options: - option.default = (option.value == value) - else: - for option in self.options: - option.default = False - - def to_dict(self): - data = { - "type": self._type, - 'custom_id': self.custom_id, - 'options': [option.to_dict() for option in self.options], - } - if self.placeholder: - data['placeholder'] = self.placeholder - if self.min_values: - data['min_values'] = self.min_values - if self.max_values: - data['max_values'] = self.max_values - if self.disabled: - data['disabled'] = self.disabled - return data diff --git a/bot/meta/interactions/enums.py b/bot/meta/interactions/enums.py deleted file mode 100644 index 3d1c8c6c..00000000 --- a/bot/meta/interactions/enums.py +++ /dev/null @@ -1,40 +0,0 @@ -from enum import IntEnum - - -class InteractionType(IntEnum): - PING = 1 - APPLICATION_COMMAND = 2 - MESSAGE_COMPONENT = 3 - APPLICATION_COMMAND_AUTOCOMPLETE = 4 - MODAL_SUBMIT = 5 - - -class ComponentType(IntEnum): - ACTIONROW = 1 - BUTTON = 2 - SELECTMENU = 3 - TEXTINPUT = 4 - - -class ButtonStyle(IntEnum): - PRIMARY = 1 - SECONDARY = 2 - SUCCESS = 3 - DANGER = 4 - LINK = 5 - - -class TextInputStyle(IntEnum): - SHORT = 1 - PARAGRAPH = 2 - - -class InteractionCallback(IntEnum): - PONG = 1 - CHANNEL_MESSAGE_WITH_SOURCE = 4 - DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE = 5 - DEFERRED_UPDATE_MESSAGE = 6 - UPDATE_MESSAGE = 7 - APPLICATION_COMMAND_AUTOCOMPLETE_RESULT = 8 - MODAL = 9 - diff --git a/bot/meta/interactions/interactions.py b/bot/meta/interactions/interactions.py deleted file mode 100644 index 3277e48d..00000000 --- a/bot/meta/interactions/interactions.py +++ /dev/null @@ -1,168 +0,0 @@ -import asyncio -from .enums import ComponentType, InteractionType, InteractionCallback - - -class Interaction: - __slots__ = ( - 'id', - 'token', - '_state' - ) - - async def response(self, content=None, embed=None, embeds=None, components=None, ephemeral=None): - data = {} - if content is not None: - data['content'] = str(content) - - if embed is not None: - embeds = embeds or [] - embeds.append(embed) - - if embeds is not None: - data['embeds'] = [embed.to_dict() for embed in embeds] - - if components is not None: - data['components'] = [component.to_dict() for component in components] - - if ephemeral is not None: - data['flags'] = 1 << 6 - - return await self._state.http.interaction_callback( - self.id, - self.token, - InteractionCallback.CHANNEL_MESSAGE_WITH_SOURCE, - data - ) - - async def response_update(self, content=None, embed=None, embeds=None, components=None): - data = {} - if content is not None: - data['content'] = str(content) - - if embed is not None: - embeds = embeds or [] - embeds.append(embed) - - if embeds is not None: - data['embeds'] = [embed.to_dict() for embed in embeds] - - if components is not None: - data['components'] = [component.to_dict() for component in components] - - return await self._state.http.interaction_callback( - self.id, - self.token, - InteractionCallback.UPDATE_MESSAGE, - data - ) - - async def response_deferred(self): - return await self._state.http.interaction_callback( - self.id, - self.token, - InteractionCallback.DEFERRED_UPDATE_MESSAGE - ) - - async def response_modal(self, modal): - return await self._state.http.interaction_callback( - self.id, - self.token, - InteractionCallback.MODAL, - modal.to_dict() - ) - - def ack(self): - asyncio.create_task(self.response_deferred()) - - -class ComponentInteraction(Interaction): - interaction_type = InteractionType.MESSAGE_COMPONENT - # TODO: Slots - - def __init__(self, message, user, data, state): - self.message = message - self.user = user - - self._state = state - - self._from_data(data) - - def _from_data(self, data): - self.id = data['id'] - self.token = data['token'] - self.application_id = data['application_id'] - - component_data = data['data'] - - self.component_type = ComponentType(component_data['component_type']) - self.custom_id = component_data.get('custom_id', None) - - -class ButtonPress(ComponentInteraction): - __slots__ = () - - -class Selection(ComponentInteraction): - __slots__ = ('values',) - - def _from_data(self, data): - super()._from_data(data) - self.values = data['data']['values'] - - @property - def value(self): - if len(self.values) > 1: - raise ValueError("Cannot use 'value' property on multi-selection.") - elif len(self.values) == 1: - return self.values[0] - else: - return None - - -class ModalResponse(Interaction): - __slots__ = ( - 'message', - 'user', - '_state' - 'id', - 'token', - 'application_id', - 'custom_id', - 'values' - ) - - interaction_type = InteractionType.MODAL_SUBMIT - - def __init__(self, message, user, data, state): - self.message = message - self.user = user - - self._state = state - - self._from_data(data) - - def _from_data(self, data): - self.id = data['id'] - self.token = data['token'] - self.application_id = data['application_id'] - - component_data = data['data'] - - self.custom_id = component_data.get('custom_id', None) - - values = {} - for row in component_data['components']: - for component in row['components']: - values[component['custom_id']] = component['value'] - self.values = values - - -def _component_interaction_factory(data): - component_type = data['data']['component_type'] - - if component_type == ComponentType.BUTTON: - return ButtonPress - elif component_type == ComponentType.SELECTMENU: - return Selection - else: - return None diff --git a/bot/meta/interactions/manager.py b/bot/meta/interactions/manager.py deleted file mode 100644 index 1511ad51..00000000 --- a/bot/meta/interactions/manager.py +++ /dev/null @@ -1,114 +0,0 @@ -import asyncio -import logging -from datetime import datetime, timedelta - - -class InteractionManager: - def __init__(self, timeout=600, extend=None): - self.futures = [] - self.self_futures = [] - - self.cleanup_function = self._cleanup - self.timeout_function = self._timeout - self.close_function = self._close - - self.timeout = timeout - self.extend = extend or timeout - self.expires_at = None - - self.cleaned_up = asyncio.Event() - - async def _timeout_loop(self): - diff = (self.expires_at - datetime.now()).total_seconds() - while True: - try: - await asyncio.sleep(diff) - except asyncio.CancelledError: - break - diff = (self.expires_at - datetime.now()).total_seconds() - if diff <= 0: - asyncio.create_task(self.run_timeout()) - break - - def extend_timeout(self): - new_expiry = max(datetime.now() + timedelta(seconds=self.extend), self.expires_at) - self.expires_at = new_expiry - - async def wait(self): - """ - Wait until the manager is "done". - That is, until all the futures are done, or `closed` is set. - """ - closed_task = asyncio.create_task(self.cleaned_up.wait()) - futures_task = asyncio.create_task(asyncio.wait(self.futures)) - await asyncio.wait((closed_task, futures_task), return_when=asyncio.FIRST_COMPLETED) - - async def __aenter__(self): - if self.timeout is not None: - self.expires_at = datetime.now() + timedelta(seconds=self.timeout) - self.self_futures.append( - asyncio.create_task(self._timeout_loop()) - ) - return self - - async def __aexit__(self, *args): - if not self.cleaned_up.is_set(): - await self.cleanup(exiting=True) - - async def _cleanup(self, manager, timeout=False, closing=False, exiting=False, **kwargs): - for future in self.futures: - future.cancel() - for future in self.self_futures: - future.cancel() - self.cleaned_up.set() - - def on_cleanup(self, func): - self.cleanup_function = func - return func - - async def cleanup(self, **kwargs): - try: - await self.cleanup_function(self, **kwargs) - except Exception: - logging.debug("An error occurred while cleaning up the InteractionManager", exc_info=True) - - async def _timeout(self, manager, **kwargs): - await self.cleanup(timeout=True, **kwargs) - - def on_timeout(self, func): - self.timeout_function = func - return func - - async def run_timeout(self): - try: - await self.timeout_function(self) - except Exception: - logging.debug("An error occurred while timing out the InteractionManager", exc_info=True) - - async def close(self, **kwargs): - """ - Request closure of the manager. - """ - try: - await self.close_function(self, **kwargs) - except Exception: - logging.debug("An error occurred while closing the InteractionManager", exc_info=True) - - def on_close(self, func): - self.close_function = func - return func - - async def _close(self, manager, **kwargs): - await self.cleanup(closing=True, **kwargs) - - def add_future(self, future): - self.futures.append(future) - return future - - def register(self, component, callback, *args, **kwargs): - """ - Attaches the given awaitable interaction and adds the given callback. - """ - future = component.add_callback(*args, **kwargs)(callback) - self.add_future(future) - return component diff --git a/bot/meta/interactions/modals.py b/bot/meta/interactions/modals.py deleted file mode 100644 index 56bcfd8e..00000000 --- a/bot/meta/interactions/modals.py +++ /dev/null @@ -1,54 +0,0 @@ -import uuid - -from .enums import TextInputStyle, InteractionType -from .components import AwaitableComponent - - -class Modal(AwaitableComponent): - interaction_type = InteractionType.MODAL_SUBMIT - - def __init__(self, title, *components, custom_id=None): - self.custom_id = custom_id or str(uuid.uuid4()) - - self.title = title - self.components = components - - def to_dict(self): - data = { - 'title': self.title, - 'custom_id': self.custom_id, - 'components': [comp.to_dict() for comp in self.components] - } - return data - - -class TextInput: - _type = 4 - - def __init__( - self, - label, placeholder=None, value=None, required=False, - style=TextInputStyle.SHORT, min_length=None, max_length=None, - custom_id=None - ): - self.custom_id = custom_id or str(uuid.uuid4()) - - self.label = label - self.placeholder = placeholder - self.value = value - self.required = required - self.style = style - self.min_length = min_length - self.max_length = max_length - - def to_dict(self): - data = { - 'type': self._type, - 'custom_id': self.custom_id, - 'style': int(self.style), - 'label': self.label, - } - for key in ('min_length', 'max_length', 'required', 'value', 'placeholder'): - if (value := getattr(self, key)) is not None: - data[key] = value - return data diff --git a/bot/meta/patches.py b/bot/meta/patches.py deleted file mode 100644 index 621004d9..00000000 --- a/bot/meta/patches.py +++ /dev/null @@ -1,289 +0,0 @@ -""" -Temporary patches for the discord.py library to support new features of the discord API. -""" -import logging - -from json import JSONEncoder - -from discord.state import ConnectionState -from discord.http import Route, HTTPClient -from discord.abc import Messageable -from discord.utils import InvalidArgument, _get_as_snowflake, to_json -from discord import File, AllowedMentions, Member, User, Message - -from .interactions import _component_interaction_factory, ModalResponse -from .interactions.enums import InteractionType - - -log = logging.getLogger(__name__) - - -def _default(self, obj): - return getattr(obj.__class__, "to_json", _default.default)(obj) - - -_default.default = JSONEncoder().default -JSONEncoder.default = _default - - -def send_message(self, channel_id, content, *, tts=False, embeds=None, - nonce=None, allowed_mentions=None, message_reference=None, components=None): - r = Route('POST', '/channels/{channel_id}/messages', channel_id=channel_id) - payload = {} - - if content: - payload['content'] = content - - if tts: - payload['tts'] = True - - if embeds: - payload['embeds'] = embeds - - if nonce: - payload['nonce'] = nonce - - if allowed_mentions: - payload['allowed_mentions'] = allowed_mentions - - if message_reference: - payload['message_reference'] = message_reference - - if components: - payload['components'] = components - - return self.request(r, json=payload) - - -def send_files( - self, - channel_id, *, - files, - content=None, tts=False, embed=None, embeds=None, nonce=None, allowed_mentions=None, message_reference=None, - components=None -): - r = Route('POST', '/channels/{channel_id}/messages', channel_id=channel_id) - form = [] - - payload = {'tts': tts} - if content: - payload['content'] = content - if embed: - payload['embed'] = embed - if embeds: - payload['embeds'] = embeds - if nonce: - payload['nonce'] = nonce - if allowed_mentions: - payload['allowed_mentions'] = allowed_mentions - if message_reference: - payload['message_reference'] = message_reference - if components: - payload['components'] = components - - form.append({'name': 'payload_json', 'value': to_json(payload)}) - if len(files) == 1: - file = files[0] - form.append({ - 'name': 'file', - 'value': file.fp, - 'filename': file.filename, - 'content_type': 'application/octet-stream' - }) - else: - for index, file in enumerate(files): - form.append({ - 'name': 'file%s' % index, - 'value': file.fp, - 'filename': file.filename, - 'content_type': 'application/octet-stream' - }) - - return self.request(r, form=form, files=files) - - -def interaction_callback(self, interaction_id, interaction_token, callback_type, callback_data=None): - r = Route( - 'POST', - '/interactions/{interaction_id}/{interaction_token}/callback', - interaction_id=interaction_id, - interaction_token=interaction_token - ) - - payload = {} - - payload['type'] = int(callback_type) - if callback_data: - payload['data'] = callback_data - - return self.request(r, json=payload) - - -def interaction_edit(self, application_id, interaction_token, content=None, embed=None, embeds=None, components=None): - r = Route( - 'PATCH', - '/webhooks/{application_id}/{interaction_token}/messages/@original', - application_id=application_id, - interaction_token=interaction_token - ) - payload = {} - if content is not None: - payload['content'] = str(content) - - if embed is not None: - embeds = embeds or [] - embeds.append(embed) - - if embeds is not None: - payload['embeds'] = [embed.to_dict() for embed in embeds] - - if components is not None: - payload['components'] = [component.to_dict() for component in components] - - return self.request(r, json=payload) - - -def edit_message(self, channel_id, message_id, components=None, **fields): - r = Route('PATCH', '/channels/{channel_id}/messages/{message_id}', channel_id=channel_id, message_id=message_id) - if components is not None: - fields['components'] = [comp.to_dict() for comp in components] - return self.request(r, json=fields) - - -HTTPClient.send_files = send_files -HTTPClient.send_message = send_message -HTTPClient.edit_message = edit_message -HTTPClient.interaction_callback = interaction_callback -HTTPClient.interaction_edit = interaction_edit - - -async def send(self, content=None, *, tts=False, embed=None, embeds=None, file=None, - files=None, delete_after=None, nonce=None, - allowed_mentions=None, reference=None, - mention_author=None, components=None): - - channel = await self._get_channel() - state = self._state - content = str(content) if content is not None else None - if embed is not None: - if embeds is not None: - embeds.append(embed) - else: - embeds = [embed] - embed = embed.to_dict() - if embeds is not None: - embeds = [embed.to_dict() for embed in embeds] - - if components is not None: - components = [comp.to_dict() for comp in components] - - if allowed_mentions is not None: - if state.allowed_mentions is not None: - allowed_mentions = state.allowed_mentions.merge(allowed_mentions).to_dict() - else: - allowed_mentions = allowed_mentions.to_dict() - else: - allowed_mentions = state.allowed_mentions and state.allowed_mentions.to_dict() - - if mention_author is not None: - allowed_mentions = allowed_mentions or AllowedMentions().to_dict() - allowed_mentions['replied_user'] = bool(mention_author) - - if reference is not None: - try: - reference = reference.to_message_reference_dict() - except AttributeError: - raise InvalidArgument('reference parameter must be Message or MessageReference') from None - - if file is not None and files is not None: - raise InvalidArgument('cannot pass both file and files parameter to send()') - - if file is not None: - if not isinstance(file, File): - raise InvalidArgument('file parameter must be File') - - try: - data = await state.http.send_files(channel.id, files=[file], allowed_mentions=allowed_mentions, - content=content, tts=tts, embed=embed, nonce=nonce, - message_reference=reference, components=components) - finally: - file.close() - - elif files is not None: - if len(files) > 10: - raise InvalidArgument('files parameter must be a list of up to 10 elements') - elif not all(isinstance(file, File) for file in files): - raise InvalidArgument('files parameter must be a list of File') - - try: - data = await state.http.send_files(channel.id, files=files, content=content, tts=tts, - embeds=embeds, nonce=nonce, allowed_mentions=allowed_mentions, - message_reference=reference, components=components) - finally: - for f in files: - f.close() - else: - data = await state.http.send_message(channel.id, content, tts=tts, embeds=embeds, - nonce=nonce, allowed_mentions=allowed_mentions, - message_reference=reference, components=components) - - ret = state.create_message(channel=channel, data=data) - if delete_after is not None: - await ret.delete(delay=delete_after) - return ret - -Messageable.send = send - - -def parse_interaction_create(self, data): - self.dispatch('raw_interaction_create', data) - - if (guild_id := data.get('guild_id', None)): - guild = self._get_guild(int(guild_id)) - if guild is None: - log.debug('INTERACTION_CREATE referencing an unknown guild ID: %s. Discarding.', guild_id) - return - else: - guild = None - - if (member_data := data.get('member', None)) is not None: - # Construct member - # TODO: Theoretical reliance on cached guild - user = Member(data=member_data, guild=guild, state=self) - else: - # Assume user - user = self.get_user(_get_as_snowflake(data['user'], 'id')) or User(data=data['user'], state=self) - - if 'message' in data: - message = self._get_message(_get_as_snowflake(data['message'], 'id')) - if not message: - message_data = data['message'] - channel, _ = self._get_guild_channel(message_data) - message = Message(data=message_data, channel=channel, state=self) - if self._messages is not None: - self._messages.append(message) - else: - message = None - - interaction = None - if data['type'] == InteractionType.MESSAGE_COMPONENT: - interaction_class = _component_interaction_factory(data) - if interaction_class: - interaction = interaction_class(message, user, data, self) - else: - log.debug( - 'INTERACTION_CREATE recieved unhandled message component interaction type: %s', - data['data']['component_type'] - ) - elif data['type'] == InteractionType.MODAL_SUBMIT: - interaction = ModalResponse(message, user, data, self) - else: - log.debug('INTERACTION_CREATE recieved unhandled interaction type: %s', data['type']) - log.debug(data) - interaction = None - - if interaction: - self.dispatch('interaction_create', interaction) - - -ConnectionState.parse_interaction_create = parse_interaction_create diff --git a/bot/meta/client.py b/bot/meta/pending-rewrite/client.py similarity index 100% rename from bot/meta/client.py rename to bot/meta/pending-rewrite/client.py diff --git a/bot/meta/config.py b/bot/meta/pending-rewrite/config.py similarity index 100% rename from bot/meta/config.py rename to bot/meta/pending-rewrite/config.py diff --git a/bot/meta/logger.py b/bot/meta/pending-rewrite/logger.py similarity index 100% rename from bot/meta/logger.py rename to bot/meta/pending-rewrite/logger.py diff --git a/bot/modules/__init__.py b/bot/modules/pending-rewrite/__init__.py similarity index 100% rename from bot/modules/__init__.py rename to bot/modules/pending-rewrite/__init__.py diff --git a/bot/modules/accountability/TimeSlot.py b/bot/modules/pending-rewrite/accountability/TimeSlot.py similarity index 100% rename from bot/modules/accountability/TimeSlot.py rename to bot/modules/pending-rewrite/accountability/TimeSlot.py diff --git a/bot/modules/accountability/__init__.py b/bot/modules/pending-rewrite/accountability/__init__.py similarity index 100% rename from bot/modules/accountability/__init__.py rename to bot/modules/pending-rewrite/accountability/__init__.py diff --git a/bot/modules/accountability/admin.py b/bot/modules/pending-rewrite/accountability/admin.py similarity index 100% rename from bot/modules/accountability/admin.py rename to bot/modules/pending-rewrite/accountability/admin.py diff --git a/bot/modules/accountability/commands.py b/bot/modules/pending-rewrite/accountability/commands.py similarity index 100% rename from bot/modules/accountability/commands.py rename to bot/modules/pending-rewrite/accountability/commands.py diff --git a/bot/modules/accountability/data.py b/bot/modules/pending-rewrite/accountability/data.py similarity index 100% rename from bot/modules/accountability/data.py rename to bot/modules/pending-rewrite/accountability/data.py diff --git a/bot/modules/accountability/lib.py b/bot/modules/pending-rewrite/accountability/lib.py similarity index 100% rename from bot/modules/accountability/lib.py rename to bot/modules/pending-rewrite/accountability/lib.py diff --git a/bot/modules/accountability/module.py b/bot/modules/pending-rewrite/accountability/module.py similarity index 100% rename from bot/modules/accountability/module.py rename to bot/modules/pending-rewrite/accountability/module.py diff --git a/bot/modules/accountability/tracker.py b/bot/modules/pending-rewrite/accountability/tracker.py similarity index 100% rename from bot/modules/accountability/tracker.py rename to bot/modules/pending-rewrite/accountability/tracker.py diff --git a/bot/modules/economy/__init__.py b/bot/modules/pending-rewrite/economy/__init__.py similarity index 100% rename from bot/modules/economy/__init__.py rename to bot/modules/pending-rewrite/economy/__init__.py diff --git a/bot/modules/economy/module.py b/bot/modules/pending-rewrite/economy/module.py similarity index 100% rename from bot/modules/economy/module.py rename to bot/modules/pending-rewrite/economy/module.py diff --git a/bot/modules/economy/send_cmd.py b/bot/modules/pending-rewrite/economy/send_cmd.py similarity index 100% rename from bot/modules/economy/send_cmd.py rename to bot/modules/pending-rewrite/economy/send_cmd.py diff --git a/bot/modules/economy/shop_cmds.py b/bot/modules/pending-rewrite/economy/shop_cmds.py similarity index 100% rename from bot/modules/economy/shop_cmds.py rename to bot/modules/pending-rewrite/economy/shop_cmds.py diff --git a/bot/modules/economy/shop_core/ColourRole.py b/bot/modules/pending-rewrite/economy/shop_core/ColourRole.py similarity index 100% rename from bot/modules/economy/shop_core/ColourRole.py rename to bot/modules/pending-rewrite/economy/shop_core/ColourRole.py diff --git a/bot/modules/economy/shop_core/ShopItem.py b/bot/modules/pending-rewrite/economy/shop_core/ShopItem.py similarity index 100% rename from bot/modules/economy/shop_core/ShopItem.py rename to bot/modules/pending-rewrite/economy/shop_core/ShopItem.py diff --git a/bot/modules/economy/shop_core/__init__.py b/bot/modules/pending-rewrite/economy/shop_core/__init__.py similarity index 100% rename from bot/modules/economy/shop_core/__init__.py rename to bot/modules/pending-rewrite/economy/shop_core/__init__.py diff --git a/bot/modules/economy/shop_core/data.py b/bot/modules/pending-rewrite/economy/shop_core/data.py similarity index 100% rename from bot/modules/economy/shop_core/data.py rename to bot/modules/pending-rewrite/economy/shop_core/data.py diff --git a/bot/modules/economy/shopadmin_cmd.py b/bot/modules/pending-rewrite/economy/shopadmin_cmd.py similarity index 100% rename from bot/modules/economy/shopadmin_cmd.py rename to bot/modules/pending-rewrite/economy/shopadmin_cmd.py diff --git a/bot/modules/guide/__init__.py b/bot/modules/pending-rewrite/guide/__init__.py similarity index 100% rename from bot/modules/guide/__init__.py rename to bot/modules/pending-rewrite/guide/__init__.py diff --git a/bot/modules/guild_admin/__init__.py b/bot/modules/pending-rewrite/guild_admin/__init__.py similarity index 100% rename from bot/modules/guild_admin/__init__.py rename to bot/modules/pending-rewrite/guild_admin/__init__.py diff --git a/bot/modules/guild_admin/economy/__init__.py b/bot/modules/pending-rewrite/guild_admin/economy/__init__.py similarity index 100% rename from bot/modules/guild_admin/economy/__init__.py rename to bot/modules/pending-rewrite/guild_admin/economy/__init__.py diff --git a/bot/modules/guild_admin/economy/set_coins.py b/bot/modules/pending-rewrite/guild_admin/economy/set_coins.py similarity index 100% rename from bot/modules/guild_admin/economy/set_coins.py rename to bot/modules/pending-rewrite/guild_admin/economy/set_coins.py diff --git a/bot/modules/guild_admin/guild_config.py b/bot/modules/pending-rewrite/guild_admin/guild_config.py similarity index 100% rename from bot/modules/guild_admin/guild_config.py rename to bot/modules/pending-rewrite/guild_admin/guild_config.py diff --git a/bot/modules/guild_admin/module.py b/bot/modules/pending-rewrite/guild_admin/module.py similarity index 100% rename from bot/modules/guild_admin/module.py rename to bot/modules/pending-rewrite/guild_admin/module.py diff --git a/bot/modules/guild_admin/new_members/__init__.py b/bot/modules/pending-rewrite/guild_admin/new_members/__init__.py similarity index 100% rename from bot/modules/guild_admin/new_members/__init__.py rename to bot/modules/pending-rewrite/guild_admin/new_members/__init__.py diff --git a/bot/modules/guild_admin/new_members/data.py b/bot/modules/pending-rewrite/guild_admin/new_members/data.py similarity index 100% rename from bot/modules/guild_admin/new_members/data.py rename to bot/modules/pending-rewrite/guild_admin/new_members/data.py diff --git a/bot/modules/guild_admin/new_members/greetings.py b/bot/modules/pending-rewrite/guild_admin/new_members/greetings.py similarity index 100% rename from bot/modules/guild_admin/new_members/greetings.py rename to bot/modules/pending-rewrite/guild_admin/new_members/greetings.py diff --git a/bot/modules/guild_admin/new_members/roles.py b/bot/modules/pending-rewrite/guild_admin/new_members/roles.py similarity index 100% rename from bot/modules/guild_admin/new_members/roles.py rename to bot/modules/pending-rewrite/guild_admin/new_members/roles.py diff --git a/bot/modules/guild_admin/new_members/settings.py b/bot/modules/pending-rewrite/guild_admin/new_members/settings.py similarity index 100% rename from bot/modules/guild_admin/new_members/settings.py rename to bot/modules/pending-rewrite/guild_admin/new_members/settings.py diff --git a/bot/modules/guild_admin/reaction_roles/__init__.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/__init__.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/__init__.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/__init__.py diff --git a/bot/modules/guild_admin/reaction_roles/command.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/command.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/command.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/command.py diff --git a/bot/modules/guild_admin/reaction_roles/data.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/data.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/data.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/data.py diff --git a/bot/modules/guild_admin/reaction_roles/expiry.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/expiry.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/expiry.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/expiry.py diff --git a/bot/modules/guild_admin/reaction_roles/module.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/module.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/module.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/module.py diff --git a/bot/modules/guild_admin/reaction_roles/settings.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/settings.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/settings.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/settings.py diff --git a/bot/modules/guild_admin/reaction_roles/tracker.py b/bot/modules/pending-rewrite/guild_admin/reaction_roles/tracker.py similarity index 100% rename from bot/modules/guild_admin/reaction_roles/tracker.py rename to bot/modules/pending-rewrite/guild_admin/reaction_roles/tracker.py diff --git a/bot/modules/guild_admin/statreset.py b/bot/modules/pending-rewrite/guild_admin/statreset.py similarity index 100% rename from bot/modules/guild_admin/statreset.py rename to bot/modules/pending-rewrite/guild_admin/statreset.py diff --git a/bot/modules/meta/__init__.py b/bot/modules/pending-rewrite/meta/__init__.py similarity index 100% rename from bot/modules/meta/__init__.py rename to bot/modules/pending-rewrite/meta/__init__.py diff --git a/bot/modules/meta/help.py b/bot/modules/pending-rewrite/meta/help.py similarity index 100% rename from bot/modules/meta/help.py rename to bot/modules/pending-rewrite/meta/help.py diff --git a/bot/modules/meta/join_message.py b/bot/modules/pending-rewrite/meta/join_message.py similarity index 100% rename from bot/modules/meta/join_message.py rename to bot/modules/pending-rewrite/meta/join_message.py diff --git a/bot/modules/meta/lib.py b/bot/modules/pending-rewrite/meta/lib.py similarity index 100% rename from bot/modules/meta/lib.py rename to bot/modules/pending-rewrite/meta/lib.py diff --git a/bot/modules/meta/links.py b/bot/modules/pending-rewrite/meta/links.py similarity index 100% rename from bot/modules/meta/links.py rename to bot/modules/pending-rewrite/meta/links.py diff --git a/bot/modules/meta/module.py b/bot/modules/pending-rewrite/meta/module.py similarity index 100% rename from bot/modules/meta/module.py rename to bot/modules/pending-rewrite/meta/module.py diff --git a/bot/modules/meta/nerd.py b/bot/modules/pending-rewrite/meta/nerd.py similarity index 100% rename from bot/modules/meta/nerd.py rename to bot/modules/pending-rewrite/meta/nerd.py diff --git a/bot/modules/moderation/__init__.py b/bot/modules/pending-rewrite/moderation/__init__.py similarity index 100% rename from bot/modules/moderation/__init__.py rename to bot/modules/pending-rewrite/moderation/__init__.py diff --git a/bot/modules/moderation/admin.py b/bot/modules/pending-rewrite/moderation/admin.py similarity index 100% rename from bot/modules/moderation/admin.py rename to bot/modules/pending-rewrite/moderation/admin.py diff --git a/bot/modules/moderation/commands.py b/bot/modules/pending-rewrite/moderation/commands.py similarity index 100% rename from bot/modules/moderation/commands.py rename to bot/modules/pending-rewrite/moderation/commands.py diff --git a/bot/modules/moderation/data.py b/bot/modules/pending-rewrite/moderation/data.py similarity index 100% rename from bot/modules/moderation/data.py rename to bot/modules/pending-rewrite/moderation/data.py diff --git a/bot/modules/moderation/module.py b/bot/modules/pending-rewrite/moderation/module.py similarity index 100% rename from bot/modules/moderation/module.py rename to bot/modules/pending-rewrite/moderation/module.py diff --git a/bot/modules/moderation/tickets/Ticket.py b/bot/modules/pending-rewrite/moderation/tickets/Ticket.py similarity index 100% rename from bot/modules/moderation/tickets/Ticket.py rename to bot/modules/pending-rewrite/moderation/tickets/Ticket.py diff --git a/bot/modules/moderation/tickets/__init__.py b/bot/modules/pending-rewrite/moderation/tickets/__init__.py similarity index 100% rename from bot/modules/moderation/tickets/__init__.py rename to bot/modules/pending-rewrite/moderation/tickets/__init__.py diff --git a/bot/modules/moderation/tickets/notes.py b/bot/modules/pending-rewrite/moderation/tickets/notes.py similarity index 100% rename from bot/modules/moderation/tickets/notes.py rename to bot/modules/pending-rewrite/moderation/tickets/notes.py diff --git a/bot/modules/moderation/tickets/studybans.py b/bot/modules/pending-rewrite/moderation/tickets/studybans.py similarity index 100% rename from bot/modules/moderation/tickets/studybans.py rename to bot/modules/pending-rewrite/moderation/tickets/studybans.py diff --git a/bot/modules/moderation/tickets/warns.py b/bot/modules/pending-rewrite/moderation/tickets/warns.py similarity index 100% rename from bot/modules/moderation/tickets/warns.py rename to bot/modules/pending-rewrite/moderation/tickets/warns.py diff --git a/bot/modules/moderation/video/__init__.py b/bot/modules/pending-rewrite/moderation/video/__init__.py similarity index 100% rename from bot/modules/moderation/video/__init__.py rename to bot/modules/pending-rewrite/moderation/video/__init__.py diff --git a/bot/modules/moderation/video/admin.py b/bot/modules/pending-rewrite/moderation/video/admin.py similarity index 100% rename from bot/modules/moderation/video/admin.py rename to bot/modules/pending-rewrite/moderation/video/admin.py diff --git a/bot/modules/moderation/video/data.py b/bot/modules/pending-rewrite/moderation/video/data.py similarity index 100% rename from bot/modules/moderation/video/data.py rename to bot/modules/pending-rewrite/moderation/video/data.py diff --git a/bot/modules/moderation/video/watchdog.py b/bot/modules/pending-rewrite/moderation/video/watchdog.py similarity index 100% rename from bot/modules/moderation/video/watchdog.py rename to bot/modules/pending-rewrite/moderation/video/watchdog.py diff --git a/bot/modules/plugins/.gitignore b/bot/modules/pending-rewrite/plugins/.gitignore similarity index 100% rename from bot/modules/plugins/.gitignore rename to bot/modules/pending-rewrite/plugins/.gitignore diff --git a/bot/modules/reminders/__init__.py b/bot/modules/pending-rewrite/reminders/__init__.py similarity index 100% rename from bot/modules/reminders/__init__.py rename to bot/modules/pending-rewrite/reminders/__init__.py diff --git a/bot/modules/reminders/commands.py b/bot/modules/pending-rewrite/reminders/commands.py similarity index 100% rename from bot/modules/reminders/commands.py rename to bot/modules/pending-rewrite/reminders/commands.py diff --git a/bot/modules/reminders/data.py b/bot/modules/pending-rewrite/reminders/data.py similarity index 100% rename from bot/modules/reminders/data.py rename to bot/modules/pending-rewrite/reminders/data.py diff --git a/bot/modules/reminders/module.py b/bot/modules/pending-rewrite/reminders/module.py similarity index 100% rename from bot/modules/reminders/module.py rename to bot/modules/pending-rewrite/reminders/module.py diff --git a/bot/modules/reminders/reminder.py b/bot/modules/pending-rewrite/reminders/reminder.py similarity index 100% rename from bot/modules/reminders/reminder.py rename to bot/modules/pending-rewrite/reminders/reminder.py diff --git a/bot/modules/renting/__init__.py b/bot/modules/pending-rewrite/renting/__init__.py similarity index 100% rename from bot/modules/renting/__init__.py rename to bot/modules/pending-rewrite/renting/__init__.py diff --git a/bot/modules/renting/admin.py b/bot/modules/pending-rewrite/renting/admin.py similarity index 100% rename from bot/modules/renting/admin.py rename to bot/modules/pending-rewrite/renting/admin.py diff --git a/bot/modules/renting/commands.py b/bot/modules/pending-rewrite/renting/commands.py similarity index 100% rename from bot/modules/renting/commands.py rename to bot/modules/pending-rewrite/renting/commands.py diff --git a/bot/modules/renting/data.py b/bot/modules/pending-rewrite/renting/data.py similarity index 100% rename from bot/modules/renting/data.py rename to bot/modules/pending-rewrite/renting/data.py diff --git a/bot/modules/renting/module.py b/bot/modules/pending-rewrite/renting/module.py similarity index 100% rename from bot/modules/renting/module.py rename to bot/modules/pending-rewrite/renting/module.py diff --git a/bot/modules/renting/rooms.py b/bot/modules/pending-rewrite/renting/rooms.py similarity index 100% rename from bot/modules/renting/rooms.py rename to bot/modules/pending-rewrite/renting/rooms.py diff --git a/bot/modules/sponsors/__init__.py b/bot/modules/pending-rewrite/sponsors/__init__.py similarity index 100% rename from bot/modules/sponsors/__init__.py rename to bot/modules/pending-rewrite/sponsors/__init__.py diff --git a/bot/modules/sponsors/commands.py b/bot/modules/pending-rewrite/sponsors/commands.py similarity index 100% rename from bot/modules/sponsors/commands.py rename to bot/modules/pending-rewrite/sponsors/commands.py diff --git a/bot/modules/sponsors/config.py b/bot/modules/pending-rewrite/sponsors/config.py similarity index 100% rename from bot/modules/sponsors/config.py rename to bot/modules/pending-rewrite/sponsors/config.py diff --git a/bot/modules/sponsors/data.py b/bot/modules/pending-rewrite/sponsors/data.py similarity index 100% rename from bot/modules/sponsors/data.py rename to bot/modules/pending-rewrite/sponsors/data.py diff --git a/bot/modules/sponsors/module.py b/bot/modules/pending-rewrite/sponsors/module.py similarity index 100% rename from bot/modules/sponsors/module.py rename to bot/modules/pending-rewrite/sponsors/module.py diff --git a/bot/modules/stats/__init__.py b/bot/modules/pending-rewrite/stats/__init__.py similarity index 100% rename from bot/modules/stats/__init__.py rename to bot/modules/pending-rewrite/stats/__init__.py diff --git a/bot/modules/stats/achievements.py b/bot/modules/pending-rewrite/stats/achievements.py similarity index 100% rename from bot/modules/stats/achievements.py rename to bot/modules/pending-rewrite/stats/achievements.py diff --git a/bot/modules/stats/data.py b/bot/modules/pending-rewrite/stats/data.py similarity index 100% rename from bot/modules/stats/data.py rename to bot/modules/pending-rewrite/stats/data.py diff --git a/bot/modules/stats/goals.py b/bot/modules/pending-rewrite/stats/goals.py similarity index 100% rename from bot/modules/stats/goals.py rename to bot/modules/pending-rewrite/stats/goals.py diff --git a/bot/modules/stats/module.py b/bot/modules/pending-rewrite/stats/module.py similarity index 100% rename from bot/modules/stats/module.py rename to bot/modules/pending-rewrite/stats/module.py diff --git a/bot/modules/stats/profile.py b/bot/modules/pending-rewrite/stats/profile.py similarity index 100% rename from bot/modules/stats/profile.py rename to bot/modules/pending-rewrite/stats/profile.py diff --git a/bot/modules/stats/setprofile.py b/bot/modules/pending-rewrite/stats/setprofile.py similarity index 100% rename from bot/modules/stats/setprofile.py rename to bot/modules/pending-rewrite/stats/setprofile.py diff --git a/bot/modules/stats/top_cmd.py b/bot/modules/pending-rewrite/stats/top_cmd.py similarity index 100% rename from bot/modules/stats/top_cmd.py rename to bot/modules/pending-rewrite/stats/top_cmd.py diff --git a/bot/modules/study/__init__.py b/bot/modules/pending-rewrite/study/__init__.py similarity index 100% rename from bot/modules/study/__init__.py rename to bot/modules/pending-rewrite/study/__init__.py diff --git a/bot/modules/study/badges/__init__.py b/bot/modules/pending-rewrite/study/badges/__init__.py similarity index 100% rename from bot/modules/study/badges/__init__.py rename to bot/modules/pending-rewrite/study/badges/__init__.py diff --git a/bot/modules/study/badges/badge_tracker.py b/bot/modules/pending-rewrite/study/badges/badge_tracker.py similarity index 100% rename from bot/modules/study/badges/badge_tracker.py rename to bot/modules/pending-rewrite/study/badges/badge_tracker.py diff --git a/bot/modules/study/badges/data.py b/bot/modules/pending-rewrite/study/badges/data.py similarity index 100% rename from bot/modules/study/badges/data.py rename to bot/modules/pending-rewrite/study/badges/data.py diff --git a/bot/modules/study/badges/studybadge_cmd.py b/bot/modules/pending-rewrite/study/badges/studybadge_cmd.py similarity index 100% rename from bot/modules/study/badges/studybadge_cmd.py rename to bot/modules/pending-rewrite/study/badges/studybadge_cmd.py diff --git a/bot/modules/study/module.py b/bot/modules/pending-rewrite/study/module.py similarity index 100% rename from bot/modules/study/module.py rename to bot/modules/pending-rewrite/study/module.py diff --git a/bot/modules/study/timers/Timer.py b/bot/modules/pending-rewrite/study/timers/Timer.py similarity index 100% rename from bot/modules/study/timers/Timer.py rename to bot/modules/pending-rewrite/study/timers/Timer.py diff --git a/bot/modules/study/timers/__init__.py b/bot/modules/pending-rewrite/study/timers/__init__.py similarity index 100% rename from bot/modules/study/timers/__init__.py rename to bot/modules/pending-rewrite/study/timers/__init__.py diff --git a/bot/modules/study/timers/commands.py b/bot/modules/pending-rewrite/study/timers/commands.py similarity index 100% rename from bot/modules/study/timers/commands.py rename to bot/modules/pending-rewrite/study/timers/commands.py diff --git a/bot/modules/study/timers/data.py b/bot/modules/pending-rewrite/study/timers/data.py similarity index 100% rename from bot/modules/study/timers/data.py rename to bot/modules/pending-rewrite/study/timers/data.py diff --git a/bot/modules/study/timers/settings.py b/bot/modules/pending-rewrite/study/timers/settings.py similarity index 100% rename from bot/modules/study/timers/settings.py rename to bot/modules/pending-rewrite/study/timers/settings.py diff --git a/bot/modules/study/tracking/__init__.py b/bot/modules/pending-rewrite/study/tracking/__init__.py similarity index 100% rename from bot/modules/study/tracking/__init__.py rename to bot/modules/pending-rewrite/study/tracking/__init__.py diff --git a/bot/modules/study/tracking/commands.py b/bot/modules/pending-rewrite/study/tracking/commands.py similarity index 100% rename from bot/modules/study/tracking/commands.py rename to bot/modules/pending-rewrite/study/tracking/commands.py diff --git a/bot/modules/study/tracking/data.py b/bot/modules/pending-rewrite/study/tracking/data.py similarity index 100% rename from bot/modules/study/tracking/data.py rename to bot/modules/pending-rewrite/study/tracking/data.py diff --git a/bot/modules/study/tracking/session_tracker.py b/bot/modules/pending-rewrite/study/tracking/session_tracker.py similarity index 100% rename from bot/modules/study/tracking/session_tracker.py rename to bot/modules/pending-rewrite/study/tracking/session_tracker.py diff --git a/bot/modules/study/tracking/settings.py b/bot/modules/pending-rewrite/study/tracking/settings.py similarity index 100% rename from bot/modules/study/tracking/settings.py rename to bot/modules/pending-rewrite/study/tracking/settings.py diff --git a/bot/modules/study/tracking/time_tracker.py b/bot/modules/pending-rewrite/study/tracking/time_tracker.py similarity index 100% rename from bot/modules/study/tracking/time_tracker.py rename to bot/modules/pending-rewrite/study/tracking/time_tracker.py diff --git a/bot/modules/sysadmin/__init__.py b/bot/modules/pending-rewrite/sysadmin/__init__.py similarity index 100% rename from bot/modules/sysadmin/__init__.py rename to bot/modules/pending-rewrite/sysadmin/__init__.py diff --git a/bot/modules/sysadmin/blacklist.py b/bot/modules/pending-rewrite/sysadmin/blacklist.py similarity index 100% rename from bot/modules/sysadmin/blacklist.py rename to bot/modules/pending-rewrite/sysadmin/blacklist.py diff --git a/bot/modules/sysadmin/botconfig.py b/bot/modules/pending-rewrite/sysadmin/botconfig.py similarity index 100% rename from bot/modules/sysadmin/botconfig.py rename to bot/modules/pending-rewrite/sysadmin/botconfig.py diff --git a/bot/modules/sysadmin/exec_cmds.py b/bot/modules/pending-rewrite/sysadmin/exec_cmds.py similarity index 100% rename from bot/modules/sysadmin/exec_cmds.py rename to bot/modules/pending-rewrite/sysadmin/exec_cmds.py diff --git a/bot/modules/sysadmin/guild_log.py b/bot/modules/pending-rewrite/sysadmin/guild_log.py similarity index 100% rename from bot/modules/sysadmin/guild_log.py rename to bot/modules/pending-rewrite/sysadmin/guild_log.py diff --git a/bot/modules/sysadmin/module.py b/bot/modules/pending-rewrite/sysadmin/module.py similarity index 100% rename from bot/modules/sysadmin/module.py rename to bot/modules/pending-rewrite/sysadmin/module.py diff --git a/bot/modules/sysadmin/status.py b/bot/modules/pending-rewrite/sysadmin/status.py similarity index 100% rename from bot/modules/sysadmin/status.py rename to bot/modules/pending-rewrite/sysadmin/status.py diff --git a/bot/modules/todo/Tasklist.py b/bot/modules/pending-rewrite/todo/Tasklist.py similarity index 100% rename from bot/modules/todo/Tasklist.py rename to bot/modules/pending-rewrite/todo/Tasklist.py diff --git a/bot/modules/todo/__init__.py b/bot/modules/pending-rewrite/todo/__init__.py similarity index 100% rename from bot/modules/todo/__init__.py rename to bot/modules/pending-rewrite/todo/__init__.py diff --git a/bot/modules/todo/admin.py b/bot/modules/pending-rewrite/todo/admin.py similarity index 100% rename from bot/modules/todo/admin.py rename to bot/modules/pending-rewrite/todo/admin.py diff --git a/bot/modules/todo/commands.py b/bot/modules/pending-rewrite/todo/commands.py similarity index 100% rename from bot/modules/todo/commands.py rename to bot/modules/pending-rewrite/todo/commands.py diff --git a/bot/modules/todo/data.py b/bot/modules/pending-rewrite/todo/data.py similarity index 100% rename from bot/modules/todo/data.py rename to bot/modules/pending-rewrite/todo/data.py diff --git a/bot/modules/todo/module.py b/bot/modules/pending-rewrite/todo/module.py similarity index 100% rename from bot/modules/todo/module.py rename to bot/modules/pending-rewrite/todo/module.py diff --git a/bot/modules/topgg/__init__.py b/bot/modules/pending-rewrite/topgg/__init__.py similarity index 100% rename from bot/modules/topgg/__init__.py rename to bot/modules/pending-rewrite/topgg/__init__.py diff --git a/bot/modules/topgg/commands.py b/bot/modules/pending-rewrite/topgg/commands.py similarity index 100% rename from bot/modules/topgg/commands.py rename to bot/modules/pending-rewrite/topgg/commands.py diff --git a/bot/modules/topgg/data.py b/bot/modules/pending-rewrite/topgg/data.py similarity index 100% rename from bot/modules/topgg/data.py rename to bot/modules/pending-rewrite/topgg/data.py diff --git a/bot/modules/topgg/module.py b/bot/modules/pending-rewrite/topgg/module.py similarity index 100% rename from bot/modules/topgg/module.py rename to bot/modules/pending-rewrite/topgg/module.py diff --git a/bot/modules/topgg/settings.py b/bot/modules/pending-rewrite/topgg/settings.py similarity index 100% rename from bot/modules/topgg/settings.py rename to bot/modules/pending-rewrite/topgg/settings.py diff --git a/bot/modules/topgg/utils.py b/bot/modules/pending-rewrite/topgg/utils.py similarity index 100% rename from bot/modules/topgg/utils.py rename to bot/modules/pending-rewrite/topgg/utils.py diff --git a/bot/modules/topgg/webhook.py b/bot/modules/pending-rewrite/topgg/webhook.py similarity index 100% rename from bot/modules/topgg/webhook.py rename to bot/modules/pending-rewrite/topgg/webhook.py diff --git a/bot/modules/user_config/__init__.py b/bot/modules/pending-rewrite/user_config/__init__.py similarity index 100% rename from bot/modules/user_config/__init__.py rename to bot/modules/pending-rewrite/user_config/__init__.py diff --git a/bot/modules/user_config/commands.py b/bot/modules/pending-rewrite/user_config/commands.py similarity index 100% rename from bot/modules/user_config/commands.py rename to bot/modules/pending-rewrite/user_config/commands.py diff --git a/bot/modules/user_config/module.py b/bot/modules/pending-rewrite/user_config/module.py similarity index 100% rename from bot/modules/user_config/module.py rename to bot/modules/pending-rewrite/user_config/module.py diff --git a/bot/modules/workout/__init__.py b/bot/modules/pending-rewrite/workout/__init__.py similarity index 100% rename from bot/modules/workout/__init__.py rename to bot/modules/pending-rewrite/workout/__init__.py diff --git a/bot/modules/workout/admin.py b/bot/modules/pending-rewrite/workout/admin.py similarity index 100% rename from bot/modules/workout/admin.py rename to bot/modules/pending-rewrite/workout/admin.py diff --git a/bot/modules/workout/data.py b/bot/modules/pending-rewrite/workout/data.py similarity index 100% rename from bot/modules/workout/data.py rename to bot/modules/pending-rewrite/workout/data.py diff --git a/bot/modules/workout/module.py b/bot/modules/pending-rewrite/workout/module.py similarity index 100% rename from bot/modules/workout/module.py rename to bot/modules/pending-rewrite/workout/module.py diff --git a/bot/modules/workout/tracker.py b/bot/modules/pending-rewrite/workout/tracker.py similarity index 100% rename from bot/modules/workout/tracker.py rename to bot/modules/pending-rewrite/workout/tracker.py diff --git a/bot/LionContext.py b/bot/pending-rewrite/LionContext.py similarity index 100% rename from bot/LionContext.py rename to bot/pending-rewrite/LionContext.py diff --git a/bot/LionModule.py b/bot/pending-rewrite/LionModule.py similarity index 100% rename from bot/LionModule.py rename to bot/pending-rewrite/LionModule.py diff --git a/bot/core/__init__.py b/bot/pending-rewrite/core/__init__.py similarity index 100% rename from bot/core/__init__.py rename to bot/pending-rewrite/core/__init__.py diff --git a/bot/core/blacklists.py b/bot/pending-rewrite/core/blacklists.py similarity index 100% rename from bot/core/blacklists.py rename to bot/pending-rewrite/core/blacklists.py diff --git a/bot/core/data.py b/bot/pending-rewrite/core/data.py similarity index 100% rename from bot/core/data.py rename to bot/pending-rewrite/core/data.py diff --git a/bot/core/lion.py b/bot/pending-rewrite/core/lion.py similarity index 100% rename from bot/core/lion.py rename to bot/pending-rewrite/core/lion.py diff --git a/bot/core/module.py b/bot/pending-rewrite/core/module.py similarity index 100% rename from bot/core/module.py rename to bot/pending-rewrite/core/module.py diff --git a/bot/dev_main.py b/bot/pending-rewrite/dev_main.py similarity index 100% rename from bot/dev_main.py rename to bot/pending-rewrite/dev_main.py diff --git a/bot/main.py b/bot/pending-rewrite/main.py similarity index 100% rename from bot/main.py rename to bot/pending-rewrite/main.py diff --git a/bot/settings/__init__.py b/bot/pending-rewrite/settings/__init__.py similarity index 100% rename from bot/settings/__init__.py rename to bot/pending-rewrite/settings/__init__.py diff --git a/bot/settings/app_settings.py b/bot/pending-rewrite/settings/app_settings.py similarity index 100% rename from bot/settings/app_settings.py rename to bot/pending-rewrite/settings/app_settings.py diff --git a/bot/settings/base.py b/bot/pending-rewrite/settings/base.py similarity index 100% rename from bot/settings/base.py rename to bot/pending-rewrite/settings/base.py diff --git a/bot/settings/guild_settings.py b/bot/pending-rewrite/settings/guild_settings.py similarity index 100% rename from bot/settings/guild_settings.py rename to bot/pending-rewrite/settings/guild_settings.py diff --git a/bot/settings/setting_types.py b/bot/pending-rewrite/settings/setting_types.py similarity index 100% rename from bot/settings/setting_types.py rename to bot/pending-rewrite/settings/setting_types.py diff --git a/bot/settings/user_settings.py b/bot/pending-rewrite/settings/user_settings.py similarity index 100% rename from bot/settings/user_settings.py rename to bot/pending-rewrite/settings/user_settings.py diff --git a/bot/utils/ctx_addons.py b/bot/pending-rewrite/utils/ctx_addons.py similarity index 100% rename from bot/utils/ctx_addons.py rename to bot/pending-rewrite/utils/ctx_addons.py diff --git a/bot/utils/interactive.py b/bot/pending-rewrite/utils/interactive.py similarity index 100% rename from bot/utils/interactive.py rename to bot/pending-rewrite/utils/interactive.py diff --git a/bot/utils/lib.py b/bot/pending-rewrite/utils/lib.py similarity index 100% rename from bot/utils/lib.py rename to bot/pending-rewrite/utils/lib.py diff --git a/bot/utils/ratelimits.py b/bot/pending-rewrite/utils/ratelimits.py similarity index 100% rename from bot/utils/ratelimits.py rename to bot/pending-rewrite/utils/ratelimits.py diff --git a/bot/utils/seekers.py b/bot/pending-rewrite/utils/seekers.py similarity index 100% rename from bot/utils/seekers.py rename to bot/pending-rewrite/utils/seekers.py diff --git a/bot/wards.py b/bot/pending-rewrite/wards.py similarity index 100% rename from bot/wards.py rename to bot/pending-rewrite/wards.py diff --git a/requirements.txt b/requirements.txt index aec57783..d858c57f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,7 @@ aiohttp==3.7.4.post0 cachetools==4.2.2 configparser==5.0.2 -discord==1.7.3 -discord.py==1.7.3 +discord.py=2.0.1 iso8601==0.1.16 psycopg2==2.9.1 pytz==2021.1