#dev-log

1 messages ยท Page 24 of 1

regal archBOT
#
jb3
[python-discord/site] branch deleted: jb3/github-filter/allow-some-bots
odd spireBOT
odd spireBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

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

When starting metricity, the following deprecation warning (?) is printed to the log:

Warning: 'start' is an entry point defined in pyproject.toml, but it's not installed as a script. You may
get improper `sys.argv[0]`.

The support to run uninstalled scripts will be removed in a future release.

Run `poetry install` to resolve and get rid of this message.

We need to check whether we have to action this.

regal archBOT
#
[python-discord/metricity] New branch created: chris/154/deprecation-warning
#

We listen to the former of the two events here https://github.com/python-discord/metricity/blob/main/metricity/exts/event_listeners/guild_listeners.py#L56-L62

Have you seen an example a thread's archive state not being updated? we might need to start listening to the second if so.

I didn't bother listening to the second event originally as my understanding was an active thread should always be in the bot's cache, so archiving a thread should mean that it always triggers the first event.

regal archBOT
#

Thanks for the quick reply!

We listen to the former of the two events here https://github.com/python-discord/metricity/blob/main/metricity/exts/event_listeners/guild_listeners.py#L56-L62

I missed this, thank you for linking to it.

Have you seen an example a thread's archive state not being updated? we might need to start listening to the second if so.

Yes. I've done some data exploration on lovelace in metricity earlier
today, and found this:

metricity=# SELECT COUNT(*) FROM thre...
odd spireBOT
regal archBOT
#
[python-discord/metricity] New branch created: sync-archived-threads
regal archBOT
#

Thanks! I assume the bug was the lacking support for forum channels in older versions then?

Nah, the bug was that sync_thread_archive_state wasn't called when syncing channels, it was only called on startup.

The other part of this change isn't relevant to this issue, but added confusion to the function due to now being relevant anymore now that d.py supports forum channels

#

When metricity starts up and synchronizes the users, all users temporarily have
their in_guild field set to false.

From looking at the code I am currently unsure how this can happen. As far as I
understand, the complete upsert is run in a transaction that is committed at
the end of each individual insert.

Demonstration as taken during a metricity restart (whilst User upsert:
messages can be seen in the logs):

metricity=# SELECT in_guild, COUNT(*) FROM users GROUP BY in_guild; ...
#
[python-discord/metricity] branch deleted: chris/154/deprecation-warning
#
[python-discord/metricity] branch deleted: sync-archived-threads
#

At the moment no messages are inserted for the time when metricity is not available, rendering statistics during that time empty.

It would be nice if metricity could backfill this data on startup. For example, we could check something like SELECT channel_id, max(id::int) FROM messages GROUP BY channel_id, iterate over the history of each channel using after=message_id, and then insert any messages. From my understanding duplicate inserts should mostly be a no-op (possibly needing a `ON C...

#
[python-discord/metricity] New branch created: improve-user-in-guild-sync
#

Closes #157

Previously we set all users in_guild to False, and relied on users being set back to in_guild when iterating through guild.members

However, this caused two problems

  1. For a short window a users in_guild status was incorrect
  2. It required an update for all users in_guild to be sent to postgres to update in_guild back to True.

This diff changes that, so instead only users who are not found in the guild have in_guild set to False

regal archBOT
regal archBOT
#
[python-discord/branding] branch deleted: improve-status-embed-workflow
odd spireBOT
regal archBOT
regal archBOT
#

It might be easiest to select all in guild users from the database and then
do db_in_guild - guild.members and mark them as not in guild with another
query.

Won't this run into the same parameter issue?

I have an alternative idea, although it might be a bit crazy:

First we sort the list of user IDs to update ascending. Then we move the data in chunks, with special handling for the first and last chunk to incorporate an update for anything outside our known range as well.

Pseudocod...

regal archBOT
#

My suggestion was to do the comparison against guild.members on the Python side rather than the database site, so basically what we currently do but only change the users we need to. Something like this:

        async with async_session() as sess:
            in_guild_users = await sess.execute(select(models.User).filter_by(in_guild=True)).scalars().all()
            guild_member_ids = {member.id for member in guild.members}

            for user in in_guild_users:
        ...
odd spireBOT
odd spireBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#

I prefer getting the user to have python on ther PATH for the reasons I mention here https://github.com/python-discord/site/pull/773#discussion_r1160869869, so personally I'm quite happy with leaving the PR mostly as is, though I could make some of the changes to make py a bit more visible as an option.

I can't really comment on this as I do not run Python on Windows but your reasoning makes sense to me, and we should leave it mostly as is.

odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

regal archBOT
odd spireBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

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

Connected!

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] branch deleted: fix-poetry-export-warning
odd spireBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/bot] New branch created: jb3/doc-parser/ignore-bad-lines
#
jb3

We currently have an issue on bot (BOT-3VH on Sentry) which is failing to parse
the sympy docs due to a malformed object inventory.

This looks to be caused by multi-line figure descriptions or something similar
which are creating lines that do not match our regex.

Ignoring these lines is fine as they likely provide no additional context
anyway, and the relevant symbol is still parsed as normal and links to the
original docs.

odd spireBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: use-new-paste-service-API
odd spireBOT
regal archBOT
#

Hi Chris! Thanks for the contribution!

Please could you complete the checklist in the issue body before we can review and approve this PR. Thank you in advance!

Ah, the checklist, a true masterpiece of human achievement! Because who wouldnโ€™t want to spend their precious time meticulously checking off items like "Did you use a semicolon?" or "Did you sacrifice a rubber duck to the coding gods?"

Fear not, dear Joe! My contribution is like a diamond in the rough, waiting for the m...

#
jb3

BREAKING NEWS: Universe narrowly escapes doom! Local hero Chris, armed with a checklist and questionable taste in rubber duck sacrifices, single-handedly prevents cosmic collapse. We salute you, Chris! Now, onto less dramatic matters โ€“ your PR. Let's see if this code can survive a review from yours truly, the world's leading authority on (mostly) helpful feedback. Prepare for battle (with comments, not rubber ducks)!

regal archBOT
#
jb3
[python-discord/bot-core] New branch created: jb3/update/discord.py-2.4
regal archBOT
#
[python-discord/bot-core] branch deleted: jb3/update/discord.py-2.4
odd spireBOT
regal archBOT
#

Changed the status to planning as it's not clear to me what needs to be done here. AFAIK there's nowhere in the bot where we ban in a loop, so there's nowhere obvious to replace.

For manual bans using int eval we could use it, but I'm not sure it'd be worth it for a few reasons:

  • We've managed so far using the single ban api, even for very large raids.
  • Normally we intentionally put in a sleep between bans to make them run slower so we can cancel if we made a mistake.
  • It would be co...
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
thin oysterBOT
#
Sir Robin

Connected!

oak estuaryBOT
night lilyBOT
#
Sir Lancebot

Connected!

thin oysterBOT
#
Sir Robin

Connected!

oak estuaryBOT
thin oysterBOT
#
Sir Robin

Connected!

oak estuaryBOT
ocean rock
#

Our applications are resilient and reliable.

night lilyBOT
#

oUr APpLIcATIONS ARe resIlient ANd rElIAble.

regal archBOT
#

This command will operate similarly to the !modpings command in Python. The goal is that anyone with the Events Team role can run this command. It will either remove the "Code Jam Support" role or add it. ... That's it.

Spec:

  • Only someone with the Events Team Role or an Admin should be able to run this role. Fail silently for everyone else
  • &cj support on will apply the role
  • &cj support off will remove the role
  • The role id to use is: 1254657197535920141
regal archBOT
regal archBOT
regal archBOT
#

Description

Add a devcontainer configuration to the repository to make setting up the development environment easier and more consistent for all contributors.

Reasoning

A devcontainer ensures that all contributors have a consistent development environment, reducing setup time and potential errors. This makes it easier for new contributors to get started and helps maintain productivity.

Proposed Implementation

  1. Create a .devcontainer directory in the repository.
  2. A...
regal archBOT
#

Relevant Issues

#1497

Description

When the hangman command times out, reply to the original message saying that you lost, the game timed out, and what the word was.

Did you:

odd spireBOT
regal archBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

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

I've lightly skimmed through the code and left a few comments.

But there are two main things that I feel should be discussed:

  1. Do we really need gather_replies()? i.e, should we really be displaying the messages that are in reply to a deleted message? It is a very useful information to show but I'm not sure if it's worth combing through the channel's message history every time a message gets deleted.
    (BTW when I made the issue, I only had adding a link to the message being replied...
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: br/gh1560
odd spireBOT
regal archBOT
odd spireBOT
ocean rock
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] New branch created: devops-motivation
#
jb3
[python-discord/king-arthur] branch deleted: devops-motivation
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: modernise
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: cj-support-command
odd spireBOT
odd spireBOT
thin oysterBOT
#
Sir Robin

Connected!

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

Connected!

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

I assume most PyDis maintainers already have an incredibly large flurry of Dependabot notifications. There is a problem there IMO, which is that GitHub itself offers no way to filter notifications based on the author, so you need to do this on your end somehow. I do this via a Sieve script, but I'm not sure other maintainers have similar solutions and I think it would be beneficial to maybe group updates into smaller PRs. Do you think we should use something like that here?

regal archBOT
#
[python-discord/sir-robin] branch deleted: modernise
thin oysterBOT
#
Sir Robin

Connected!

odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/metricity] New branch created: in_guild-sync-perf-improvement
#

Previously we set all users in_guild to False, and relied on users being set back to in_guild when iterating through guild.members

However, this caused two problems

  1. For a short window a users in_guild status was incorrect
  2. It required an update for all users in_guild to be sent to postgres to update in_guild back to True.

This diff changes that, so instead only users who are not found in the guild have in_guild set to False.

The bottleneck for this query is the number of users...

regal archBOT
#

Shouldn't the condition be if user.id _not_ in guild_member_ids, since guild_member_ids contains the users that are on the guild? From my understanding this currently sets in_guild=False for all users that are on the guild (and found in the queryset). Also, nitpicking but it would be nice to remove the space before %d in the log.info line.

Yeah, should have marked this as draft as there were a few more things I wanted to do. I've pushed some new commits and updated the PR descr...

regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
jb3

769e9a9 Add dependabot config for docker & CI - ChrisLovering
7898288 Improve user in-guild sync process - ChrisLovering
f69fb12 Improve user in_guild sync query time by only l... - ChrisLovering
db22e38 Add debug performance logs for in_guild sync - ChrisLovering
95d2227 Merge pull request #165 from python-discord/in_... - jb3

#
jb3
[python-discord/metricity] branch deleted: in_guild-sync-perf-improvement
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
#

I like having these, but they currently look like this in dark mode:

<img width="801" alt="image" src="https://github.com/python-discord/site/assets/50042066/8039f1c5-4b30-43c2-ac83-47169b1f11c5">

<img width="800" alt="image" src="https://github.com/python-discord/site/assets/50042066/676390f9-211f-464e-8fb3-ae7a1f71d475">

It might make sense to have background color for this callout adjusted in settings.py to be a little easier to read, e.g. "success": "#31815D",.

#

How about we use the new logo and update the title to match the event title here?

diff --git a/pydis_site/templates/events/scheduled_events.html b/pydis_site/templates/events/scheduled_events.html
index 0e70de6e..8acee557 100644
--- a/pydis_site/templates/events/scheduled_events.html
+++ b/pydis_site/templates/events/scheduled_events.html
@@ -3,12 +3,12 @@
     <article class="media">
         <div class="media-left">
             <p class="image is-64x64">
-              ...
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: jb3/components/timezone-field
#
jb3
[forms-frontend] Branch jb3/components/timezone-field was force-pushed to `0b697ff`
#
jb3
[forms-frontend] Branch jb3/components/timezone-field was force-pushed to `2f24f22`
#
jb3
[python-discord/forms-backend] New branch created: jb3/fields/timezone-question
#
jb3
[forms-backend] Branch jb3/fields/timezone-question was force-pushed to `bbc4607`
odd spireBOT
thin oysterBOT
#
Sir Robin

Connected!

regal archBOT
#
jb3
[python-discord/forms-backend] branch deleted: jb3/fields/timezone-question
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-frontend] branch deleted: jb3/components/timezone-field
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
oak estuaryBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
oak estuaryBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] branch deleted: use-new-paste-service-API
odd spireBOT
oak estuaryBOT
night lilyBOT
#
Sir Lancebot

Connected!

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

Connected!

odd spireBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#
[python-discord/bot-core] New branch created: py312
regal archBOT
#

Howzit!
I can definitely try.
To be very honest, I thought it was finished and accepted a long time ago.
Tried to use it on the server a few weeks back and it didnโ€™t work.
Iโ€™ll get to it probably at the end of next week.

Thanks for the reminder!

On Fri, 5 Jul 2024 at 04:07, Xithrius @.***> wrote:

@JelmerKorten https://github.com/JelmerKorten Hello! Will you be able
to finish up this PR? Thanks!

โ€”
Reply to this email directly, view it on GitHub
<https://...

regal archBOT
#

Actual behaviour

$ curl -L http://quackstack.pythondiscord.com/duck?seed=123
{"file":"http://quackstack.pythondiscord.com/duck?seed=123/static/4f7d04f0501e44f652faa08e8c9dfb12324eea51.png"}
#                                            ^^^^^^^^^^^^^

Expected behaviour

$ curl -L http://quackstack.pythondiscord.com/duck?seed=123
{"file":"http://quackstack.pythondiscord.com/static/4f7d04f0501e44f652faa08e8c9dfb12324eea51.png"}
regal archBOT
#
[python-discord/quackstack] New branch created: lakmatiol/fix/duck-path
regal archBOT
#
[python-discord/bot-core] branch deleted: py312
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#

The watched_users pop here remains, but can't the same issue occur if you're trying to remove a user and list the users at the same time? Maybe it's worth converting the iterator in prepare_watched_users_data into a list before looping over it.

For the other two dicts, does this definitely resolve the issue? Looking at on_message, you could theoretically have multiple consume_messages tasks. If one task clears a queue while another is iterating over it, won't it create the same bug?

#

I made a gif for this as discussed on discord, you ofc have my full permission to use it. it has a similar quality/fps to the return-gif one (actually slightly bigger).

That's a really cool GIF. One thing is that I think it's better to show on the right what's being printed, to clarify that the result is "2\n4\n". Currently it looks like it ends too soon before I can understand what you're showing.

odd spireBOT
regal archBOT
#
[python-discord/king-arthur] New branch created: Add-daily-missions-for-motivation
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] branch deleted: Add-daily-missions-for-motivation
#
[python-discord/king-arthur] New branch created: slim-build
#

We should add a command to King Arthur that displays a programming quote from http://quotes.cat-v.org/programming/.

For Bella, who has generously agreed to implement this feature, I have already prepared the proposed parser logic below. The Cat-V websites provides a HTML-based API, we simply need to install the BeautifulSoup API wrapper to consume this API.

from bs4 import BeautifulSoup

import urllib.request
from typing import NamedTuple

class Quote(NamedTuple):
    text: str
    s...
regal archBOT
#
[python-discord/king-arthur] New branch created: fix-status-embed-problems
odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: sentry-ci-fix
#
[python-discord/forms-frontend] New branch created: sentry-ci-fix
#
[python-discord/forms-backend] New branch created: sentry-ci-fix
#
[python-discord/sir-robin] New branch created: sentry-ci-fix
#
[python-discord/snekbox] New branch created: sentry-ci-fix
#
[python-discord/site] New branch created: sentry-ci-fix
odd spireBOT
regal archBOT
#
[python-discord/forms-frontend] branch deleted: sentry-ci-fix
#
[python-discord/forms-backend] branch deleted: sentry-ci-fix
#
[python-discord/sir-robin] branch deleted: sentry-ci-fix
#
[python-discord/snekbox] branch deleted: sentry-ci-fix
#
[python-discord/sir-lancebot] branch deleted: sentry-ci-fix
oak estuaryBOT
odd spireBOT
thin oysterBOT
#
Sir Robin

Connected!

odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: sentry-ci-fix
odd spireBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/forms-backend] New branch created: jb3/environ/python-3.12
odd spireBOT
regal archBOT
regal archBOT
#
jb3

I have end-to-end tested locally with form creation, submission, response
fetching, Discord OAuth2. I have also tested all this functionality with
the latest version of forms-frontend.
The only bit I am yet to test (but obviously will ahead of a merge) is
unittesting/snekbox integration. I've copied the qualifier form locally
which should allow me to do this fairly easily.

On Sat, 6 Jul 2024 at 02:09, Mark @.***> wrote:

@.**** approved this pull request.

Have yo...

night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/environ/python-3.12 was force-pushed to `0a6dff6`
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#

The uvicorn.workers module was depreacted in uvicorn 0.30.0.
We currently rely on that module for gunicorn in the dockerfile.

We should either install the module from https://github.com/Kludex/uvicorn-worker, or remove gunicorn entirly and just use the uvicorn binary in the dockerfile.

My preference is the latter, since we already use k8s for replication, so having gunicorn too seems unneeded.

regal archBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/environ/python-3.12 was force-pushed to `4c453e8`
odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/environ/python-3.12 was force-pushed to `e9c5a92`
odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/environ/python-3.12 was force-pushed to `a2a5920`
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/environ/python-3.12 was force-pushed to `d04e74c`
odd spireBOT
odd spireBOT
oak estuaryBOT
regal archBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-backend] branch deleted: jb3/environ/python-3.12
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

A member update event triggered the following traceback shortly after startup:

2024-07-08 18:26:19 metricity-85d48b5747-9bpkj metricity.bot[16] ERROR Unhandled exception in on_member_update
Traceback (most recent call last):
    [ ... ]
  File "asyncpg/protocol/protocol.pyx", line 207, in bind_execute
asyncpg.exceptions.UniqueViolationError: duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(1234) already exists.

The above exception was the direct cause of ...
regal archBOT
#

36fac49 Lazily create guild on text/voice channel mocks - wookie184
cf74040 Make use of fakeredis instead of mocking - wookie184
7477a1c Don't setup the cog for Notifier and Argument P... - wookie184
379194b Just use the notifier instead of patching - wookie184
efa85ef Selectively patch SilenceNotifier only where ne... - wookie184

#
[python-discord/bot] branch deleted: faster-silence-tests
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/forms-backend] New branch created: sqla-migration
regal archBOT
#
[python-discord/forms-backend] New branch created: refactor-unittest-filtering
#
[python-discord/forms-backend] branch deleted: refactor-unittest-filtering
odd spireBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: jb3/auth/popup-and-improvements
#
jb3
  • Authorization window with Discord is now a pop-up instead of a new tab, more
    in keeping with other services that use OAuth2.
  • State is now a longer cryptographically secure nonce, as opposed to our
    previous short numeric states.
  • When authorizing, we now dim the entire form tab until the authorization has
    been completed/cancelled
  • We now have an application-wide Redux store if we want to do anything fancy in
    future related to application state
regal archBOT
#
jb3
[forms-frontend] Branch jb3/auth/popup-and-improvements was force-pushed to `f77c39a`
#
jb3
[forms-frontend] Branch jb3/auth/popup-and-improvements was force-pushed to `a2a37ba`
regal archBOT
#
jb3
[forms-frontend] Branch jb3/auth/popup-and-improvements was force-pushed to `334b150`
ocean rock
#

another exciting PR in soon

#

oh this isn't dev forms

regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: jb3/deps/dep-bumps
regal archBOT
#
jb3
[forms-frontend] Branch jb3/deps/dep-bumps was force-pushed to `4209105`
#
jb3
[forms-frontend] Branch jb3/deps/dep-bumps was force-pushed to `f68f03f`
regal archBOT
regal archBOT
#
jb3
[forms-frontend] Branch jb3/deps/dep-bumps was force-pushed to `351921c`
#
jb3
[python-discord/forms-frontend] branch deleted: jb3/deps/dep-bumps
#
jb3
[forms-frontend] Branch jb3/auth/popup-and-improvements was force-pushed to `e586c95`
#
jb3
[python-discord/forms-frontend] branch deleted: jb3/auth/popup-and-improvements
regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: jb3/components/improved-radio
#
jb3
[forms-frontend] Branch jb3/components/improved-radio was force-pushed to `4f9fbc4`
regal archBOT
#
jb3
[forms-frontend] Branch jb3/components/improved-radio was force-pushed to `93e42b9`
regal archBOT
#
jb3
[forms-frontend] Branch jb3/components/improved-radio was force-pushed to `00413b1`
#
jb3
[python-discord/forms-frontend] branch deleted: jb3/components/improved-radio
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: jb3/components/vote-field
#
jb3
[python-discord/forms-backend] New branch created: jb3/components/vote-field
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-backend] branch deleted: jb3/components/vote-field
odd spireBOT
regal archBOT
regal archBOT
#
jb3
[forms-frontend] Branch jb3/components/vote-field was force-pushed to `dcf2413`
regal archBOT
#
jb3
[python-discord/forms-frontend] branch deleted: jb3/components/vote-field
odd spireBOT
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-backend] New branch created: jb3/features/condorcet-count
#
jb3

Adds an endpoint, /forms/{form_id}/condorcet/{question_id} to perform a
Condorcet calculation for the newly added vote components.

Optionally, a ?winners= parameter can be specified to provide the number of
results to calculate for, defaulting to 1 winner.

The rest of the Condorcet table is provided.

An example response:

{
  "question": {
    "id": "vote-1",
    "name": "Vote for your preferred options",
    "type": "vote",
    "data": {
      "options": [
        "Dog",
...
odd spireBOT
regal archBOT
mint goblet
#

GOAT

odd spireBOT
regal archBOT
#
jb3
[forms-backend] Branch jb3/features/condorcet-count was force-pushed to `3b6464f`
odd spireBOT
regal archBOT
#
jb3
[python-discord/forms-backend] branch deleted: jb3/features/condorcet-count
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] New branch created: quotes
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] New branch created: set-user-agent-explicitly
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] branch deleted: set-user-agent-explicitly
odd spireBOT
regal archBOT
#
[python-discord/king-arthur] branch deleted: quotes
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT