미디어위키:Gadget-SysopPresentCheck.js: 두 판 사이의 차이

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
잔글편집 요약 없음
(Promise.all로 출석 체크 + 캐시 purge 순차 수행)
 
(같은 사용자의 중간 판 8개는 보이지 않습니다)
19번째 줄: 19번째 줄:
var currentcheck = new Date(Number(result[mw.user.getName()]));
var currentcheck = new Date(Number(result[mw.user.getName()]));
if (date - currentcheck < 43200000 ) {
if (date - currentcheck < 43200000 ) {
console.log(currentcheck.toLocalDateString()+"에 이미 출석체크하였습니다.")
console.log(currentcheck.toLocaleDateString()+"에 이미 출석체크하였습니다.");
return; // already checked within 12 hours
return; // already checked within 12 hours
}
}
result[mw.user.getName()] = date;
result[mw.user.getName()] = date;
var now = new Date(date);
// 다시 문자열로 만든 다음 mw.Api로 편집
// 다시 문자열로 만든 다음 mw.Api로 편집
var text = JSON.stringify(result);
var text = JSON.stringify(result);
var mw_api = new mw.Api();
var mw_api = new mw.Api();
mw_api.edit('리버티게임:관리단/출석체크',  function ( revision ) {
Promise.all([mw_api.edit('리버티게임:관리단/출석체크',  function ( revision ) {
        return {
        return {
            text: text,
            text: text,
            summary: mw.user.getName() + ' 출석',
            summary: mw.user.getName() +' ' + now.toLocaleDateString() + '에 출석',
            contentmodel: 'json',
            contentmodel: 'json',
            minor: true
            minor: true
        };
        };
}).then(function(result){
}), mw_api.postWithToken("csrf", {
console.log(currentcheck.toLocalDateString() + " 출석체크 완료!");
    action: 'purge',
    title: '리버티게임:관리단/출석체크'
}
)]).then(function(result){
console.log(now.toLocaleDateString() + " 출석체크 완료!");
}).catch(function(e){
console.log("출석 체크 과정에 문제가 생겼습니다. 시스템 관리자에게 문의하세요.");
});
});
});
});
}
}
$(runJobs);
$(runJobs);

2024년 10월 16일 (수) 14:10 기준 최신판

/** 관리단 출석체크 시스템 
 * [[리버티게임:관리단/출석체크]]와 동기화됨
 * 작성자: [[사용자:Senouis]]
**/
function runJobs () {
	if (mw.config.get("wgPageName") != "특수:최근바뀜") return;
	console.log("최근바뀜 진입 확인, 출첵 시스템 작동!");
	fetch("https://dev.libertygame.work/index.php/%EB%A6%AC%EB%B2%84%ED%8B%B0%EA%B2%8C%EC%9E%84:%EA%B4%80%EB%A6%AC%EB%8B%A8/%EC%B6%9C%EC%84%9D%EC%B2%B4%ED%81%AC?action=raw")
	.then(function (result){
		return result.json();
	}).then(function(result){
		console.log(result);
		// 자기 데이터가 있으면 변경, 아니면 종료
		if (result[mw.user.getName()] == undefined) {
			console.log("사용자가 '리버티게임:관리단/출석체크' 문서에 등록되지 않았습니다!");
			return;
		}
		var date = Date.now();
		var currentcheck = new Date(Number(result[mw.user.getName()]));
		if (date - currentcheck < 43200000 ) {
			console.log(currentcheck.toLocaleDateString()+"에 이미 출석체크하였습니다.");
			return; // already checked within 12 hours
		}
		result[mw.user.getName()] = date;
		var now = new Date(date);
		// 다시 문자열로 만든 다음 mw.Api로 편집
		var text = JSON.stringify(result);
		var mw_api = new mw.Api();
		Promise.all([mw_api.edit('리버티게임:관리단/출석체크',  function ( revision ) {
	        return {
	            text: text,
	            summary: mw.user.getName() +' ' + now.toLocaleDateString() + '에 출석',
	            contentmodel: 'json',
	            minor: true
	        };
		}), mw_api.postWithToken("csrf", {
			    action: 'purge',
			    title: '리버티게임:관리단/출석체크'
			}
		)]).then(function(result){
			console.log(now.toLocaleDateString() + " 출석체크 완료!");
		}).catch(function(e){
			console.log("출석 체크 과정에 문제가 생겼습니다. 시스템 관리자에게 문의하세요.");
		});
	});
}
$(runJobs);