nihonium 3 years ago
parent 8e1ebb2926
commit dc517c4555

@ -3,37 +3,49 @@
import requests # Для отправки http-запросов
import json
import time
import argparse
import logging as log
p = argparse.ArgumentParser()
p.add_argument('--verbose', '-v', action='count', default=0)
args = p.parse_args()
if args.verbose:
log.basicConfig(format="%(levelname)s: %(message)s", level=log.DEBUG)
log.info("Verbose output.")
else:
log.basicConfig(format="%(levelname)s: %(message)s")
#log.info("This should be verbose.")
#log.warning("This is a warning.")
#log.error("This is an error.")
# Функция для чтения JSON-файла (например, конфига), аргумент - адрес файла в ФС
# Возвращает словарь
def json_read(file):
# Создается локальное окружение (или как эта хуйня зовется), где присутствует дескриптор для нашего файла
#log.info("Reading config file:", file)
with open(file) as f:
config = json.load(f)
return config
# Функция для получения уведомлений пользователя из Misskey
# Возвращает список словарей
# 2do: includeTypes как аргумент
def get_notifications(url, i):
print("Getting notifications from", url)
def get_notifications(url, i, includeTypes=["follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "receiveFollowRequest", "followRequestAccepted", "groupInvited","app"], markAsRead=True):
log.info("Getting notifications from", url)
# Формируем URL для доступа к конкретной функции API
req_url = url + "/api/i/notifications"
body = {
"i": i,
# Можно включить лишь определенные уведомления, всю эту залупу следует вынести также в аргументы функции, чтоб реагировать на конкретные события, типа подписки или упоминания, по-разному
#"includeTypes": [
# "reply",
# "mention"
# ],
"includeTypes": includeTypes,
# Количество уведомлений, которые вытянем
"limit": 3,
"unreadOnly": False,
"markAsRead": markAsRead,
}
# Отправляем запрос, в тело запроса суем словарь-JSON, которые объявили выше
r = requests.post(req_url, json=body)
# Если все прошло збс, код HTTP 200, то отдаем получанный список уведомлений
if r.status_code == 200:
# Можешь раскомментить, глянуть, что это за черт
@ -42,13 +54,18 @@ def get_notifications(url, i):
# Иначе, если не збс, то ругаемся
else:
print("Fuck")
# Функция, создающая пост
# 2do: посты с картинками, ...
def create_post(content, url, i, visibility="public", channel="", fileIds=[]):
def create_post(url, i, content="", visibility="public", channel="", fileIds=[], renote=False, renoteId=None):
print("Post to", url, ":", content)
# Аналогично, адрес нужной функции API
req_url = url + "/api/notes/create"
if renote:
body = {
"renoteId": renoteId,
"i": i
}
else:
body = {
# Не ебу, что за noExtract*, надо полуркать, но работает и збс пока что
"noExtractMentions": True,
@ -56,7 +73,7 @@ def create_post(content, url, i, visibility="public", channel="", fileIds=[]):
"noExtractEmojis": True,
"visibility": visibility,
"text": content,
"fileIds": fileIds,
#"fileIds": fileIds,
# Если поставлен канал, то пост только локальный для инстанса
"localOnly": channel != "",
"i": i
@ -71,9 +88,7 @@ def create_post(content, url, i, visibility="public", channel="", fileIds=[]):
else:
print("Failed to post:", r.text)
return 1
# Пока что можешь не пытаться разобраться, я сам отчасти хз, как это работает, лол
def file_upload(file, url, i, isSensitive=False):
print("Uploading file to", url)
req_url = url + "/api/drive/files/create"
@ -100,17 +115,13 @@ def get_file_list(url, i):
req_url = url + "/api/drive/files"
r = requests.post(req_url, json={"i":i})
print(r.json())
### Сюда надо захуярить еще 100500 функций###
# Собсна, содержательная часть программы начинается тут
# Читаем конфиг, получаем словарь
config = json_read('config.json')
#notif_list = get_notifications(config['url'], config['token'])
#print(notif_list)
#file_upload('test.jpg', config['url'], config['token'])
im_info = file_upload('test.jpg', config['url'], config['token'])
create_post("Nya~", config['url'], config['token'], fileIds=[im_info['id']])
#print(notif_list)
create_post(config['url'], config['token'], renote=True, renoteId="8vxi115z0g")

Loading…
Cancel
Save