lovelyCARDINAL/WikiBots

View on GitHub
src/Blocked/removeUserrights.js

Summary

Maintainability
A
0 mins
Test Coverage
import moment from 'moment';
import { MediaWikiApi } from 'wiki-saikou';
import config from '../utils/config.js';

const api = new MediaWikiApi(config.zh.api, {
    headers: { 'user-agent': config.useragent },
});

(async () => {
    console.log(`Start time: ${new Date().toISOString()}`);
    await api.login(
        config.zh.abot.name,
        config.zh.abot.password,
        undefined,
        { retry: 25, noCache: true },
    ).then(console.log);

    const { data: { query: { allusers } } } = await api.post({
        list: 'allusers',
        augroup: 'manually-confirmed|extendedconfirmed',
        auprop: 'blockinfo',
        aulimit: 'max',
    });

    const time = moment().subtract(1, 'week');
    const userids = allusers
        .filter(({ blockexpiry, blockedtimestamp }) => blockexpiry === 'infinity' && moment(blockedtimestamp).isBefore(time))
        .map(({ userid }) => ![86212].includes(userid) && userid)
        .filter(Boolean);

    await Promise.all(userids.map(async (userid) => {
        await api.postWithToken('userrights', {
            action: 'userrights',
            userid,
            remove: 'goodeditor|honoredmaintainer|techeditor|manually-confirmed|file-maintainer|extendedconfirmed',
            reason: '无限期封禁',
            tags: 'Bot',
        }, {
            retry: 50,
            noCache: true,
        }).then(({ data }) => console.log(JSON.stringify(data)));
    }));

    console.log(`End time: ${new Date().toISOString()}`);
})();