Skip to main content
Deno 2 is finally here 🎉️
Learn more

dutkyo.ts

엔트리 봇을 쉽게 만들 수 있는 deno 라이브러리입니다.

시작하기

deno를 사용하기 위해 deno를 설치하세요.

Mac, Linux curl -fsSL https://deno.land/install.sh | sh
Windows(PowerShell) iwr https://deno.land/install.ps1 -useb | iex

만약 설치가 되지 않는다면 관리자 권한으로 실행하세요.

코드를 실행할 폴더를 만드세요.
vscode 사용자라면 deno 확장을 설치하고, .vscode 폴더를 추가하세요.
.vscode 폴더 안에 settings.json 파일을 추가하고 다음을 입력하고 저장합니다.

{
  "deno.enable": true,
  "deno.lint": true,
  "deno.unstable": true
}

이제, 코드를 작성할 .ts 파일을 만드세요.

import { Client } from "https://deno.land/x/dutkyo/mod.ts";
const bot = new Client();

bot.on("ready", (d) => {
  console.log(`hello, ${d.bot.nickname}`);
});

bot.on("message", (d) => {
  if (d.content == "!hello") {
    d.reply(`hello, ${d.writer.nickname}`);
  }
});

bot.login("id", "password");

봇의 id와 password를 입력하고, 실행하세요.
deno run --allow-all filename.ts

이제 dutkyo.ts를 사용하기 위한 모든 준비가 끝났습니다. 축하드려요!

메시지를 보낸 유저의 정보를 확인하기

메시지를 보낸 사람의 작품 목록을 확인하고 싶으신가요?
dutkyo.ts는 엔트리 api에 간편하게 접근할 수 있는 함수를 제공합니다.

d.user.getprojectlist(d.writer.id).then((list) => {
  console.log(list);
});

이렇게 하면, 메시지를 보낸 사람의 작품 리스트를 array 형태로 간단하게 확인할 수 있습니다.
dutkyo.ts에서 제공하는 값들은 다음과 같습니다:

id
name
user {
  id
  username
  nickname
  profileImage {
    id
    filename
    imageType
  }
}
thumb
isopen
isPracticalCourse
category
categoryCode
created
updated
special
isForLecture
isForStudy
isForSubmit
hashId
complexity
staffPicked
ranked
visit
likeCnt
comment

메시지를 보낸 유저의 누적 조회수, 좋아요, 댓글을 보고 싶다고요?

d.user.getprojectlist(d.writer.id).then((list) => {
  let totalLikeCnt: number = 0;
  let totalVisitCnt: number = 0;
  let totalCommentCnt: number = 0;
  for (const project of list) {
    totalLikeCnt += project.likeCnt;
    totalVisitCnt += project.visit;
    totalCommentCnt += project.comment;
  }
  d.reply(`❤️ ${totalLikeCnt}, 💬 ${totalCommentCnt}, 👁️ ${totalVisitCnt}`);
});

10줄로 짜증나고 귀찮은 graphql 쿼리 없이 간단하게 누적 조회수, 좋아요, 댓글을 출력할 수 있습니다.

글 작성

최근엔 글 작성 봇이 많이 사라졌지만
상황에 따라서 (예를 들어 홍보 매크로) 글 작성이 필요할 수 있습니다.
편리하게도 ready 이벤트가 반환하는 값에 글을 작성할 수 있는 함수가 있습니다.

bot.on("ready", (d) => {
  d.discuss.write("아주 멋진 작품: https://example.com/");
  setInterval(() => {
    d.discuss.write("아주 멋진 작품: https://example.com/");
  }, 600000);
});

이렇게 하면 불규칙적이고 짜증나게 작품 홍보를 할 필요가 없습니다.

username, nickname으로 유저 찾기

nickname으로 userid를 찾고 싶다고요? 가능합니다!

d.user.finduserbynickname("엔트리").then((d) => {
  console.log(d);
  //565fdb0d1328dea8087009b5
});
d.user.finduserbyusername("entry").then((d) => {
  console.log(d);
  //53eef21dce8dd2c54f0cb721
});

이제 직접 유저의 id를 찾을 필요가 없습니다.