Discord
Visão geral
O Discord conecta o seu servidor de Minecraft ao seu servidor do Discord. Tudo o que vai para o Discord usa um único objeto reutilizável: um destino de webhook (a URL de um canal do Discord, mais um nome e um avatar), declarado uma vez e referenciado por todos os recursos. Para trocar o canal, basta editar uma entry.
A extensão cobre seis tarefas: vinculação de contas com sincronização de cargos por rank, retransmissão de chat nos dois sentidos, um canal de console para executar comandos do servidor pelo Discord, um sistema de relatório de bugs dentro do jogo, anúncios de transações de lojas e webhooks publicados quando um fact do TypeWriter muda. Cada recurso é uma entry própria, então você só configura o que usa. O Discord é opcional para o restante do TypeWriter: sem um link manifest, nenhum bot do Discord é iniciado.
Esta extensão se chamava Community até a versão 0.9. Os nomes das entries não mudaram, e as páginas escritas antes da renomeação são convertidas na primeira inicialização.
Recursos
- Destinos de webhook — uma entry por canal do Discord (URL, nome de usuário, avatar, menções permanentes de cargos), compartilhada por todos os recursos.
- Vinculação de contas — os jogadores executam um comando para obter um código, digitam-no em um canal do Discord e suas contas são vinculadas; os cargos do Discord acompanham seus grupos do Minecraft.
- Sincronização de chat — o chat do Minecraft e as mensagens de entrada e saída vão para o Discord, e as mensagens do Discord podem voltar para o jogo.
- Canal de console — a staff executa comandos do servidor a partir de um canal do Discord, com lista de comandos, restrição por cargo e um arquivo de log.
- Relatórios de bugs — um formulário de diálogo dentro do jogo, armazenado com acompanhamento de status, publicado no Discord como embed ou tópico de fórum e gerenciável por slash commands do Discord.
- Anúncios de lojas — compras e vendas publicadas no canal indicado por cada loja (requer a extensão Shops).
- Webhooks de facts — uma mensagem quando um fact do TypeWriter muda, por jogador, por grupo ou globalmente.
- Migração automática — páginas anteriores à 0.9 com webhooks embutidos são convertidas em destinos de webhook.
Instalação
- Crie um webhook do Discord no canal desejado: no Discord, vá em Configurações do canal, Integrações, Webhooks, Novo webhook e copie a URL. Isso basta para webhooks, relatórios de bugs e chat em um único sentido.
- Para a vinculação de contas, a retransmissão de chat do Discord para o Minecraft, o canal de console e os slash commands, você também precisa de um bot do Discord. Crie-o no Discord Developer Portal, copie o token, convide-o para o seu servidor e ative o Server Members Intent e o Message Content Intent em Bot. A extensão solicita esses intents e não consegue se conectar sem eles.
- Confirme que a extensão Basic do TypeWriter está instalada (veja a documentação do TypeWriter).
- Coloque o JAR do Discord em
plugins/Typewriter/extensions/e reinicie o servidor. O JAR já contém a biblioteca JDA usada pelo bot. - Para os anúncios de lojas, instale também a extensão Shops.
Os relatórios de bugs usam as telas de diálogo do Paper, que exigem o Paper 1.21.6 ou posterior.
Primeiros passos
Vincule contas e publique relatórios de bugs no canal da sua staff:
- No painel web do TypeWriter, abra uma página de manifest e adicione uma Webhook Definition. Cole a URL do canal em
urle, opcionalmente, umusernamee umavatarUrl. - Adicione um artifact Discord Link Storage na mesma página: ele armazena os vínculos e os códigos pendentes.
- Adicione um Discord Link Manifest. Defina
storagecom o artifact,webhookcom o seu destino, ativebote preenchabotTokeneguildId. DefinaverificationChannelIdcom o canal do Discord onde os jogadores digitarão o código. - Opcional: preencha
roleMappingspara dar cargos do Discord por grupo do Minecraft, por exemplominecraftGroupvipe o ID do cargo do Discord emdiscordRoleId. - Adicione um artifact Bug Report Sequence Storage e depois um Bug Report Manifest. Defina
commandName(por exemplobugreport),sequenceStorage,serverNamee pelo menos uma entrada emcategories, com um input cujakeysejadescription. Emwebhook, definadestinationcom o seu destino. - Publique. O jogador executa
/discordlinkpara obter um código, digita-o no canal de verificação e fica vinculado. O jogador executa/bugreportpara abrir o formulário.
Para obter o ID de um canal ou cargo do Discord, ative o Modo Desenvolvedor nas configurações avançadas do Discord, depois clique com o botão direito no canal ou cargo e escolha Copiar ID.
Como funciona
O envio usa um webhook, sem bot. Receber do Discord exige o bot, que é configurado apenas no Discord Link Manifest. Sem um bot ativado, a retransmissão de chat do Discord para o Minecraft, o canal de console e os slash commands de relatório de bugs não fazem nada.
Um destino vazio ou desativado é a forma normal de não enviar nada. Uma referência a um destino que não existe mais é registrada como Destination '…' not found; message dropped.
Configuração
A extensão é configurada no painel web. Os dados de vinculação e os relatórios de bugs são armazenados nas entries de artifact que você cria. Além disso, ela grava:
| Arquivo | Conteúdo |
|---|---|
logs/discord-console.log | Comandos executados a partir do canal de console (relativo à raiz do servidor; o caminho é um campo da entry). |
backup/community-webhook-v1/ | Backup das páginas reescritas pela migração do Community, na pasta do Typewriter. |
Migração do Community
As páginas escritas antes da 0.9 armazenavam o webhook dentro de cada manifest. Na primeira inicialização, a extensão cria uma Webhook Definition para cada destino distinto, aponta os manifests para ela e faz o backup de cada página reescrita antes. Em seguida, pede que você execute /typewriter reload uma vez.
Comandos
Os comandos abaixo são registrados pelas entries de manifest. Seus nomes são campos dessas entries; os padrões são mostrados.
| Comando | Descrição |
|---|---|
/discordlink | Gera um código de verificação ou repete o pendente. Apenas jogadores. |
/discordlink unlink | Remove o vínculo e os cargos do Discord associados. |
/bugreport | Abre a seleção de categoria e depois o formulário do relatório. |
/bugreport mine | Lista os seus próprios relatórios. |
/bugreport list [player] | Lista os relatórios, opcionalmente de um jogador. Requer a permissão de admin. |
/bugreport status <reportId> <statusId> | Altera o status de um relatório. Requer a permissão de admin. |
/bugreport delete <reportId> | Exclui um relatório. Requer a permissão de admin. |
Com discordCommands ativado, o bug report manifest também registra um slash command no seu servidor do Discord, com o mesmo nome de commandName, com list, status e delete. Apenas administradores do Discord, ou membros com um cargo em discordAdminRoleIds, podem usá-lo.
Registrar esses slash commands substitui os outros slash commands que este bot tem no servidor.
Permissões
Todas as permissões são campos das entries e podem ser alteradas. Padrões:
| Permissão | Concede |
|---|---|
discordlink.notify | Receber uma mensagem quando um jogador vincula uma conta (notifyPermission; vazio desativa). |
bugreport.notify | Receber uma mensagem quando um relatório é enviado (notifyPermission). |
bugreport.admin | Usar /bugreport list, status e delete (adminPermission). |
group.<group> | Corresponde a um mapeamento de cargo: o primeiro mapeamento cujo grupo for aprovado é o cargo do jogador no Discord (groupPermissionFormat). |
Entries
9 entradas, geradas a partir do código-fonte da extensão.
Eventos1
- Webhook Fact EventPublish a Discord webhook when a Typewriter fact changes
Comandos2
- Bugreport ManifestConfigure bug report behaviour
- Discord Link ManifestConfigure Discord linking and role synchronization
Artefatos2
- Bugreport Sequence StorageBug report sequence storage
- Discord Link StorageDiscord link storage
Manifestos4
- Chat Sync ManifestConfigure Minecraft to Discord chat synchronization
- Console Channel ManifestConfigure Discord console channel
- Shop Notification ManifestFormat shop transactions announced on Discord
- Webhook DefinitionA reusable Discord webhook destination
Solução de problemas
O bot não se conecta. O console mostra Failed to connect Discord Bot ou Discord Bot is disabled or token is missing. Verifique se bot está ativado com o botToken correto e se os intents Server Members e Message Content estão ativados no Developer Portal. O guildId deve ser o ID do servidor: se estiver errado, você verá guild not found.
O /discordlink diz que a vinculação não está configurada. Não há nenhum Discord Link Manifest em uma página publicada. O console mostra discord_link_manifest not found; Discord link is disabled.
O código digitado no Discord é ignorado. Os jogadores devem digitar apenas o código, com exatamente codeLength letras ou dígitos, no canal definido em verificationChannelId. O bot reage com um check ou uma cruz. Um código expirado (codeValidityMinutes) ou uma conta do Discord que já está vinculada é recusado. Um jogador já vinculado também é recusado, a menos que autoOverwriteExistingLink esteja ativado.
O comando de relatório de bugs diz que não há categorias. categories está vazio por padrão. Adicione pelo menos uma categoria. Um relatório só é aceito quando o input title ou description está preenchido, e o formulário adiciona o input title por conta própria, então adicione um input com a chave description para a mensagem.
Os relatórios de bugs são rejeitados pelo Discord. threadNameTemplate serve para canais de fórum. Se o seu destino é um canal de texto comum, esvazie o template. O console mostra Webhook '…' rejected with HTTP … com o motivo.
Os comandos de console não fazem nada. O canal de console precisa do bot, e o ID do canal em discordChannelId deve corresponder. Um comando bloqueado recebe uma reação de proibido e um membro sem autorização recebe uma cruz. Por padrão, commandList é uma blacklist contendo stop, restart e reload; mude para blacklistIsWhitelist e restrinja allowedRoles para uma configuração mais segura.
As vendas das lojas não são anunciadas. Você precisa de um Shop Notification Manifest (sem ele, nada é enviado), e a definição da loja deve indicar o destino em seu notificationWebhookId, usando o ID da sua entry Webhook Definition. A extensão Shops deve estar instalada.
Extensões relacionadas
- Shops — suas lojas indicam a Webhook Definition que anuncia suas transações.