This repository has been archived on 2023-02-02. You can view files and clone it, but cannot push or open issues or pull requests.
barkshark-web/barkshark_web/mastodon_temp.py

130 lines
3.2 KiB
Python

from mastodon import Mastodon as MastodonPy
from mastodon.Mastodon import api_version
class Mastodon(MastodonPy):
__DICT_VERSION_ADMIN_DOMAIN = '4.0.0'
def __init__(self, *args, **kwargs):
MastodonPy.__init__(self, *args, **kwargs)
self._patch()
def _patch(self):
self._Mastodon__SCOPE_SETS['admin:read'].extend([
'admin:read:domain_allows',
'admin:read:domain_blocks',
'admin:read:ip_blocks',
'admin:read:email_domain_blocks',
'admin:read:cononical_email_blocks'
])
self._Mastodon__SCOPE_SETS['admin:write'].extend([
'admin:read:domain_allows',
'admin:read:domain_blocks',
'admin:read:ip_blocks',
'admin:read:email_domain_blocks',
'admin:read:cononical_email_blocks'
])
def __api_request(self, *args, **kwargs):
data = MastodonPy.__api_request(self, *args, **kwargs)
if isinstance(data, list):
return [DotDict(row) for row in data]
elif isinstance(data, dict):
return DotDict(data)
return data
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
def admin_domains(self, limit=100, max_id=None):
'heck'
params = {'limit': limit}
if max_id != None:
params['max_id'] = max_id
return self.__api_request('GET', '/api/v1/admin/domain_blocks', params, use_json=True)
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
def admin_domains_blocked(self, id):
'heck'
return self.__api_request('GET', f'/api/v1/admin/domain_blocks/{id}')
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
def admin_domains_block(self, domain, severity='silence', nomedia=False, noreports=False, private_comment=None, public_comment=None, obfuscate=False):
'heck'
params = {
'domain': domain,
'severity': severity,
'reject_media': nomedia,
'reject_reports': noreports,
'private_comment': private_comment,
'public_comment': public_comment,
'obfuscate': obfuscate
}
return self.__api_request('POST', '/api/v1/admin/domain_blocks', params, use_json=True)
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
def admin_domains_update(self, id, severity='silence', nomedia=None, noreports=None, private_comment=None, public_comment=None, obfuscate=None):
'heck'
params = {}
if severity:
params['severity'] = severity
if nomedia != None:
params['reject_media'] = nomedia
if noreports != None:
params['reject_reports'] = noreports
if obfuscate != None:
params['obfuscate'] = obfuscate
if private_comment != None:
params['private_comment'] = private_comment
if public_comment != None:
params['public_comment'] = public_comment
return self.__api_request('PUT', f'/api/v1/admin/domain_blocks/{id}', params, use_json=True)
@api_version('4.0.0', '4.0.0', __DICT_VERSION_ADMIN_DOMAIN)
def admin_domains_unblock(self, id):
'heck'
return self.__api_request('DELETE', f'/api/v1/admin/domain_blocks/{id}')
def admin_domains_all(self, limit=100):
bans = dict()
new_bans = []
offset = None
while True:
if offset == None:
new_bans = self.admin_domains(limit)
else:
new_bans = self.admin_domains(limit, offset)
for row in new_bans:
bans[row.domain] = row
offset = new_bans[-1].id
if len(new_bans) < limit:
break
logging.verbose(f'Fetched {len(bans)} domain ban(s)')
return bans