In this categoryIntegrations · 69
- How to Get a YouTube Data API Key and OAuth CredentialsStart
- How to Upload a Video to YouTube with Python and the Data API
- How to Generate YouTube Video Scripts with the Claude API
- How to Generate YouTube Titles and Descriptions with ChatGPT's API
- How to Auto-Generate Captions with Whisper and Upload an SRT
- How to Upload Videos to YouTube Automatically with Zapier
- How to Build a Make Scenario That Turns Topics into Draft Scripts
- How to Schedule YouTube Uploads with the publishAt Timestamp
- How to Auto-Draft Replies to YouTube Comments with Claude
- How to Bulk Update Titles and Tags Across Many Videos via API
- How to Build an End-to-End Script-to-Upload Pipeline with Claude and the API
- How to create a Telegram bot with BotFather and get your token
- How to find your Telegram chat ID for sending messages
- How to auto-post to a Telegram channel from a script
- How to make a Telegram bot reply with AI answers
- How to Build a Discord Bot That Auto-Replies With AI
- How to Build a Slack AI Bot With Bolt for Node
- How to add slash commands and a menu to a Telegram bot
- How to Auto-Reply on WhatsApp With AI Using Twilio
- How to switch a Telegram bot from polling to webhooks
- How to Add an /ask Slash Command That Calls AI in Discord
- How to schedule Telegram channel posts with cron
- How to add inline buttons and handle taps in a Telegram bot
- How to send photos, documents, and files with a Telegram bot
- How to Give Your Chat Bot Memory of the Conversation
- How to auto-post your blog RSS feed to a Telegram channel
- How to Make a Slack Command That Summarizes a Thread With AI
- How to build an AI moderator bot for a Telegram group
- How to Connect AI to WhatsApp With the Meta Cloud API
- How to Connect AI to Chat Apps Without Code Using n8n
- How to Build an AI Auto-Reply Viber Bot
- How to Stream AI Replies Live in Discord by Editing Messages
- How to Send an AI Welcome Message When Someone Opens Your Viber Bot
- How to Connect Notion to Claude Using the MCP Connector
- How to connect Gmail to ChatGPT so it drafts replies for you
- How to Add a Gemini AI Formula to Google Sheets With Apps Script
- How to use Gemini inside Gmail to summarize and reply to threads
- How to Create a Notion Internal Integration Token for AI Scripts
- How to connect Google Calendar to ChatGPT to schedule events by chat
- How to Classify Spreadsheet Rows With ChatGPT in Google Sheets
- How to Connect Google Drive to Claude and Search Your Files
- How to Use Gemini in the Google Docs Side Panel to Draft and Edit
- How to connect Outlook to AI with Power Automate to summarize emails
- How to Build a Notion to Google Sheets AI Pipeline With Zapier
- How to give Claude access to your Gmail with an MCP server
- How to Auto-Summarize Notion Meeting Notes With an AI Script
- How to auto-label and prioritize Gmail with AI using Apps Script
- How to Generate a Full Google Doc From an AI Prompt With Apps Script
- How to turn AI meeting notes into Outlook calendar follow-ups
- How to Extract and Summarize a Drive PDF With AI Using Apps Script
- How to build an AI scheduling assistant that books meetings via email
- How to Translate a Google Sheets Column With an AI Custom Function
- How to sync AI-extracted tasks from email to your calendar with n8n
- How to use AI to triage and batch-reply to your inbox each morning
- How to securely give an AI tool access to your email account
- How to Send a Zapier Webhook to OpenAI and Get a Summary Back
- How to Trigger an n8n AI Agent from a Webhook Node
- How to Classify Incoming Webhook Data with Claude in Make
- How to Auto-Draft Email Replies from a Form with Zapier and GPT
- How to Connect a Webhook to Receive Events
- How to Verify Webhook Signatures Before Calling an AI Model
- How to Give a Zapier AI Webhook Simple Conversation Memory
- How to Describe Uploaded Images with a Make Webhook and GPT Vision
- How to Add an Error Handler and Retry to an AI Webhook in Make
- How to Answer a Webhook Instantly While AI Runs in the Background in n8n
- How to Build a Slack Slash Command AI Bot with an n8n Webhook
- How to Cap AI Spend on a Webhook Across Zapier, Make, and n8n
- How to Pin an API Version for a Stable Integration
How to build an AI moderator bot for a Telegram group
Let a bot read group messages, classify them with an LLM, and remove or warn on rule-breaking content.
A moderator bot watches a group, sends each message to a model that judges whether it breaks the rules, and acts on the verdict. This guide builds one that warns on borderline content and deletes clear violations. It needs careful permissions and a conservative prompt to avoid false positives.
What you need
- A bot that is an admin of the group with Delete Messages and Ban Users rights
- An LLM API key (Anthropic Claude here)
- Privacy Mode turned off so the bot sees all messages
- Node 18 or newer
Step 1: Disable Privacy Mode
By default a bot only sees commands and replies in groups. To moderate everything, open BotFather, run /setprivacy, pick the bot, and choose Disable. Then remove and re-add the bot so the change takes effect.
Step 2: Classify each message
Ask the model for a strict, machine-readable verdict. Forcing JSON output keeps the parsing reliable and the actions predictable.
import TelegramBot from "node-telegram-bot-api";
import Anthropic from "@anthropic-ai/sdk";
const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN, {
polling: true,
});
const ai = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const RULES =
"Rules: no spam links, no insults, no NSFW. " +
"Reply ONLY as JSON: {\"verdict\":\"ok|warn|remove\",\"reason\":\"...\"}";
async function classify(text) {
const r = await ai.messages.create({
model: "claude-opus-4-5",
max_tokens: 150,
system: RULES,
messages: [{ role: "user", content: text }],
});
const raw = r.content.find((b) => b.type === "text")?.text ?? "{}";
try {
return JSON.parse(raw);
} catch {
return { verdict: "ok", reason: "unparseable" };
}
}Step 3: Act on the verdict
Wire the classifier to the message event. Warnings get a public reply, removals delete the offending message. Always be conservative: when unsure, do nothing.
bot.on("message", async (msg) => {
if (!msg.text || msg.chat.type === "private") return;
const { verdict, reason } = await classify(msg.text);
if (verdict === "warn") {
await bot.sendMessage(
msg.chat.id,
`Heads up: ${reason}. Please keep it friendly.`,
{ reply_to_message_id: msg.message_id }
);
} else if (verdict === "remove") {
await bot.deleteMessage(msg.chat.id, msg.message_id);
await bot.sendMessage(
msg.chat.id,
"A message was removed for breaking the rules."
);
}
});Result
The bot now reads the group, judges each message against your rules, and takes graded action. With logging and a conservative prompt it handles the obvious cases so your human mods focus on the gray ones.
Watch related tutorials
24:16
32:08
21:45
12:00
18:00
15:00New guides in your inbox
Fresh step-by-step how-to guides as we publish them. One email a week, no more.