Automatically Apply Badges to Group Members (in Hosted Version)

I’d like to automatically apply certain badges to users in certain groups. In searching the forum, it appears this may be possible via SQL queries, etc. We are on the hosted plan, so that is not possible. In talking with Discourse support, it appears a solution might be to make an app/script that uses the API to apply the badge to users in a groups. Two questions with this:

  1. Has someone done this already and would be willing to share?
  2. How would I implement an app/script that uses the API within the hosted forum setup?

It is possible on hosted plans, just let us know by emailing team@discourse.org and we can enabled them.

3 Likes

@sam Gotcha. What do you think is the better option though? Is it dangerous to begin making SQL queries from within the hosted platform? Makes me a bit nervous because there are other admins in our account and I worry if they accidentally do something in the currently hidden SQL area, it could seriously mess up our database.

If this is a once off I would just make the badges, let us know when you are done and then disable badge SQL.

Should be fine.

I think it makes sense to extend groups to, optionally, automatically grant a badge, so SQL is not involved.

You can also do this via the API but it would require running a regular job on your end.

1 Like

Is there a way to paste an example code that we can upload on our site?
Is user1 is added to groupX, award badgeX

Simple, nothing more to it

Here is the badge SQL, just replace your_group_name

select user_id, created_at granted_at, NULL post_id
from group_users
where group_id = (
  select g.id from groups g where g.name = 'your_group_name'
)
2 Likes

This will run via the scheduler correct? It is not triggered be the group add, but just runs daily and awards based on group membership?

In the badge settings you need to set the trigger to daily and select the option for revocation daily

2 Likes

@scombs, I had posted in another thread, and someone responded almost at the same time. The code is slightly different. Do you know what the difference would be?

main difference is: gu. vs g.

Other poster’s code:

SELECT gu.user_id, gu.created_at AS granted_at, null AS post_id
FROM group_users AS gu
WHERE gu.group_id = ( SELECT id FROM groups WHERE name ilike 'InsertTheTeamNameHere' )

is there any practical difference?
I’m a complete novice at this, and I just want to give the site owner the code to copy/paste so he doesn’t have to modify it at all.

btw, the group name we are using is: Confirmed_ST_User

1 Like

Not sure. I saw the other post too.

Here is the howto with the code

4 Likes

Should be the same as I explained there. :slight_smile:

5 Likes

thanks @scombs @pfaffman!! :grinning:

2 Likes

The code is identical, just some renaming, capitalization, and formatting differences.

2 Likes

I hope it’s alright to revive this topic to ask: Is there any likelihood of extending groups to include the option of automatically granting a badge, without SQL?

3 Likes

I’m just adding a note here to say that we can no longer enable custom badge SQL for sites that are on our Standard or Business hosting plans. You can still create custom badges, but you will need to either grant the badges manually, or grant them via the Discourse API. Details about granting a badge via the API can be found here: How to grant a custom badge through the API.

3 Likes