Compare commits

...

14 commits

Author SHA1 Message Date
11825e4825 Merge pull request 'niho' () from niho into master
Reviewed-on: 
2021-12-03 15:48:11 +03:00
aurel1on
0fbdfab1dd Изменил(а) на 'config.json' 2021-12-03 15:44:21 +03:00
aurel1on_sol
b5a71d5dce sborka 2021-12-03 15:42:50 +03:00
5e47ecc9b4 Update sources.md 2021-11-27 10:54:42 +03:00
nihonium
8e1ebb2926 modified: main.py 2021-11-27 01:59:28 +03:00
nihonium
950141c5cf Merge remote-tracking branch 'origin/niho' into niho 2021-11-27 01:57:41 +03:00
nihonium
6c03cc266c Implement image upload function 2021-11-27 01:54:29 +03:00
63c8a882c0 Update 'sources.md' 2021-11-26 11:58:13 +03:00
nihonium
115f5cae7e Update README 2021-11-26 00:24:11 +03:00
nihonium
e43233632d Добавил комменты, чтоб не быть мудаком 2021-11-26 00:10:31 +03:00
nihonium
7db372f76c new file: sources.md 2021-11-25 09:20:02 +03:00
nihonium
1001e3887f new file: .gitignore
new file:   config.json.example
	modified:   main.py
2021-11-24 00:38:25 +03:00
nihonium
b38c14a16f modified: README.md 2021-11-23 21:06:49 +03:00
nihonium
8ea5b95573 new file: main.py 2021-11-23 01:38:21 +03:00
6 changed files with 155 additions and 2 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
config.json

View file

@ -1,3 +1,21 @@
# misskey_bot
# Misskey Bot
[Ранняя стадия разработки, авось что получится съедобное]
Какой функционал планируется у бота:
1. Бот-группа
2. Бот-ретранслятор с Twitter
3. Автопостер картинок из заданного каталога (готово на 80%)
## 1 Как заставить бота работать?
1.1 В первую очередь нужно зайти в аккаунт бота на вашем инстансе, после этого перейти в настройки (шестерёнка) - API - создать токен доступа.
Предоствьте боту тот доступ, который будет предостаточен для выполнения ваших потребностей.
1.2 Правильно заполните конфиг. Это очень важно, иначе бот не будет работать!
##
misskey bot. Python

6
config.json Normal file
View file

@ -0,0 +1,6 @@
{
"name": "[Shitpost] PoridgeClub",
"url" : "https://shitpost.poridge.club",
"token": "ur_token",
"visibility": "public"
}

116
main.py Normal file
View file

@ -0,0 +1,116 @@
#!/usr/bin/python3
import requests # Для отправки http-запросов
import json
import time
# Функция для чтения JSON-файла (например, конфига), аргумент - адрес файла в ФС
# Возвращает словарь
def json_read(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)
# Формируем URL для доступа к конкретной функции API
req_url = url + "/api/i/notifications"
body = {
"i": i,
# Можно включить лишь определенные уведомления, всю эту залупу следует вынести также в аргументы функции, чтоб реагировать на конкретные события, типа подписки или упоминания, по-разному
#"includeTypes": [
# "reply",
# "mention"
# ],
# Количество уведомлений, которые вытянем
"limit": 3,
"unreadOnly": False,
}
# Отправляем запрос, в тело запроса суем словарь-JSON, которые объявили выше
r = requests.post(req_url, json=body)
# Если все прошло збс, код HTTP 200, то отдаем получанный список уведомлений
if r.status_code == 200:
# Можешь раскомментить, глянуть, что это за черт
#print(r.json())
return r.json()
# Иначе, если не збс, то ругаемся
else:
print("Fuck")
# Функция, создающая пост
# 2do: посты с картинками, ...
def create_post(content, url, i, visibility="public", channel="", fileIds=[]):
print("Post to", url, ":", content)
# Аналогично, адрес нужной функции API
req_url = url + "/api/notes/create"
body = {
# Не ебу, что за noExtract*, надо полуркать, но работает и збс пока что
"noExtractMentions": True,
"noExtractHashtags": True,
"noExtractEmojis": True,
"visibility": visibility,
"text": content,
"fileIds": fileIds,
# Если поставлен канал, то пост только локальный для инстанса
"localOnly": channel != "",
"i": i
}
if channel != "":
body["channelId"] = channel
# Отправляем запрос
r = requests.post(req_url, json=body)
# Аналогично, проверка на 200, в случае успеха 1
if r.status_code == 200:
return 0
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"
with open(file, "rb") as f:
fileo = f.read()
body = {
"isSensitive": False,
"force": True,
"i":i
}
body = json.dumps(body)
payload = {'json_payload': body, 'i': i }
files = {"file": (file, fileo)}
r = requests.post(req_url, data=payload, files=files)
if r.status_code == 200:
return r.json()
else:
print("Upload failed with code", r.status_code)
print(r.text)
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)

12
sources.md Normal file
View file

@ -0,0 +1,12 @@
## API
https://misskey.io/api-doc
## Примеры ботов
https://github.com/yupix/Mi.py
https://github.com/TennousuAthena/RSSToMisskey
https://github.com/theskanthunt42/misskeyInstanceCheckBot
## Twitter API
https://www.earthdatascience.org/courses/use-data-open-source-python/intro-to-apis/twitter-data-in-python/

BIN
test.jpg Executable file

Binary file not shown.

After

(image error) Size: 129 KiB