From 8edc08ac5eea9007155ce9d1689616a81aa41546 Mon Sep 17 00:00:00 2001 From: akkun11 Date: Tue, 4 Jul 2023 06:42:22 +0900 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- misskey-renote.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 misskey-renote.py diff --git a/misskey-renote.py b/misskey-renote.py new file mode 100644 index 0000000..b415e2e --- /dev/null +++ b/misskey-renote.py @@ -0,0 +1,62 @@ +#! /bin/env python3 +# サブアカリノートBot by akku +""" +MIT License + +Copyright (c) 2023 akku + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + +import asyncio +import json +import websockets +import requests + +MISSKEY = "-misskey-host-" +TOKEN = "-token-" +WS_ADDR = f"wss://{MISSKEY}/streaming?i={TOKEN}" + +async def runner(): + async with websockets.connect(WS_ADDR) as ws: + await ws.send(json.dumps({ + "type":"connect", + "body":{ + "channel":"userList", + "id":"list", + "params":{ + # RNしたいリストのid + "listId":"-example-" + } + } + })) + while True: + data = json.loads(await ws.recv()) + print(data) + if((data['type'] == 'channel')&(data['body']['type'] == 'note')): + note = data['body']['body'] + await on_note(note) + +async def on_note(note): + requests.post(f"https://{MISSKEY}/api/notes/create", json={ + "i":TOKEN, + "renoteId":note["id"] + }) + +asyncio.get_event_loop().run_until_complete(runner())