mirror of
https://git.kiwifarms.net/mint/fedi-block-api.git
synced 2024-10-22 19:09:06 +00:00
Report findings to a bot
This commit is contained in:
parent
441d050305
commit
5bd02655d8
2 changed files with 64 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
{
|
||||
"base_url": "",
|
||||
"port": 8069,
|
||||
"useragent": "Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0"
|
||||
"useragent": "Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0",
|
||||
"bot_enabled": false,
|
||||
"bot_instance": "https://example.com",
|
||||
"bot_token": "",
|
||||
"bot_visibility": "unlisted"
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ from json import dumps
|
|||
from json import loads
|
||||
import re
|
||||
from time import time
|
||||
import itertools
|
||||
|
||||
with open("config.json") as f:
|
||||
config = loads(f.read())
|
||||
|
@ -15,6 +16,26 @@ headers = {
|
|||
"user-agent": config["useragent"]
|
||||
}
|
||||
|
||||
def send_bot_post(instance: str, blocks: dict):
|
||||
message = instance + " has blocked the following instances:\n\n"
|
||||
truncated = False
|
||||
if len(blocks) > 20:
|
||||
truncated = True
|
||||
blocks = blocks[0 : 19]
|
||||
for block in blocks:
|
||||
if block["reason"] == None or block["reason"] == '':
|
||||
message = message + block["blocked"] + " with unspecified reason\n"
|
||||
else:
|
||||
message = message + block["blocked"] + ' for "' + block["reason"] + '"\n'
|
||||
if truncated:
|
||||
message = message + "(the list has been truncated to the first 20 entries)"
|
||||
|
||||
botheaders = {**headers, **{"Authorization": "Bearer " + config["bot_token"]}}
|
||||
req = post(f"{config['bot_instance']}/api/v1/statuses",
|
||||
data={"status":message, "visibility":config['bot_visibility'], "content_type":"text/plain"},
|
||||
headers=botheaders, timeout=10).json()
|
||||
print(req)
|
||||
return True
|
||||
|
||||
def get_mastodon_blocks(domain: str) -> dict:
|
||||
blocks = {
|
||||
|
@ -205,10 +226,12 @@ conn = sqlite3.connect("blocks.db")
|
|||
c = conn.cursor()
|
||||
|
||||
c.execute(
|
||||
"select domain, software from instances where software in ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial')"
|
||||
#"select domain, software from instances where software in ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial')"
|
||||
"select domain, software from instances where domain = 'mstdn.social'"
|
||||
)
|
||||
|
||||
for blocker, software in c.fetchall():
|
||||
blockdict = []
|
||||
blocker = tidyup(blocker)
|
||||
if software == "pleroma":
|
||||
print(blocker)
|
||||
|
@ -253,6 +276,12 @@ for blocker, software in c.fetchall():
|
|||
"insert into blocks select ?, ?, '', ?, ?, ?",
|
||||
(blocker, blocked, block_level, timestamp, timestamp),
|
||||
)
|
||||
if block_level == "reject":
|
||||
blockdict.append(
|
||||
{
|
||||
"blocked": blocked,
|
||||
"reason": None
|
||||
})
|
||||
else:
|
||||
c.execute(
|
||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
||||
|
@ -283,6 +312,10 @@ for blocker, software in c.fetchall():
|
|||
"update blocks set reason = ? where blocker = ? and blocked = ? and block_level = ? and reason = ''",
|
||||
(reason["reason"], blocker, blocked, block_level),
|
||||
)
|
||||
for entry in blockdict:
|
||||
if entry["blocked"] == blocked:
|
||||
entry["reason"] = reason["reason"]
|
||||
|
||||
conn.commit()
|
||||
except Exception as e:
|
||||
print("error:", e, blocker)
|
||||
|
@ -364,6 +397,12 @@ for blocker, software in c.fetchall():
|
|||
timestamp,
|
||||
),
|
||||
)
|
||||
if block_level == "reject":
|
||||
blockdict.append(
|
||||
{
|
||||
"blocked": blocked,
|
||||
"reason": reason
|
||||
})
|
||||
else:
|
||||
c.execute(
|
||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
||||
|
@ -433,6 +472,12 @@ for blocker, software in c.fetchall():
|
|||
timestamp
|
||||
),
|
||||
)
|
||||
if block_level == "reject":
|
||||
blockdict.append(
|
||||
{
|
||||
"blocked": blocked,
|
||||
"reason": reason
|
||||
})
|
||||
else:
|
||||
c.execute(
|
||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
||||
|
@ -483,6 +528,11 @@ for blocker, software in c.fetchall():
|
|||
"insert into blocks select ?, ?, ?, ?, ?, ?",
|
||||
(blocker, blocked, "", "reject", timestamp, timestamp),
|
||||
)
|
||||
blockdict.append(
|
||||
{
|
||||
"blocked": blocked,
|
||||
"reason": None
|
||||
})
|
||||
else:
|
||||
c.execute(
|
||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
||||
|
@ -494,7 +544,15 @@ for blocker, software in c.fetchall():
|
|||
"update blocks set reason = ? where blocker = ? and blocked = ? and block_level = ? and reason = ''",
|
||||
(reason, blocker, blocked, "reject"),
|
||||
)
|
||||
for entry in blockdict:
|
||||
if entry["blocked"] == blocked:
|
||||
entry["reason"] = reason
|
||||
conn.commit()
|
||||
except Exception as e:
|
||||
print("error:", e, blocker)
|
||||
|
||||
if config["bot_enabled"] and len(blockdict) > 0:
|
||||
send_bot_post(blocker, blockdict)
|
||||
blockdict = []
|
||||
|
||||
conn.close()
|
||||
|
|
Loading…
Reference in a new issue