Report findings to a bot

This commit is contained in:
Mint 2023-03-13 00:21:46 +03:00
parent 441d050305
commit 5bd02655d8
2 changed files with 64 additions and 2 deletions

View file

@ -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"
}

View file

@ -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()