이 글은 탈중앙형 SNS, **미스키Misskey** 와 구글 시트(+ GAS)를 이용해 쉽게 캐릭터 대사 자동봇을 만드는 법에 대한 설명입니다
<aside> ❗ 코딩 몰라도 됩니다 간단하고 쉽습니다
대사 DB가 있다면 5분 정도 걸립니다
</aside>
Misskey를 포함한 탈중앙형 SNS (ActivePub를 사용하는 마스토돈 등의 SNS)는 대부분 개인이 사비로 서버(인스턴스)를 유지하고, 운영합니다. 악의로 관리자에게 피해가 갈 만한 행동은 하지 말아 주세요.
개별 인스턴스마다 조금 다르지만, 기본적으로 자동화 계정(봇)은 전체 공개(로컬 타임라인과 연합 타임라인에 보임) 설정으로 노트 작성을 하지 말 것을 권장합니다. 아래 코드로 자동 작성되는 노트의 공개 설정은 홈(로컬/연합타임라인에 올라가지 않음)입니다.
인스턴스 목록에서 적당한 인스턴스를 선택해 가입합니다.
인증 등의 절차를 마치고 가입이 완료되면
설정-API 주소: {미스키 주소}/settings/api
에서
액세스 토큰의 이름과 권한을 설정해 액세스 토큰을 생성합니다.
노트 작성/삭제 권한은 반드시 포함되어 있어야 합니다.
토큰은 영문+숫자로 이루어져 있습니다. (예시: VXDV7I2JkgTMkJhhiTTYWEf0QPu8Iu0Y)
생성된 토큰을 복사해 둡니다. 이를 분실하면 액세스 토큰을 삭제 후 다시 만들어야 합니다. (키를 다시 볼 수 없습니다.)
언제든지 토큰을 삭제할 수 있습니다. 키가 유출된 것 같다면 반드시 삭제합시다.
구글 시트에 출력할 대사를 작성합니다.
이후의 코드는 아래와 같이,
해당 문서의 시트명이 ‘data’인 시트, A1부터 대사를 입력했을 때를 기준으로 작성되어 있습니다.
코드에 손대고 싶지 않다면, 이 점을 반드시 지켜주세요!
확장 프로그램-Apps Script 에서,
입력되어 있는 코드를 모두 지우고 다음을 붙여넣습니다.
{엑세스 토큰} 에는 위에서 복사해둔 엑세스 토큰을,
{Misskey 인스턴스 기본 주소} 에는 만든 계정의 인스턴스 기본 주소를 입력합니다.
예시: Misskey.io 인스턴스의 경우, <https://misskey.io> 를 입력
const accessToken = "{엑세스 토큰}";
function postToMisskey() {
const apiUrl = "{Misskey 인스턴스 기본 주소}/api/notes/create";
const options = {
'method': 'post',
'contentType': 'application/json',
'headers': {
'Authorization': 'Bearer ' + accessToken,
},
'payload': JSON.stringify({
'i' : accessToken,
'visibility' : 'home',
'text': noteContent()
})
};
const response = UrlFetchApp.fetch(apiUrl, options);
// Check the response status code
if (response.getResponseCode() == 200) {
console.log("성공! : 응답" + response);
} else {
console.error("Failed to create note. Error code: " + response.getResponseCode());
}
}
function noteContent(){
const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
const dataSheet = sheets.find((sheet)=>sheet.getName() == 'data');
const startRowNumber = 1;
const endRowNumber = dataSheet.getLastRow();
const rowNum = Math.ceil(Math.random()*endRowNumber)+startRowNumber;
var contentText = dataSheet.getRange(rowNum,1).getValue().toString();
console.log(contentText);
return contentText;
}
왼쪽 메뉴 중 트리거 ⏰ 메뉴에서 트리거를 추가하고 다음과 같이 설정합니다.
실행할 함수 선택 | postToMisskey |
---|---|
실행할 배포 선택 | Head(기본값) |
이벤트 소스 선택 | 시간 기반 |
트리거 기반 시간 유형 선택 | 시간 단위 타이머 |
시간 간격 선택 | (원하는 간격으로 설정) |
설정 후 한 시간 안에 랜덤하게 미스키 노트가 작성될 거예요.
문의는 @[email protected] 혹은 디스코드 headdrop 낙차#4187