Reads each new post in your Discord community channel and forwards support questions, bug reports and ideas to the right channel.

UsesClaudeDiscord

Send community posts to the right channel

Whenever a new post appears in your main Discord community channel, the AI reads it and decides whether it is a support question, a bug report, a feature idea, ordinary chatter or unclear. Posts that need someone are forwarded to the channel that handles them: support questions to one, bug reports to another, feature ideas to a third.

What arrives in the destination channel carries the original context: the kind of post it is, who posted it, a link straight back to the message and what they said, so whoever picks it up can act at once. Ordinary chatter, and anything too short or ambiguous to call, is left in place rather than filed as something it might not be. Each post goes to at most one channel, posts the workflow routed itself are recognised and ignored, and a destination that is the watched channel is skipped instead of looping.

Before the first run you need a Discord server with a community channel to watch and one channel each for support, bugs and ideas.

DiscordDiscordWhen a new message is posted in a Discord channel. Save it as communityPost.When a new message is posted in a Discord channel. Save it as communityPost.
ValuesSet serverId to blank.Set serverId to blank.
ValuesSet supportChannelId to blank.Set supportChannelId to blank.
ValuesSet bugChannelId to blank.Set bugChannelId to blank.
ValuesSet ideaChannelId to blank.Set ideaChannelId to blank.
ValuesSet minimumMessageLength to 15.Set minimumMessageLength to 15.
ValuesSet messageText to blank.Set messageText to blank.
Decisions & LoopsIf a step below fails, save the error as contentErrorIf a step below fails, save the error as contentError
Try
TextTrim communityPost.content and save it as messageText.Trim communityPost.content and save it as messageText.
On error
ValuesChange messageText to blank.Change messageText to blank.
ValuesSet sourceChannelId to blank.Set sourceChannelId to blank.
Decisions & LoopsIf a step below fails, save the error as channelErrorIf a step below fails, save the error as channelError
Try
TextTrim communityPost.channel_id and save it as sourceChannelId.Trim communityPost.channel_id and save it as sourceChannelId.
On error
ValuesChange sourceChannelId to blank.Change sourceChannelId to blank.
ValuesSet messageId to blank.Set messageId to blank.
Decisions & LoopsIf a step below fails, save the error as messageIdErrorIf a step below fails, save the error as messageIdError
Try
TextTrim communityPost.message_id and save it as messageId.Trim communityPost.message_id and save it as messageId.
On error
ValuesChange messageId to blank.Change messageId to blank.
ValuesSet authorName to blank.Set authorName to blank.
Decisions & LoopsIf a step below fails, save the error as authorErrorIf a step below fails, save the error as authorError
Try
TextTrim communityPost.author_username and save it as authorName.Trim communityPost.author_username and save it as authorName.
On error
ValuesChange authorName to blank.Change authorName to blank.
Decisions & LoopsIf authorName is emptyIf authorName is empty
Yes
ValuesChange authorName to a community member.Change authorName to a community member.
No
No steps
ValuesSet routedMarker to Routed here from the community channel.Set routedMarker to Routed here from the community channel.
Decisions & LoopsIf messageText contains routedMarkerIf messageText contains routedMarker
Yes
Decisions & LoopsFinish the run: This post was routed here by this workflow, so it was left alone rather than routed a second time.Finish the run: This post was routed here by this workflow, so it was left alone rather than routed a second time.
No
No steps
Decisions & LoopsIf the length of messageText is less than minimumMessageLength multiplied by 1If the length of messageText is less than minimumMessageLength multiplied by 1
Yes
Decisions & LoopsFinish the run: This post is too short to be a support question, a bug report or an idea, so it was left where it is.Finish the run: This post is too short to be a support question, a bug report or an idea, so it was left where it is.
No
No steps
ValuesSet classifyRules to:Set classifyRules to:You sort one message from a community chat channel into exactly one category. support - the person is asking for help using the product, or asking a question they expect an answer to bug - the person is reporting something broken, failing, or behaving wrongly idea - the person is suggesting a feature, a change, or an improvement chatter - conversation, greetings, jokes, thanks, opinions, plans, or anything else that needs no action from the team unclear - you cannot tell which of the other four it is Most messages in a community channel are chatter. Answer chatter unless the message clearly...
ValuesSet classifyPrompt to classifyRulesSet classifyPrompt to classifyRules Message from authorName: messageText.
ClaudeClaudeAsk Claude: classifyPrompt. Save it as classification.Ask Claude: classifyPrompt. Save it as classification. Maximum response length: 16
ValuesSet verdict to unclear.Set verdict to unclear.
Decisions & LoopsIf a step below fails, save the error as verdictErrorIf a step below fails, save the error as verdictError
Try
TextMake classification.response_text lowercase and save it as verdict.Make classification.response_text lowercase and save it as verdict.
On error
ValuesChange verdict to unclear.Change verdict to unclear.
ValuesSet destinationChannelId to blank.Set destinationChannelId to blank.
ValuesSet routeLabel to blank.Set routeLabel to blank.
Decisions & LoopsIf verdict is supportIf verdict is support
Yes
ValuesChange destinationChannelId to supportChannelId.Change destinationChannelId to supportChannelId.
ValuesChange routeLabel to support question.Change routeLabel to support question.
Else if @verdict is "bug"
ValuesChange destinationChannelId to bugChannelId.Change destinationChannelId to bugChannelId.
ValuesChange routeLabel to bug report.Change routeLabel to bug report.
Else if @verdict is "idea"
ValuesChange destinationChannelId to ideaChannelId.Change destinationChannelId to ideaChannelId.
ValuesChange routeLabel to feature idea.Change routeLabel to feature idea.
Otherwise
No steps
Decisions & LoopsIf destinationChannelId is emptyIf destinationChannelId is empty
Yes
Decisions & LoopsFinish the run: Left where it is. This post reads as '@verdict truncated to 40 characters' rather than a support question, a bug report or a feature idea.Finish the run: Left where it is. This post reads as '@verdict truncated to 40 characters' rather than a support question, a bug report or a feature idea.
No
No steps
Decisions & LoopsIf destinationChannelId is sourceChannelIdIf destinationChannelId is sourceChannelId
Yes
Decisions & LoopsFinish the run: The channel for this kind of post is the channel being watched, so the post was left where it is rather than reposted into the same place.Finish the run: The channel for this kind of post is the channel being watched, so the post was left where it is rather than reposted into the same place.
No
No steps
ValuesSet postLink to (the original post could not be linked).Set postLink to (the original post could not be linked).
Decisions & LoopsIf sourceChannelId isn't empty and messageId isn't emptyIf sourceChannelId isn't empty and messageId isn't empty
Yes
ValuesChange postLink to https://discord.com/channels/@serverId/@sourceChannelId/@messageId.Change postLink to https://discord.com/channels/@serverId/@sourceChannelId/@messageId.
No
No steps
ValuesSet routedHeader to routedMarker - routeLabel.Set routedHeader to routedMarker - routeLabel.
ValuesSet routedFrom to Posted by authorName.Set routedFrom to Posted by authorName.
ValuesSet routedLink to Original post: postLink.Set routedLink to Original post: postLink.
TextShorten messageText to 1500 characters and save it as quotedText.Shorten messageText to 1500 characters and save it as quotedText.
ValuesSet routedBody to What they said:Set routedBody to What they said: quotedText.
ValuesSet routedTop to routedHeaderSet routedTop to routedHeader routedFrom routedLink.
ValuesSet routedMessage to routedTopSet routedMessage to routedTop routedBody.
DiscordDiscordSend a message to channel destinationChannelId.Send a message to channel destinationChannelId.routedMessage