Criando consultas de emblemas personalizados acionados

:bookmark: Este guia explica como criar consultas de badge personalizadas acionadas no Discourse, incluindo os tipos de badges, restrições para badges acionados e uma consulta de exemplo.

:person_raising_hand: Nível de usuário necessário: Administrador

:warning: Este recurso está desativado por padrão. Para ativá-lo, siga este guia.

Ao definir badges no Discourse, você encontrará uma opção “Gatilho” (Trigger) com as seguintes escolhas:

  • Atualizar diariamente (Update daily)
  • Quando um usuário age em uma publicação (When a user acts on post)
  • Quando um usuário edita ou cria uma publicação (When a user edits or creates a post)
  • Quando um usuário altera o nível de confiança (When a user changes trust level)
  • Quando um usuário é editado ou criado (When a user is edited or created)

\u003cimg src=“//assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/5/c/5ce31c4163e65073cdb0e2649d99648f5c520b53.png” width=“588” height=“500” alt=“Badge Trigger Options”\u003e

Esses gatilhos forçam a execução dos badges em intervalos mais frequentes que o diário, garantindo que os usuários sejam notificados sobre novos badges mais próximos de quando a ação ocorreu.

Tipos de badges

Existem dois tipos de badges que você pode definir:

  1. Badges que têm como alvo publicações (posts)
  2. Badges que não têm como alvo publicações

Todas as definições SQL de badge exigem que você selecione as colunas user_id e granted_at. Se o seu badge tiver como alvo publicações, você também deverá selecionar uma coluna chamada post_id.

:information_source: Se essas colunas não estiverem diretamente disponíveis, você pode apelidá-las (alias). Por exemplo: u.id as user_id

Restrições para badges acionados

Como os badges acionados podem ser executados uma vez por minuto, você precisa fornecer mais “dicas” (hinting) na definição do badge. Não é suficiente retornar o conjunto completo de badges; você também deve fornecer dicas sobre como executar o badge em um subconjunto.

Gatilhos baseados no usuário (User-based triggers)

Se o seu gatilho for baseado no usuário, forneça uma cláusula sobre como filtrá-lo com base em :user_ids.

Gatilhos baseados na publicação (Post-based triggers)

Se o seu gatilho for baseado na publicação, forneça informações sobre como acioná-lo com base em :post_ids.

:exclamation: Lembre-se de que uma retroalimentação completa (full backfill) é executada diariamente de qualquer maneira, portanto, você deve considerar isso e incluir o tratamento do parâmetro :backfill.

Sua consulta de badge acionado sempre incluirá o parâmetro :backfill e o parâmetro :post_ids ou :user_ids.

Exemplo de consulta de badge acionado

Aqui está um exemplo de um badge acionado “quando um usuário age em uma publicação”. Neste caso, as aplicações “delta” receberão o parâmetro :post_ids:

SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.like_count >= 25
AND (:backfill OR p.id IN (:post_ids) )

A cláusula (:backfill OR p.id IN (:post_ids) ) permite a filtragem dos resultados. Quando o trabalho diário é executado, :backfill é verdadeiro, então o conjunto inteiro é verificado. Quando os trabalhos delta são executados, :backfill é falso e :post_ids é definido.

Por que a sugestão manual é necessária

A consulta de concessão de badge executa sua consulta de badge em uma “subconsulta”. Muitas vezes, o otimizador do PostgreSQL tem dificuldades ao verificar o conjunto completo quando a cláusula está na consulta principal. Embora possa lidar bem com consultas triviais, pode falhar com agregações mais complexas.

Para evitar problemas potenciais, essa restrição foi adicionada, permitindo que você aplique filtros no local mais apropriado.

Precisa de ajuda?

Se você está com dificuldades para escrever uma consulta de badge, poste uma pergunta em Support - descreva o que você está tentando alcançar e inclua seu trabalho em andamento. A comunidade tentará ajudar.

:information_source: Os gatilhos de badge podem ser complexos. Muitas vezes, as atualizações “diárias” são suficientes, e você pode ignorar os aspectos mais intrincados das consultas acionadas.

38 curtidas
Creating Custom Badges and Triggers
Creating custom badge with custom rules
How to grant badges using Automation?
Two custom badges on moderation
Pre approval email in the dashboard waiting to go
Help me get Discourse set up for the first time
Grant badges based on gender profile field?
Badges for X Number of Solutions Created?
Discourse-Math badge
Assigned a badge based on multiple badge assignment
Problem testing Badge Query from Data Explorer
Understanding and using badges
First Post badge
Grant Badge when user visits link
Custom Icons for admins and moderators (and other groups)
A silver badge for _each_ 5 bronze badges
Automatically set active members to follow a category
A silver badge for _each_ 5 bronze badges
A silver badge for _each_ 5 bronze badges
About Badges
What is the 'backfill`?
Query to create some groups based on activity
Are badges customizable?
Badge query working in explorer but not in badge SQL?
Badges for posting
Plugin or other option to require a post and a like?
Gamification beyond Leaderboard
Bulk Award a badge to a set of users
What does admin_js.admin.badges.trigger_type.user_change mean in Discourse?
Grant Custom Badge Upon Reading ToS
Set badges to be auto granted?
Access to category after 10 posts (automatic group membership)
Add badge for adding profile picture
How do you assign a badge automatically as soon as someone is added to a group?
Moderator - Badges, Stars, etc. - Positive Feedback?
Hidden Settings on Discourse Hosted Sites
Require LinkedIn or GitHub account to advance from TL0 to TL1. Possible?
Need some Help with my Triggered Custom Badge Query
Exclude certain categories from the Trust Levels
How does Meta handle the bug reporter badge?
Restricting users to join any one private group
An automatic group of group owners
Is it possible to have a badge for 100 solutions?
Grant a badge for all members of a group
Can I change the threshold of the Solved badges?
Grant badges through Automation
What is the 'backfill`?