1
0

docs: for new config

fix: json load problem
This commit is contained in:
オスカー、 2023-11-24 14:30:44 +09:00
parent b9ffca44c2
commit 4b9b163e92
No known key found for this signature in database
GPG Key ID: B1EFBBF5C93FF78F
3 changed files with 28 additions and 14 deletions

View File

@ -17,13 +17,27 @@ Google 스프레드시트를 기반으로 지정된 문구들을 자동적으로
* @멘션 시 입력된 문구 정보와 함께 즉시 문구를 출력할 수 있는 기능 * @멘션 시 입력된 문구 정보와 함께 즉시 문구를 출력할 수 있는 기능
## Options ## Options
.env.example 파일을 참조하여 .env 파일을 작성해주세요. config.example.josn 파일을 복사 후 config.json으로 이름 변경 후 작성해주세요.
``` ```json
MISSKEY_TOKEN : 계정 액세스 토큰 {
MISSKEY_ORIGIN : 호스트 서버 이름 (misskey.io, phater.live...) "token": "여기에는 토큰을 넣어주세요",
MAX_DUPLICATE_COUNT : 중복 시 출력되지 않게 할 간격 // 봇을 실행할 계정에서 "설정 -> 기타 설정의 API -> 액세스 토큰 생성 -> `노트를 작성하거나 삭제합니다` 체크 후 나온 값"
(3으로 설정 시 다음 3개의 문구가 나올 동안은 출력되지 않음) "origin": "여기에는 서버 주소를 넣어주세요",
WORKSHEET_URL : 문구를 불러올 스프레드시트 URL // (k.lapy.link, phater.live... etc)
"max_duplicate": 3,
// 중복으로 처리할 대사의 최대 수
"rate": 60,
// 자동 노트 게시 간격 (분 단위)
"visibility": "home",
// 공개 범위 (public, home, followers, specified)
"worksheet": "여기에는 구글 스프레드시트 주소를 넣어주세요",
"template": {
"auto": "{text}",
// 자동으로 게시되는 노트의 템플릿 {text} = 내용 {from} = 예시 시트 기준 "대사 위치" {number} = 예시 시트 기준 "대사 번호" (꼭 숫자일 필요 없음)
"mention": "{text}\n \n<small>{from}에서 발췌됨. ({number}번 대사)</small>"
// 답장으로 게시되는 노트의 템플릿 {text} = 내용 {from} = 예시 시트 기준 "대사 위치" {number} = 예시 시트 기준 "대사 번호" (꼭 숫자일 필요 없음)
}
}
``` ```
## How ## How

View File

@ -6,7 +6,7 @@
"visibility": "home", "visibility": "home",
"worksheet": "YOUR_WORKSHEET_URL_HERE", "worksheet": "YOUR_WORKSHEET_URL_HERE",
"template": { "template": {
"auto": "{note}", "auto": "{text}",
"mention": "{note}\n \nFrom {from} ({number})" "mention": "{text}\n \n<small>{from}에서 발췌됨. ({number}번 대사)</small>"
} }
} }

10
main.py
View File

@ -1,6 +1,5 @@
import asyncio import asyncio
import json import json
import os
import random import random
import gspread import gspread
@ -12,7 +11,8 @@ from mipa.ext import commands
class Config: class Config:
def __init__(self, path: str) -> None: def __init__(self, path: str) -> None:
raw = json.load(path) file = open(path)
raw = json.load(file)
self.token = raw.get("token") self.token = raw.get("token")
self.origin = raw.get("origin") self.origin = raw.get("origin")
self.max = raw.get("max_duplicate") self.max = raw.get("max_duplicate")
@ -51,7 +51,7 @@ class Autoposter(commands.Bot):
def get_worksheet(self) -> Worksheet: def get_worksheet(self) -> Worksheet:
gc = gspread.service_account() gc = gspread.service_account()
sh = gc.open_by_url(self.config["worksheet"]) sh = gc.open_by_url(self.config.worksheet)
worksheet = sh.get_worksheet(0) worksheet = sh.get_worksheet(0)
return worksheet return worksheet
@ -72,7 +72,7 @@ class Autoposter(commands.Bot):
await self.router.connect_channel(['main', 'global']) await self.router.connect_channel(['main', 'global'])
async def on_ready(self, ws: ClientWebSocketResponse): async def on_ready(self, ws: ClientWebSocketResponse):
print(f"Connected as @{self.user.username}@{self.user.host}") print(f"Connected as @{self.user.username}@{self.config.origin}")
await self._connect_channel() await self._connect_channel()
extensions = [ extensions = [
"exts.post" "exts.post"
@ -97,4 +97,4 @@ class Autoposter(commands.Bot):
if __name__ == '__main__': if __name__ == '__main__':
bot = Autoposter() bot = Autoposter()
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.run_until_complete(bot.start(f"wss://{bot.config.origin}/streaming", os.getenv("MISSKEY_TOKEN"))) loop.run_until_complete(bot.start(f"wss://{bot.config.origin}/streaming", bot.config.token))