bug(discord): slash-команды кроме /ping не отвечают в тестовой группе #94
Closed
opened 2026-05-25 15:39:00 +03:00 by Toutsu
·
4 comments
No Branch/Tag Specified
main
feature-discord-wizard-telegram-parity
fix/deploy-trivy-image-timeout
fix/deploy-scan-pull-images
feature/telegram-game-card-fields
feature/issue-136-wizard-format-location
fix/issue-135-wizard-publish-schedule
fix/issue-133-on-conflict-inference
fix/issue-130-no-limit-complete
fix/issue-129-libgssapi
fix/issue-127-wizard-capacity-club
fix/issue-125-test-cleanup
fix/issue-123-no-limit-wizard
feat/issue-112-wizard-refactor
feat/issue-111-game-creation-wizard
fix/issue-110-showcase-500
feat/issue-110-private-club-showcases
codex/feature-issue-108-portfolio
feat/profile-design-system
codex/fix-public-pages-500
feature/issue-40-master-profiles
feature/issue-39-game-catalog
codex/feature/issue-38-public-club-pages
refactor/issue-37-platform-neutral-handlers
codex/fix-template-topic-release
refactor/issue-36-platform-migration
fix/discord-nullable-telegram-columns
fix/discord-dapper-aot-missing
fix/discord-console-logging-deferred
fix/discord-guildinteractionuser-permissions
fix/discord-count-bigint-cast
fix/discord-slash-commands-guild-context
fix/discord-slash-command-registration
feature/issue-35-identity-linking
fix/discord-oauth-diagnostics
feature/issue-34-discord-oauth-dashboard
test/issue-33-regression-tests
chore/issue-32-discord-compose-wiring
codex/issue-31-platform-messenger-scheduler
feature/discord-reschedule-voting
codex/feature-issue-29-discord-join-leave
feature/issue-28-discord-newsession-listsessions
feature/issue-27-discord-session-batch-renderer
feature/issue-26-discord-netcord-gateway
codex/refactor-issue-25-platform-neutral-join-leave
feature/dashboard-design-refresh
feature/issue-58-health-checks
feature/issue-23-platform-identity
fix/issue-60-add-license
feature/issue-57-postgresql-backup
feature/trivy-security-scan
codex/feature/issue-21-telegram-topics
feature/issue-20-rsvp-reminders
feature/issue-15-session-audit-log
feature/issue-19-batch-join-link
fix/navmenu-mobile-overlap
feature/new-logo
issue-47-navmenu-icon-fix
issue-15-session-audit-log
issue-14-attendance-stats
issue-22-neutral-rendering
codex/ftest-telegram-landing-smoke
feat/player-list-kick-waitlist
codex/co-gm-delegation
v3.11.2
v3.11.1
v3.11.0
v3.10.0
v3.9.9
v3.9.8
v3.9.7
v3.9.6
v3.9.5
v3.9.4
v3.9.3
v3.9.2
v3.9.1
v3.9.0
v3.8.0
v3.7.1
v3.7.0
v3.6.0
v3.5.1
v3.5.0
v3.4.0
v3.3.0
v3.2.0
v3.1.1
v3.1.0
v3.0.10
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.0
v2.5.0
v2.4.0
v2.3.0
v2.2.0
v2.1.1
v2.1.0
v2.0.1
v2.0.0
v1.15.1
v1.15.0
v1.14.0
v1.13.0
v1.11.0
v1.10.6
v1.10.5
v1.10.4
v1.10.3
v1.10.2
v1.10.1
v1.10.0
v1.9.9
v1.9.8
v1.9.7
v1.9.6
v1.9.5
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.8.2
v1.8.1
v1.8.0
v1.7.0
v1.6.0
v1.5.0
v1.4.1
v1.4.0
v1.3.0
v1.2.0
v1.1.5
v1.1.4
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.1
v1.0.0
Labels
Clear labels
area:bot
area:data
area:discord
area:infra
area:miniapp
area:platform
area:shared
area:web
in-progress
next-up
pending-approval
platform:discord
platform:multi
platform:telegram
priority:p0
priority:p0
priority:p1
priority:p2
priority:p3
security
type:bug
type:chore
type:feature
type:refactor
type:test
Telegram bot and worker logic
Database schema, migrations and persistence model
Discord bot service and Discord adapter
Infrastructure, runtime and deployment
Telegram Mini App dashboard
Platform-neutral abstractions and adapter boundaries
Shared domain and rendering contracts
Blazor web dashboard
В работе (issue взят агентом)
Recommended immediate backlog
Ждёт согласования плана решения
Discord-specific behavior or adapter work
Cross-platform or platform-neutral work
Telegram-specific behavior or adapter work
Critical priority
Блокирующий приоритет: задача должна быть выполнена до признания решения production-ready
High priority
Medium priority
Lower priority
Security-sensitive work
Bug fix or corrective work
Maintenance and supporting work
New product functionality
Structural change without direct feature growth
Testing and coverage work
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Toutsu/GmRelayBot#94
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Контекст
Discord-бот
gmrelay_botподключён к тестовой группе/серверу. По ручной проверке в Discord 25 мая 2026 примерно в 15:18-15:29 MSK бот не реагирует на основные команды управления сессиями.Цель этой задачи: зафиксировать фактуру и оставить место для отдельного разбора позже. Причина пока не расследовалась.
Наблюдения из ручной проверки
ToutsuнаписалТеств канале#общее; видимого ответа бота нет./pingсработал как Discord slash interaction: в UI видноToutsu использует ping, ботgmrelay_botответилPong!./listsessionsвидимого ответа от бота нет./pingснова сработал и вернулPong!, то есть бот в целом онлайн и способен отвечать на slash interaction./helpи/newsessionвидимого ответа от бота нет./listsessions,/help,/newsessionвыглядят как обычные сообщения пользователя, а не как UI-событиеиспользует ..., в отличие от/ping. Это может означать, что Discord не распознаёт эти команды как зарегистрированные slash-команды, но это пока не подтверждено.Факты из репозитория
/newsessionи/listsessions, а также сценарий создания/публикации расписания через Discord.src/GmRelay.DiscordBot/Features/Sessions/DiscordNewSessionCommand.csс[SlashCommand("newsession", "Create a new game session")].src/GmRelay.DiscordBot/Features/Sessions/DiscordListSessionsCommand.csс[SlashCommand("listsessions", "Show upcoming game sessions in this server")].src/GmRelay.DiscordBot/Features/Sessions/DiscordRescheduleCommand.csс[SlashCommand("reschedule", "Initiate reschedule voting for a session")]./pingрегистрируется явно вsrc/GmRelay.DiscordBot/Program.csчерезhost.AddSlashCommand("ping", ...), и именно он работает в тестовой группе.DiscordOptionsсейчас валидирует толькоDiscord:Token; README при этом отдельно упоминает client id для slash-команд. Это не вывод о причине, а пункт для проверки конфигурации при будущем разборе.botиapplications.commands.Что проверить при разборе
/newsession,/listsessions,/rescheduleв списке slash-команд Discord application в тестовом сервере.applications.commands./ping.GmRelay.DiscordBotпри старте.DISCORD_BOT_TOKEN, client id/application id иDiscord__*настройки.#общеедля ответа и отправки embed/components.Ожидаемое поведение
/pingотвечаетPong!./listsessionsдолжен вернуть расписание или понятное сообщение, что предстоящих игр нет./newsessionдолжен быть доступен как slash-команда с обязательными параметрамиtitleиtimeи отвечать результатом создания или понятной ошибкой./helpлибо не должна документироваться/использоваться, либо должна быть добавлена как отдельная команда помощи.Артефакт
Скриншот ручной проверки приложен в исходном обращении к Codex. Если потребуется, его стоит перенести в Gitea вручную как вложение к этой issue.
Реализовано в PR #95 и выпущено в v3.0.2.
Ключевая причина:
/pingрегистрировался напрямую, а module-based slash-команды NetCord не добавлялись черезhost.AddModules(typeof(Program).Assembly). После релиза/newsession,/listsessionsи/rescheduleдолжны регистрироваться при старте Discord worker.Проверки: PR checks run #236 — success, deploy run #237 — success.
Переоткрываю: после деплоя v3.0.2 ручная проверка в Discord показала, что
/pingдоступен как slash-команда, а/listsessionsи/newsessionвсё ещё отображаются/отправляются как обычный текст.Новый проверяемый root-cause:
host.AddModules(...)добавлен, но сами module-based команды объявлены как[SlashCommand]на классе. В reference NetCord module pattern атрибутSlashCommandрасположен на методе внутриApplicationCommandModule, поэтому scanner может не регистрировать нашиExecuteAsyncметоды как команды.После ручной проверки Discord стало ясно, что v3.0.2 закрыл только часть причины:
AddModules(...)добавлен, но сами NetCord module-команды не регистрировались как отдельные slash-команды.Новая root-cause гипотеза подтверждена тестом:
[SlashCommand]был на классе модуля, а NetCord в таком случае трактует его как group-level команду и не сканирует методы как standalone slash-команды. Исправление перенесло атрибуты наExecuteAsyncи добавило тест, который проверяет обнаружение/newsession,/listsessions,/rescheduleчерезApplicationCommandService<SlashCommandContext>.AddModules(assembly).PR: #96
Исправление доведено до релиза.
Что сделано:
main:9375fa45b24a7a07e4416bbe329198fa6dd8da4eОжидаемая проверка в Discord: slash-меню для
gmrelay_botдолжно начать показывать/newsession,/listsessions,/rescheduleрядом с/pingпосле обновления команд Discord.