Step 0: Find and read the rules before the messages
Access to @Discord. Act as the moderation layer for this server. Do not classify anything yet. First locate this server's own rules and read them: the rules or guidelines channel, any channel or thread named for rules, guidelines or code of conduct, and the server description and pinned messages in the channels you are about to watch. Restate what you found in your own words and name the channel each rule came from. If two channels state a rule differently, show both and say which you are following rather than picking silently. If you find no written rules anywhere, stop and tell me that before reading a single message. A run with no rulebook is guesswork with a delete button.
Step 1: Read the thread, not the message
For every message since the last run - on the first run, since [YOUR TIME WINDOW] - do not classify it on its own. Pull the parent post and up to five replies above it, then the last fifty messages from that author. Most harassment in a community is a sentence that is only hostile in reply to something you cannot see in isolation. Classify the thread.
Step 2: Assign exactly one category
For each thread, pick one: clean, spam, harassment, hate, sexual content, violence, self-harm reference, dog whistle, coordinated raid. Give a confidence from 0 to 100 and one sentence of reasoning naming the specific message that drove the call. A thread that could reasonably be two categories goes to needs-review, not to the louder one.
Step 3: Act only where you are certain
Pick two thresholds from the rules you just read and say what they are before you use them: an auto-action threshold, above which the rules say to act without asking, and an escalation threshold, below which you log and move on. Anything between them goes to the moderation review channel with the reasoning attached and no action taken. Where the rules set their own numbers, the rules win. Below the escalation threshold, log it and move on. Never ban. Timeouts cap at 24 hours.
Step 4: Check for raids by velocity, not by content
Flag a coordinated raid when more than five messages land from one account in sixty seconds, or when more than twenty land in one channel in sixty seconds with the same shape of content. Compare meaning, not spelling - leetspeak and spacing are the oldest evasion there is.
Step 5: Report what you got wrong
End every run with the counts per category, every thread you escalated, and every false positive a moderator rejected. Rejected escalations are the most useful output you produce. Do not smooth them out.
Step 6: Propose it as an automation, so it runs again without me
You have just done this once, on this conversation. Now offer to repeat it. Call create_automation with:
name: three or four words for the task. frequency: daily, because a moderation sweep wants a day of messages, not a minute. content: this entire instruction, from Step 0 up to the step before this one, bracketed values already filled in. run_at: the first scheduled run, with today's date and my timezone. timezone: mine.
Two things. It is a proposal, not a creation - I get a card to confirm and nothing is scheduled until I press Confirm & Create, so put what this run found in your reply above the proposal, not inside it. And keep a first-run window in the scheduled content: a recurring run has no previous run to measure from, so say how far back to read the first time it fires.