mirror of
https://git.kiwifarms.net/mint/fedi-block-api.git
synced 2024-10-22 23:19:07 +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": "",
|
"base_url": "",
|
||||||
"port": 8069,
|
"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
|
from json import loads
|
||||||
import re
|
import re
|
||||||
from time import time
|
from time import time
|
||||||
|
import itertools
|
||||||
|
|
||||||
with open("config.json") as f:
|
with open("config.json") as f:
|
||||||
config = loads(f.read())
|
config = loads(f.read())
|
||||||
|
@ -15,6 +16,26 @@ headers = {
|
||||||
"user-agent": config["useragent"]
|
"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:
|
def get_mastodon_blocks(domain: str) -> dict:
|
||||||
blocks = {
|
blocks = {
|
||||||
|
@ -205,10 +226,12 @@ conn = sqlite3.connect("blocks.db")
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
|
|
||||||
c.execute(
|
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():
|
for blocker, software in c.fetchall():
|
||||||
|
blockdict = []
|
||||||
blocker = tidyup(blocker)
|
blocker = tidyup(blocker)
|
||||||
if software == "pleroma":
|
if software == "pleroma":
|
||||||
print(blocker)
|
print(blocker)
|
||||||
|
@ -253,6 +276,12 @@ for blocker, software in c.fetchall():
|
||||||
"insert into blocks select ?, ?, '', ?, ?, ?",
|
"insert into blocks select ?, ?, '', ?, ?, ?",
|
||||||
(blocker, blocked, block_level, timestamp, timestamp),
|
(blocker, blocked, block_level, timestamp, timestamp),
|
||||||
)
|
)
|
||||||
|
if block_level == "reject":
|
||||||
|
blockdict.append(
|
||||||
|
{
|
||||||
|
"blocked": blocked,
|
||||||
|
"reason": None
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
c.execute(
|
c.execute(
|
||||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
"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 = ''",
|
"update blocks set reason = ? where blocker = ? and blocked = ? and block_level = ? and reason = ''",
|
||||||
(reason["reason"], blocker, blocked, block_level),
|
(reason["reason"], blocker, blocked, block_level),
|
||||||
)
|
)
|
||||||
|
for entry in blockdict:
|
||||||
|
if entry["blocked"] == blocked:
|
||||||
|
entry["reason"] = reason["reason"]
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("error:", e, blocker)
|
print("error:", e, blocker)
|
||||||
|
@ -364,6 +397,12 @@ for blocker, software in c.fetchall():
|
||||||
timestamp,
|
timestamp,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
if block_level == "reject":
|
||||||
|
blockdict.append(
|
||||||
|
{
|
||||||
|
"blocked": blocked,
|
||||||
|
"reason": reason
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
c.execute(
|
c.execute(
|
||||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
||||||
|
@ -433,6 +472,12 @@ for blocker, software in c.fetchall():
|
||||||
timestamp
|
timestamp
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
if block_level == "reject":
|
||||||
|
blockdict.append(
|
||||||
|
{
|
||||||
|
"blocked": blocked,
|
||||||
|
"reason": reason
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
c.execute(
|
c.execute(
|
||||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
"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 ?, ?, ?, ?, ?, ?",
|
"insert into blocks select ?, ?, ?, ?, ?, ?",
|
||||||
(blocker, blocked, "", "reject", timestamp, timestamp),
|
(blocker, blocked, "", "reject", timestamp, timestamp),
|
||||||
)
|
)
|
||||||
|
blockdict.append(
|
||||||
|
{
|
||||||
|
"blocked": blocked,
|
||||||
|
"reason": None
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
c.execute(
|
c.execute(
|
||||||
"update blocks set last_seen = ? where blocker = ? and blocked = ? and block_level = ?",
|
"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 = ''",
|
"update blocks set reason = ? where blocker = ? and blocked = ? and block_level = ? and reason = ''",
|
||||||
(reason, blocker, blocked, "reject"),
|
(reason, blocker, blocked, "reject"),
|
||||||
)
|
)
|
||||||
|
for entry in blockdict:
|
||||||
|
if entry["blocked"] == blocked:
|
||||||
|
entry["reason"] = reason
|
||||||
conn.commit()
|
conn.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("error:", e, blocker)
|
print("error:", e, blocker)
|
||||||
|
|
||||||
|
if config["bot_enabled"] and len(blockdict) > 0:
|
||||||
|
send_bot_post(blocker, blockdict)
|
||||||
|
blockdict = []
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
Loading…
Reference in a new issue