Accepting the guidelines can be accomplished using the policy plugin: Discourse Policy
You’d add an “I accept these guidelines” policy at the bottom of the relevant guidelines topic, and when the policy is accepted it can add users to a group you create, for example: accepted_guidelines
You can then set up categories so that only members of the accepted_guidelines group can post there.
Making an introduction post is a little trickier… I don’t think we have a way to control group membership based on where someone’s posted. One workaround I can think of is using Discourse Automation.
We have a script there called User Group Membership through Badge — you could require people to include an emoji in their introduction post… which would then award the “first emoji” badge and have the automation add them to a posted_introduction group.
It’s a little more advanced, but you could create a special badge for posting an introduction, and then set up the automation to use that for group membership. Some more info here: Creating triggered custom badge queries
A badge query for a post in a specific topic would look something like this:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
WHERE p.topic_id = TOPIC-ID-HERE
AND (:backfill OR p.id IN (:post_ids))
GROUP BY p.user_id