#dev-log

1 messages ยท Page 74 of 1

regal archBOT
regal archBOT
#

I don't like this theme at all with our background. The element blends in, and is hard to see. That being said, it seems the library doesn't provide much in terms of themes, and isn't backward compatible with older themes (I converted a few, but they don't look good), so I can live with this for now, provided we add a highly contrasting border.

I tried border: 3px solid lightgray; border-radius: 5px;, and while it isn't the prettiest thing in the world, I prefer it to what we currently h...

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#

Description

Closes #1407.

Changes

  • Improves parsing of site URL, to make it work locally and in prod. This has been tested in prod, locally, and on docker.
  • Changes the output of the bot latency for when ping is < 0. This is usually caused by a desynced closk. Interestingly, the docker container is always a few seconds out of sync, even after syncing my system clock, and rebuilding the container. This seems like a docker problem though, so I'm not quite sure how to fix it.

##...

odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: ping\-bugs
odd spireBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
oak estuaryBOT
regal archBOT
#

I don't think the comment really belongs in the docstring, the docstring documents what the function does, while the comment explains why the callback is used which is not exactly important to the caller/user.

Although I'm not sure whether doing this is necessary, as I understand it the cancellation exception will be thrown in the coro before it has a chance to execute anything else

odd spireBOT
regal archBOT
#

This issue proposes a command that lets you find help channels you have recently been active in: !recent

The premise of this command is that if you're helping in the help channels, or have claimed help in one, and you wish to find your way back to that channel/channels, you can run this command and it will list the help channels that you have been active in during the past X amount of time (I'm thinking 10 or 15 minutes currently).

My current thoughts on implementation are:

  • On mess...
#
[python-discord/sir-lancebot] New branch created: reddit\-revoke
#

Proposal

Currently, if a user opens a help channel they have the "Help Cooldown" role until they close the help channel or until 15 minutes has passed, whichever occurs first. This allows a person to open multiple help channels if they wait 15 minutes and don't close their first one. This has led to some sub-par help sessions since a person is trying to get help in multiple channels and it's a bad experience all around.

During the staff meeting, the consensus was that we wanted to enfor...

odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#
jb3

Ok, so what should the command be.

My suggestions would be !helpdm on/off with nice documentation detailing what it does, though we could also hook it into the proposed !recent command do !recent subscribe and !recent unsubscribe.

Is this opt-in command going to be permanent, or per channel?

@JakeM-Git @dawnofmidnight I think the proposed feature is permanent per user. You subscribe and anytime you interact with any help channel that is in use you get a DM. I may be misun...

#
jb3

I don't follow how that is useful. The feature is not to receive notifications when there is activity in the channel (though we may revisit that down the line), it's to store a record of which help sessions you interacted with in your DMs.

I can't think of a scenario where you would only want a record of interactions with #help-banana but not #help-apple, if you enable this feature you likely want notifications for all sessions you help out with in.

Again, going back to the example, if ...

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

Looks good to me! Tested locally and the logic is working perfectly, I do have a couple of nitpicks, however:

  • The remaining questions still show even after the quiz ends, this ends up looking strange because it says Let's move on to the next question. when there are no more questions
  • The embed is a bit - for lack of a better word - strange, at the end of the rounds. By this, I mean that it's odd that even if you got the correct answer it says "The correct answer is", suggesting that y...
regal archBOT
#

39350fb Switch from fetch_member to fetch_user - ChrisLovering
7725a02 Download avatars as size 1024 to avoid very lar... - ChrisLovering
94a9550 Add the number of squares that were used by .mo... - ChrisLovering
28f0c10 Correct grammer in the new mosaic command output - ChrisLovering
e929d6b Update return type hint to reflect new behaviour. - ChrisLovering

#
[python-discord/sir-lancebot] branch deleted: change\-to\-fetch\-user
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

#
Sir Lancebot

Connected!

#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#

If you go with plan one, can you store that information in an async redis cache? How will you handle the daily non-deleting rerolls (since those also count towards the rate limit)?

If you're worried that plan one would slow down development too much, you can go with plan 2 for now and we can plan to migrate to plan 1 later. The underlying logic for the actual deletion-reroll should be unaffected.

We can use async redis cache. I believe async redis cache does not accept dicts as a ...

regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#

This approach is problematic for a number of reasons.

* The attribute will not exist until the coro completes. This means that if a reaction triggers an event, it will fail on an attribute error. At the very least, code accessing this attribute must await the task.

* According to the docs, [`fetch_webhook`](https://discordpy.readthedocs.io/en/stable/api.html#discord.Client.fetch_webhook) will raise rather than return None if not found. This code assumes it will return ...
regal archBOT
regal archBOT
#
[python-discord/bot] New branch created: snippet\-add\-two\-dots\-support
odd spireBOT
odd spireBOT
regal archBOT
#

@decorator-factory for the random.randint, yes it would make sense to use randrange instead for that specific line, but then it would break the consistency. the other i've already explained; i didn't create that original code so i don't really understand it either, i simply added some stuff to and refined the parts i DO understand from analyzing at the start of the project

regarding the numeric values won't work well with fuzz, i thought about it and i think you're right. i'll see if i...

#
[python-discord/bot] New branch created: vcokltfre/tag/dotenv
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: vcokltfre/tag/dotenv
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#

I agree on the first part, since the comment describes why we do this, and the caller may not necessarily care.

As for the reason for the callback, I didn't really think about it too much, as this is a common pattern throughout the bot, such as in the Silence and Stream cogs. https://github.com/python-discord/bot/commit/2fd2c77035e87dde009c39aa7345e4871d5b41df

I'm not too familiar with the inner workings of asyncio tasks, so I can't say for certain whether this is needed or not.

odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: snippet\-add\-two\-dots\-support
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#

Description

This command will create a mini game, called Anagrams.
To sum it up, Anagrams is a word game, where you make words from given letters.
This game will be implemented in Sir LanceBot to play with

Reasoning

It is a fun minigame where anyone can participate. The game tests how well you are at making words, and can get a bit competitive

Proposed Implementation

Me: .anagrams
Bot: Sends an embed showing the letters
Me: Crate (bot reacts with a check if the word...

regal archBOT
regal archBOT
regal archBOT
regal archBOT
#

The issue is probably our new limit to infractions returned from the site API, combined with the heavy mass ban we recently did. We have probably crossed 100 active infractions since those were applied, and as a result, they don't show up to be rescheduled when the scheduler restarts.

It does appear to have an easy temporary fix though, reschedule_infractions() should add a filter to the site query to ignore permanent infractions.

A permanent fix would be to remove the pagination cap ...

regal archBOT
regal archBOT
regal archBOT
#

I think we would be better making the site endpoint an actual paginator and walking through it rather than bypassing the paginator for this specific request.

Yeah. As-is no pagination info is sent, but we can naively paginate by just scrolling until we run out of results. We will really want to make sure that filter for non-permanent is enabled, though, otherwise we're just stacking our permanent bans into an ever growing boot delay.

regal archBOT
regal archBOT
#

Description

Bumps the python version to 3.9 (.5 in docker), and switches from pipenv to poetry as the package manager.

Changes

  • Pipfile, Pipfile.lock -> pyproject.toml, poetry.lock
  • Dockerfile Python 3.8 -> 3.9.5
  • Dependency feedparser updated due to a bug in the older version
  • CI Pipenv -> Poetry
  • Documentation Pipenv -> Poetry
  • Add python-dotenv

This is a good time to bump python-discord/sir-lancebot#623 which was stalled by the same dependency this PR was.

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#

I completely understand and I would definitely add better documentation to the original code (made by others) if I could. However, even though I did do an analysis over the code before this project even started, I don't have the level of understanding of the previous quiz's code like its original programmers. Thus I cannot document it or else I might even mislead others. From what I understand, it's subtle differences of channels or something.

odd spireBOT
regal archBOT
#

I'm not sure how good an idea this is when we're this far along the development process, but I'm thinking of changing up the interface for the silence command. When testing recently, I found it very clunky, especially compared to the other moderation tools. Most commands (ban, mute, etc) have the format: !<command> <target> <duration> <other args>, compared to silence which has <duration> <target>.

This was originally done because the current usage of silence is either !silence or `!...

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/sir-lancebot] branch deleted: vcokltfre/feat/ping\-uptime\-merge
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#

Description

When not specified there should be a random dog or cat pic response.
EX: .status cat and .status dog would be unchanged but if .status 404 was entered it would choose dog or cat randomly.

Reasoning

This would be useful if you dont care about the picture and are using the command to find the meaning of the status code.
I use it for this reason mainly. You just dont need to know/spend time typing an extra argument when you dont care.

Proposed Implementa...

#
[python-discord/sir-lancebot] branch deleted: reddit\-revoke
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
odd spireBOT
regal archBOT
#

I put it up to a vote with the mods, and most people were leaning towards making the first argument accept either the duration or the channel, so I did that. From my testing, the converters are able to properly choose between a channel, and an int, so not much work was needed.

The subject of the !shh command did come up during discussions. One concern raised was the disparity between the interface of two very similar commands. I'll try adding an optional channel argument, but I'm not sur...

regal archBOT
#

Relevant Issues

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->
Closes #628

Description

Added Music cog with the command .music. Fetch data from Last.fm via the Last.fm API. Access the API through a custom asynchronous API interface based on aiohttp. Initially, pylast was used. However, it does not operate asynchronously.

Did you:

regal archBOT
#
[python-discord/quackstack] New branch created: vcokltfre/chore/readme\-update
#
[python-discord/quackstack] branch deleted: vcokltfre/chore/readme\-update
#
[python-discord/quackstack] New branch created: vcokltfre/chore/docs\-urls
#
jb3
[python-discord/quackstack] branch deleted: vcokltfre/chore/docs\-urls
#
jb3
[python-discord/quackstack] New branch created: docs\-path\-fix
#
[python-discord/quackstack] New branch created: vcokltfre/chore/docs\-urls
#
[python-discord/quackstack] branch deleted: docs\-path\-fix
#
[python-discord/quackstack] branch deleted: vcokltfre/chore/docs\-urls
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#

It's failing because it doesn't mock the content attribute. So accessing it will resolve in a MagicMock instance. By converting it to a string in the tested code, you're running the regex on the following string:

"<MagicMock name='mock.content' id='...'>"

Either way, I guess what I'm trying to ask is whether there's any reason to be converting the attribute to a string. The docs don't seem to ...

night lilyBOT
#
Sir Lancebot

Connected!

#
Sir Lancebot

Connected!

oak estuaryBOT
regal archBOT
odd spireBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/bot] branch deleted: extract\-metabase\-data
#
jb3

7ece67b Add constants for Metabase cog - ChrisLovering
bb8c3b7 Add new cog for extracting data from metabase - ChrisLovering
4b18602 Remove metabase redaction of link used while te... - ChrisLovering
24fbbf6 Save query outputs to the internal eval environ... - ChrisLovering
51fc84c Add comment to int e for context with Metabase ... - ChrisLovering

odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3

@Kronifer vco is interested in taking this as shown above, but on top of that this issue is currently blocked pending futher development on QuackStack, there are a few things we need to do before we should slot it into a production application.

You are welcome to contribute to quackstack though, and I'm sure that if you ask in #dev-contrib then you can find out what needs to be done to get that project into a more ready state.

odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/site] branch deleted: bast0006\-patch\-error\-page\-margins
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: ks129/dewikification/redirection
regal archBOT
regal archBOT
#

This PR removes wiki features and authentication from the site.

  • Event pages and sidebars are static pages at pydis_site/templates/events/pages
  • Resources are now loaded from .yaml files at pydis_site/apps/resources/resources
  • Content pages (guides, rules, etc.) are now loaded from markdown at pydis_site/apps/content/resources/

How to Review

  1. Run the branch locally.
  2. Compare each page with the corresponding page on the current website.
  3. Don't suggest grammar/ph...
odd spireBOT
regal archBOT
#

Adds a docker file that builds the frontend, and a docker-compose which houses the backend and the frontend.

The main thing missing from these changes is that file reloading does not work. Webpack-dev-server by default enables the webpack watch option, but for whatever reason, it doesn't work in the docker build. I've stumbled upon this SO post multiple times in my search, but nothing I tried worked.

...

regal archBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

regal archBOT
#

Another idea, which would also reduce load if we have lots of bot restarts, is to change rescheduling from a "on-startup" to an hourly task. Each hour, grab the infractions that would expire by the end of the hour, and schedule them. That way there's a rolling run where we only schedule soon-to-be-expired infractions. This sidesteps the issue of having to filter out permanents and gives us a lot more headroom under the paginator, and even if there are >100 expiring they'll simply "spread out"...

regal archBOT
#

Relevant Issues

#731

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->
Closes #731

Description

When cat or dog subcommands are not invoked the parent command (http_status) will show a cat or dog picture, relating to the status code given, randomly.

Did you:

  • [x] Join the Python Discord Community?
  • [x] Read all the comments in this template?
  • [x] Ensure there is an issue open, or link...
odd spireBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

#
Sir Lancebot

Connected!

regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/site] New branch created: vcokltfre/fix/uppercase\-env
#
jb3
[python-discord/site] branch deleted: vcokltfre/fix/uppercase\-env
odd spireBOT
regal archBOT
#
jb3
[python-discord/site] New branch created: revert\-488\-vcokltfre/fix/uppercase\-env
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] New branch created: swfarnsworth/rules\_update
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3

Kind of.

The problem arises that we probably want a site wide search, but we need to render every page before we know what is on there, we can't just search templates and resolve them backwards to the actual page they make up.

It's a tricky one that I'm not sure of the perfect answer for, we need to be able to search the content, resources and events apps, all of which use different rendering methods (only content kind of supports searching since the documents are in their final form).

regal archBOT
#
jb3
[python-discord/site] New branch created: joe/redirect\-app\-301
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: joe/redirect\-app\-301
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/sir-lancebot] branch deleted: bookmark\-react\-for\-copy
#
jb3

bdfeef5 Rework bookmark command to allow other users to... - ChrisLovering
99a0fcc Update phrasing of comments in bookmark command - ChrisLovering
a308990 Fix spelling and grammar errors in bookmark com... - ChrisLovering
6e71554 Split out an embed add field call for readability - ChrisLovering
22e062a Make bookmark emoji a constant - ChrisLovering

night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#

Description

This would mean that when using commands such as .ext unload the state of those cogs would be stored in redis, and when the bot starts back up the state is restored and cogs that were marked as unloaded are not loaded during cog load.

Reasoning

This would be useful in instances such as the current latex cog where every time the bot restarts the cog needs to be unloaded as it's not stable enough to be allowed to run yet.

Proposed Implementation

  • when using ...
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: revert\-488\-vcokltfre/fix/uppercase\-env
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] New branch created: reword\-contrib\-guides
odd spireBOT
regal archBOT
#

This PR has been sitting here for many months now. All it does now is change one emoji for another, amongst the changes to the result. The changes to the result are fine, but I don't like the new emojis. Ultimately, that is a matter of preference, and I don't see how you could change that. I'll dismiss my review because while I don't agree with these changes, I won't block them either.

But here's the deal, let's not make minimal style changes like these anymore without at least discussing ...

regal archBOT
regal archBOT
#

One of the key features in the Smarter Resources project is going to be good filtering. We want to be able to tag all our resources with stuff like difficulty and domain, and then filter by those tags in a clever way.

Which tags do we need?

Initially, we'll tag our resources with one of each of the following tags. Note that part of this issue will be working through all existing resources and assigning tags to them.

Resource type

  • Book
  • Guide
  • Course
  • Interactive
    -...
#

As we complete the Smarter Resources project, we'll want to carefully document precisely how a member of the community (staff member or otherwise) can suggest a new resource to be added to our list of resources.

The following must be documented:

  • How to suggest a new resource for inclusion
  • How to implement a new resource. What files need to be edited, and how?
  • The review process for a new resource. Who reviews and approves these suggestions?
#
[python-discord/sir-lancebot] New branch created: concurrency\-action
#

git commit --allow-empty -m "Empty test commit"

Description

This grouping means any new actions on either a PR or against main, will cancel any running actions.
We do not care about these old actions, as they are out of date, so cancelling them will mean the actions we do care about get done faster.

Did you:

  • [ ] Join the Python Discord Community?
  • [ ] Read all the comments in this template?
  • [ ] Ensure there is an issue open, or link...
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/forms-backend] New branch created: admin\_endpoint
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: swfarnsworth/rules\_update
odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] branch deleted: concurrency\-action
#
[python-discord/site] New branch created: update\-rules\-api
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: update\-rules\-api
odd spireBOT
regal archBOT
#

Abstract

Moderators should be able to set a schedule for when their moderator ping role gets removed, to avoid waking up to a ton of unread pings.

Specification

A new command, !modpings schedule set [start] [stop] (with the two arguments being UTC time), should store those two dates in a Redis cache and make sure to remove the role when start hits and re-add it when stop hits using a scheduler.

!modpings schedule reset should clear the cache entry and disable it.

...

regal archBOT
regal archBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: concurrency\-action
#
[python-discord/sir-lancebot] branch deleted: concurrency\-action
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
odd spireBOT
regal archBOT
#

The staticmethod is making the following traceback appear

sir-lancebot    | Traceback (most recent call last):
sir-lancebot    |   File "/usr/local/lib/python3.8/site-packages/discord/ext/commands/core.py", line 451, in _actual_conversion
sir-lancebot    |     ret = await instance.convert(ctx, argument)
sir-lancebot    |   File "/bot/bot/utils/converters.py", line 20, in convert
sir-lancebot    |     return await super().convert(ctx, argument)
sir-lancebot    | TypeError: super(typ...
odd spireBOT
regal archBOT
#

How to suggest a new resource for inclusion

The current consensus among those who have voiced their opinion is that new resource suggestions can be submitted as issues in this repository. Beyond that, we'll need to iron out what we want people to say when they go to suggest a new resource and come up with a set of issue labels that will make the pipeline easiest to manage.

How to implement a new resource. What files need to be edited, and how?

As someone with no front-end experie...

odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/site] New branch created: swfarnsworth/dave
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: swfarnsworth/dave
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

It would be amazing to have deploy previews in our PRs, but this will probably require us to do a whole bunch of very tricky stuff, so it's a really long-term goal.

Wait, what would we have to do?

  • [x] Dewikify the site
  • [ ] Migrate the API to a separate app.
  • [ ] Get rid of our database
  • [ ] Rewrite this app to be a static-site generator app, using something like Cactus, Pelican or [Frozen-Flask](...
#
[python-discord/sir-lancebot] New branch created: latex\-don't\-load\-cog
#

As we are currently working on restricting resources on the latex cog, this commit will prevent it from loading.

It will be reverted once solved.

Relevant Issues

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->

Description

Did you:

  • [ ] Join the Python Discord Community?
  • [ ] Read all the comments in this template?
  • [ ] Ensure there is an issue open, or link relevant discord discu...
odd spireBOT
regal archBOT
#
jb3
[python-discord/sir-lancebot] branch deleted: latex\-don't\-load\-cog
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
oak estuaryBOT
#

Doc item doc_item.symbol_id='testing' present in loaded documentation inventories not found on site, inventories may need to be refreshed.

oak estuaryBOT
#

Doc item doc_item.symbol_id='flask.Config.from_json' present in loaded documentation inventories not found on site, inventories may need to be refreshed.

odd spireBOT
oak estuaryBOT
#

Doc item doc_item.symbol_id='module-flask' present in loaded documentation inventories not found on site, inventories may need to be refreshed.

regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: vcokltfre/feat/bookmark\-reply
#

Relevant Issues

Closes #689

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->

Description

Users can now bookmark a message by replying to it, this is done by making the message argument optional, and if it's None take the message reference, if that is None raise an error to display command usage.

Did you:

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT