Skip to content

Release 0.7.9-3 · Donut: slash command groups, /ai ask (BETA), private DM buttons, server blacklist and fixes - #400

Merged
liamt8d merged 5 commits into
mainfrom
release/bot-patch-0.7.9-3
Nov 2, 2026
Merged

liamt8d merged 5 commits into
mainfrom
release/bot-patch-0.7.9-3

Conversation

@liamt8d

@liamt8d liamt8d commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

A patch of 0.7.9, shown as 0.7.9~3. Version 0.7.9-2 becomes 0.7.9-3; the next real release is 0.7.10. This release changes the database (new tables dm_reports and guild_blacklist, a trigger on dm_reports, per-server form numbers): back it up before deploying. Run node deploy-commands.js after deploying.

The release

  • package.json and package-lock.json: version 0.7.9-3.
  • CHANGELOG.md: everything under [Unreleased] moves to ## [0.7.9-3] — 2026-11-02 · Donut (Added, Changed, Fixed), [Unreleased] stays empty. Environment variable names and team-only commands stay in the CHANGELOG only, as in 0.7.9-2.
  • src/utils/releases.js, src/i18n/releases/en.js, es.js, pt-BR.js, scripts/check-releases.js: the new release in the release center (!version), in three languages (the release menu has 23 of 25 slots used: only 2 are left for 0.7.10). The release workflow creates the tag v0.7.9-3 from the ## [0.7.9-3] section when this is merged.

Fixes made after testing the DMs in production

  • The buttons of a DM from Petto answer privately. The info button shows only facts about the server (icon, name, ID, creation date, members); no "why you got it", no "how to stop it". Every answer of the info, report and refusal paths is an ephemeral interaction response, acknowledged first; the delete button just deletes that DM. A DM report's thanks has no report number, the team card has no Reopen button and a handled report is final (a trigger on dm_reports refuses to reopen it).
  • A deleted role no longer breaks verification or other roles. The error seen in production was Unknown Role (10011): the verified role saved in the verification settings no longer existed. Now the triage treats 10011 and 50028 as expected (general log, no ping, with the explanation) and src/utils/deadRoles.js applies the roles that exist, drops a dead role from the settings only when the server's staff can be told (once a day, in its log channel), and verification re-creates a missing verified role (Manage Roles needed) or, if it cannot, counts the member as verified with a friendly message. The same split applies to join roles, reaction roles and buttons, embed buttons and responders, level rewards and invite rewards. The error card now shows the server for flows that run from a DM.
  • The verification button's icon is Petto's shield instead of the "abc" emoji.

New: a server blacklist for the Petto team (hidden)

!blacklist <id or name> <reason>, remove, list and info (also petto blacklist ...) for the owner and PETTO_DEVELOPER_IDS only; it is not a command for anybody else (no reply, no "unknown command"), and is hidden from help, autocomplete, suggestions, the short aliases and the commands page. Adding a server stores it (table guild_blacklist, cached in memory, plus PETTO_BLACKLISTED_GUILD_IDS as a safety net); if Petto is in it, the owner gets one notice with the reason, the support link and the terms and privacy pages (a DM, else the system channel), Petto leaves and the team's ops channel gets a note. If a blacklisted server adds Petto again it leaves first of all, before any listener writes anything, counts the attempt, notifies at most once per 24 h and posts one rate-limited ops line; every other event, interaction and web route of that guild is ignored, and ready leaves blacklisted guilds one per second. The support and ops servers cannot be blacklisted.

Team tools improved

New hidden !team / !teamhelp lists the team commands from their own metadata (a test asserts every team-only command appears). !leaveguild takes an id, a unique name or --here, asks for a confirmation only its author can press (expires in 30 s), refuses the current server unless --here, never leaves the ops or support server and logs to the ops channel. !guildsend takes an id, a unique name or here and reports what it did. /guilddebug info adds shard, join date, premium, blacklist status, features and Petto's permissions and now accepts developers. !botstatus and !slots are silent for everybody outside the team.

To configure

PETTO_DM_REPORTS_CHANNEL_ID, PETTO_PRIORITY_ERRORS_CHANNEL_ID, PETTO_PRIORITY_PING_USER_IDS (optional PETTO_PRIORITY_PING_ROLE_ID, PETTO_BLACKLISTED_GUILD_IDS), and check that the pe_info and pe_delete application emojis exist.

Checks

npm run check and npm run types:check pass (new check-dead-roles.js, check-guild-blacklist.js, check-dm-origin.js and others). Not verified without real Discord or PostgreSQL: ephemeral responses in a bot DM, the look of the V2 info card, leaving a real guild, the notice to a real owner, a real re-add, and the new tables and trigger on a real database. The Spanish and Portuguese texts were not reviewed by a native speaker.

…at say where they are from, and fixes

- The version is 0.7.9-3 in package.json and package-lock.json, and
  `!version` shows it first as v0.7.9~3, in English, Spanish and
  Portuguese (0.7.9-2 is now a published version).
- CHANGELOG.md has the notes of 0.7.9-3: what was under Unreleased
  (the slash commands that gather the prefix commands as subcommands,
  /ai ask, the origin line and buttons of every DM, the clearer help,
  the picture-first feed cards, per-server form numbers, the send
  permission hardening, the priority error log, self-healing tickets
  and the fixes). Near-duplicate lines are merged and the counts are
  the final ones: 67 registered commands, 64 slash commands and 3
  menus.
- check-releases follows the new latest version.

The release workflow creates the GitHub release when the version
changes, as a normal release and the latest one.

Signed-off-by: Liamt8dd <juliancamilparratrujillo@gmail.com>
… a deleted role no longer breaks verification

The buttons under a DM from Petto now answer the interaction itself with a
private (ephemeral) message and acknowledge Discord first, so nothing is
written in the chat and "didn't respond in time" cannot appear. The delete
button acknowledges with deferUpdate and removes the message. The info card
shows only the icon, name, ID, creation date and members of the server (or
one short line for Petto itself or for a server Petto left); the reasons,
the stop lines and the explanation of the buttons are gone in en, es and
pt-BR.

A role that a server chose and then deleted (Discord code 10011) is a setting
of the server, not a bug: it is an expected error in the triage with the fix
config-role-missing, and Invalid Role (50028) too. Verification makes the
verified role again when Petto may, or else lets the member through as
verified with a friendly note, and tells the staff once a day in the log
channel. Join roles, reaction roles, role buttons, level rewards and invite
rewards give the roles that exist and leave out only the dead one, and take
it out of the setting only when the staff could be told. The error card of
the letters check and of the web page now names the server. The verify here
in Discord button has the shield of Petto instead of the letters emoji.

Signed-off-by: Liamt8dd <juliancamilparratrujillo@gmail.com>
…t be reopened

The thanks a person reads after reporting a DM no longer shows a report number (en, es, pt-BR). The team card has no Reopen button: a report marked handled is final, the statement that reopened it is gone, the table refuses to move it back to open, and an old button pressed twice only says it was already handled.

Signed-off-by: Liamt8dd <juliancamilparratrujillo@gmail.com>
…am tools

The team can blacklist servers that break the terms of service or the privacy policy: a hidden prefix-only command (add, remove, list, info) that answers nobody outside the team, a guild_blacklist table kept in memory with an optional environment list as a safety net, a notice to the owner in the language of the server, and the leaving. A blacklisted server that adds Petto again is left before any other listener runs, one notice a day and one limited note for the team; every other event, the web routes and the start-up sweep ignore it too.

The team tools share one gate and are silent for everybody else. A hidden team command lists them from their own metadata. The leave command asks for a confirmation only its author can press, refuses the server where it is typed unless told otherwise, and the notice and diagnostic tools show what they did and log it. The release notes mention the change without naming the command.

Signed-off-by: Liamt8dd <juliancamilparratrujillo@gmail.com>
@liamt8d liamt8d changed the title Release 0.7.9-3 · Donut: slash command groups, /ai ask (BETA), DMs that say where they are from, and fixes Release 0.7.9-3 · Donut: slash command groups, /ai ask (BETA), private DM buttons, server blacklist and fixes Nov 2, 2026
Comment thread scripts/check-guild-blacklist.js Fixed
Comment thread scripts/check-guild-blacklist.js Fixed
Comment thread scripts/check-guild-blacklist.js Fixed
Signed-off-by: Liamt8dd <juliancamilparratrujillo@gmail.com>
@liamt8d
liamt8d merged commit 32f09b9 into main Nov 2, 2026
4 checks passed
@liamt8d
liamt8d deleted the release/bot-patch-0.7.9-3 branch November 2, 2026 02:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants