The old workflow ran docker compose in the repo folder, which failed because the containers belong to the server's top-level compose project. The deploy key can now only run /usr/local/bin/uiogaming-deploy (see UiO-Gaming/drift), so the workflow just passes the service name. Also adds manual runs and prevents overlapping deploys.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
moviepy 2.2.1 still caps pillow below 12, so override that constraint with uv until a moviepy release drops it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Instead of fading in like the texts, the line grows from the middle to
both ends with soft edges over the same second, slowing down as it
reaches its full width.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The line was a row of underscores, which left gaps between them. Draw it
as a solid bar instead, and place the top text's baseline and the top of
the bottom text's capital letters equally far from it, whatever size the
texts end up being.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Staff sorted by ROLE come in alphabetical order of role, so /anilist manga
listed 25 assistants and editors for One Piece, which went over the
1024 characters an embed field can hold, and /anilist anime found no
director for long series. Sort by relevance instead, keep only creators
for manga and directors for anime, one per line, and stop before the
field limit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Messages in other servers the bot is in and in DMs no longer count
towards streaks, and catching up on missed messages at startup only
reads that server. Streaks started elsewhere made /streak se look up a
channel in another server, which crashed with InvalidData.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draw text that users write with Noto Sans CJK Bold so Chinese, Japanese,
Korean, Cyrillic and Greek no longer show up as boxes. It replaces
DejaVu Sans and Impact, and Comic Sans everywhere but the CS2 bingo.
The Dockerfile makes the font available to Graphviz for /mbti.
put_text_in_box now finds the largest font size where the text, wrapped
to the box's pixel width, fits, and centers the drawn text. Long texts
used to overflow and single letters were pushed out of their box.
Words are only split when keeping them whole would halve the size.
Long crab rave texts shrink to fit the video instead of going past its
edges, and the divider line is a bit longer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use the singular form when the count is 1 for fun reply cooldowns,
channel slow mode and user limits, age in days, planned manga chapters,
film length and social credits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add misc_utils.format_number, which separates thousands with a
non-breaking space and uses a decimal comma, and use it for the numbers
shown in embeds and messages.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Count statuses with a Counter over discord.Status instead of one set or
counter per status, and share the emoji formatting between both commands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>