Greasy Fork

Greasy Fork is available in English.

Kook Auto Kick

通过按钮触发踢出七天未活跃成员

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Kook Auto Kick
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  通过按钮触发踢出七天未活跃成员
// @match        *://www.kookapp.cn/*
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    let guildId = ""

    setInterval(() => {
        try{
            guildId = window.location.pathname.match(/.*channels\/(\d+).*/)[1]
        }catch(e){
            guildId = ""
        }
        if (!document.querySelector('.buttonbuttonbuttonbutton')) {
            add();
        }
    }, 1000);

    const add = () => {
        const GET_URL = `https://www.kookapp.cn/api/v2/guilds/users-v2/${guildId}?s=&r=0&p=1&active_time=0`;
        const POST_URL = 'https://www.kookapp.cn/api/v2/guilds/batch-kickout';

        // 创建操作按钮
        const button = document.createElement('button');
        button.textContent = '踢出七天未活跃成员';
        button.style.position = 'fixed';
        button.style.top = '20px';
        button.style.right = '20px';
        button.style.padding = '10px 20px';
        button.style.backgroundColor = '#ff4444';
        button.style.color = 'white';
        button.style.border = 'none';
        button.style.cursor = 'pointer';
        button.style.borderRadius = '4px';
        button.style.fontWeight = 'bold';
        button.style.zIndex = '999999';
        button.style['font-family'] = 'Arial, sans-serif';
        button.style.transition = 'all 0.3s';
        button.className = 'buttonbuttonbuttonbutton';

        document.body.appendChild(button);

        // 按钮点击事件处理
        button.addEventListener('click', async () => {
            button.disabled = true;
            button.textContent = '执行中...';

            let total = 0

            while(true && total < 500){
                try {
                    // 发送GET请求获取用户数据
                    const getResponse = await fetch(GET_URL, {
                        headers: { 'Cookie': document.cookie },
                        method: 'GET'
                    });

                    if (!getResponse.ok) {
                        throw new Error(`获取用户数据失败: ${getResponse.status}`);
                    }

                    const data = await getResponse.json();
                    const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
                    const targetIds = data.data
                    .filter(user =>
                            user.active_time <= sevenDaysAgo &&
                            user.joined_at <= sevenDaysAgo
                           )
                    .map(user => user.id);

                    if (targetIds.length === 0) {
                        throw new Error('没有需要踢出的用户');
                    }

                    // 发送POST请求执行踢出
                    const postResponse = await fetch(POST_URL, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                            'Cookie': document.cookie
                        },
                        body: JSON.stringify({ guild_id:guildId, user_ids: targetIds })
                    });

                    if (!postResponse.ok) {
                        throw new Error(`踢出失败: ${postResponse.status}`);
                    }
                    total = total + targetIds.length
                } catch (error) {
                    console.error('操作失败:', error);
                    alert(`操作失败: ${error.message}`);
                    break
                }
            }
            button.disabled = false;
            button.textContent = '踢出七天未活跃成员';
            alert(`成功踢出 ${total} 名用户`);
        });
    };
})();