Skip to content

Instantly share code, notes, and snippets.

@moesoha
Last active September 10, 2024 20:16
Show Gist options
  • Save moesoha/feb6041b85cc7a9a960ff333d5220677 to your computer and use it in GitHub Desktop.
Save moesoha/feb6041b85cc7a9a960ff333d5220677 to your computer and use it in GitHub Desktop.
Auto kick any joining users from Telegram group (deployed on Cloudflare Worker)
addEventListener('fetch', event => event.respondWith(handleRequest(event.request)));
// Add environment variable `TGBOT_TOKEN` via Worker-Settings
async function requestTelegramBotAPI(method, payload) {
return fetch(`https://api.telegram.org/bot${TGBOT_TOKEN}/${method}`, {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8"
},
body: !payload ? undefined : JSON.stringify(payload)
});
}
// Add environment variable `MANAGE_TOKEN` via Worker-Settings
const ManageToken = typeof MANAGE_TOKEN !== 'undefined' ? MANAGE_TOKEN : null;
const RequestHandlers = {
async '/tgWebhookDelete'(_, url) {
if(!ManageToken || url.search !== `?${ManageToken}`) {
return new Response('Access Denied', {status: 403});
}
const result = await requestTelegramBotAPI('deleteWebhook');
return new Response(await result.text());
},
async '/tgWebhookSet'(_, url) {
if(!ManageToken || url.search !== `?${ManageToken}`) {
return new Response('Access Denied', {status: 403});
}
const result = await requestTelegramBotAPI('setWebhook', {
url: `https://${url.host}/tgPush`,
allowed_updates: ['message']
});
return new Response(await result.text());
},
async '/tgPush'(request) {
if(request.method !== "POST") {
return new Response('Bad Request', {status: 400});
}
const body = await request.json().catch(_ => ({}));
const message = body.message;
if(!message) {
return;
}
if(message.new_chat_members) {
for(const i in message.new_chat_members) {
const u = message.new_chat_members[i];
await requestTelegramBotAPI('banChatMember', {
chat_id: message.chat.id,
user_id: u.id,
until_date: Math.floor(new Date().getTime() / 1000) + 86400
});
}
}
if(message.left_chat_member || message.new_chat_members) {
await requestTelegramBotAPI('deleteMessage', {
chat_id: message.chat.id,
message_id: message.message_id
});
}
}
}
async function handleRequest(request) {
const url = new URL(request.url);
if(typeof RequestHandlers[url.pathname] !== 'function') {
return new Response('Not Found', {status: 404});
}
const response = await RequestHandlers[url.pathname](request, url);
return response || (new Response('WOW', {status: 200}));
}
@moesoha
Copy link
Author

moesoha commented Oct 3, 2020

我倒是忘了还要给 bot 加上管理员这一句了(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment