Skip to content

Instantly share code, notes, and snippets.

@FaltoGH
Created September 6, 2025 08:25
Show Gist options
  • Save FaltoGH/1706d18db99ec7e5ee7706395abe7a1a to your computer and use it in GitHub Desktop.
Save FaltoGH/1706d18db99ec7e5ee7706395abe7a1a to your computer and use it in GitHub Desktop.
Semi-automatic Dcinside lottery submitter.
function parseIntComma(x){
// 쉼표가 섞인 수 문자열을 정수로 변환한다.
return parseInt(x.replaceAll(",",""));
}
async function getJson1(){
// 최근 14일 동안의 게시물, 댓글 수를 받아온다.
let response1=await fetch("https://gall.dcinside.com/ajax/lottery_ajax/get_statistics", {
"headers": {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "en-US,en;q=0.9,ko;q=0.8",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"sec-ch-ua": "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest"
},
"referrer": location.href, // 현재 페이지의 주소
"body": "ci_t="+get_cookie('ci_c'), // CSRF 토큰
"method": "POST",
"mode": "cors",
"credentials": "include"
});
let json1=await response1.json();
console.log("got json: ",json1);
return json1;
}
async function submit1(post,cmt){
// 텍스트박스에 post, cmt를 채우고 등록 버튼을 누른다.
console.log("submitting "+post+" and "+cmt+" ...");
await sleep(1);
document.getElementById("ltrpost").value=post;
await sleep(1);
document.getElementById("ltrcmt").value=cmt;
await sleep(1);
document.getElementsByClassName("btn_blue small repley_add btn_svc")[0].click();
await sleep(1);
console.log("submit1() done.");
}
function getRandomIntInclusive(min, max) {
// min 이상 max 이하의 정수를 반환한다.
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // 최댓값도 포함, 최솟값도 포함
}
function d20(){
// 1 이상 20 이하의 정수를 반환한다.
return getRandomIntInclusive(1,20);
}
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
async function generate1(){
let ret=[];
let json1=await getJson1();
let N=json1.length;
// 게시물과 댓글 수의 평균을 구한다.
let article1=0;
let reply1=0;
for(let i=0;i<N;i++){
article1+=parseIntComma(json1[i]["article"]);
reply1+=parseIntComma(json1[i]["reply"]);
}
article1/=N;
reply1/=N;
// 실수를 정수로 변환
article1=Math.floor(article1);
reply1=Math.floor(reply1);
article1+=d20();
reply1+=d20();
for(let i=0;i<10;i++){
ret.push([article1+d20(),reply1+d20()]);
// 중복 수 응모 방지
article1+=20;
reply1+=20;
}
return ret;
}
async function submitAll(generated1){
for(let i=0;i<generated1.length;i++){
// 도배로 인한 차단을 방지하기 위해 sleep
await sleep(1212+121*d20());
await submit1(generated1[i][0],generated1[i][1]);
await sleep(1212+121*d20());
}
console.log("submitAll() done.");
}
let generated1=await generate1();
console.log("generated: ",generated1);
await submitAll(generated1);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment