Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/bugtracker/bugtracker.py

152 lines
6.2 KiB
Python
Raw Normal View History

2023-05-17 09:30:26 +00:00
import os
import aiohttp
import ujson as json
from PIL import ImageFont
2023-10-31 13:50:06 +00:00
from config import Config, CFG
2023-09-03 08:50:12 +00:00
from core.builtins import Url
2023-05-17 09:30:26 +00:00
from core.logger import Logger
from core.utils.http import download_to_cache
from core.utils.http import get_url
2023-05-17 09:30:26 +00:00
2023-10-31 13:50:06 +00:00
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
2023-05-19 14:41:12 +00:00
elements = ['div#descriptionmodule']
2023-05-17 09:30:26 +00:00
assets_path = os.path.abspath('./assets/')
font = ImageFont.truetype(f'{assets_path}/SourceHanSansCN-Normal.ttf', 15)
2021-02-06 16:30:13 +00:00
2023-03-23 08:07:10 +00:00
spx_cache = {}
2023-05-17 09:30:26 +00:00
async def make_screenshot(page_link, use_local=True):
elements_ = elements.copy()
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
use_local = False
Logger.info('[Webrender] Generating element screenshot...')
try:
2023-10-27 17:39:06 +00:00
img = await download_to_cache((web_render_local if use_local else web_render) + 'element_screenshot',
2023-05-17 09:30:26 +00:00
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",
post_data=json.dumps({
'url': page_link,
'element': elements_}),
attempt=1,
timeout=30,
request_private_ip=True
)
if img:
return img
else:
Logger.info('[Webrender] Generation Failed.')
return False
except aiohttp.ClientConnectorError:
if use_local:
return await make_screenshot(page_link, use_local=False)
else:
return False
except ValueError:
Logger.info('[Webrender] Generation Failed.')
return False
2023-09-03 11:49:14 +00:00
async def bugtracker_get(session, mojira_id: str, nolink=False):
2022-07-25 15:37:11 +00:00
data = {}
2023-09-03 11:49:14 +00:00
id_ = mojira_id.upper()
2023-07-25 05:31:04 +00:00
try:
json_url = 'https://bugs.mojang.com/rest/api/2/issue/' + id_
2023-07-25 05:34:36 +00:00
get_json = await get_url(json_url, 200)
2023-07-25 05:31:04 +00:00
except ValueError as e:
if str(e).startswith('401'):
2023-08-14 17:25:03 +00:00
await session.finish(session.locale.t("bugtracker.message.get_failed"))
2023-09-03 11:49:14 +00:00
if mojira_id not in spx_cache:
2023-03-23 08:07:10 +00:00
get_spx = await get_url('https://bugs.guangyaostore.com/translations', 200)
if get_spx:
spx_cache.update(json.loads(get_spx))
if id_ in spx_cache:
data["translation"] = spx_cache[id_]
2021-02-06 16:30:13 +00:00
if get_json:
load_json = json.loads(get_json)
errmsg = ''
if 'errorMessages' in load_json:
for msg in load_json['errorMessages']:
errmsg += '\n' + msg
else:
if 'key' in load_json:
2022-07-25 15:37:11 +00:00
data["title"] = f'[{load_json["key"]}] '
2021-02-06 16:30:13 +00:00
if 'fields' in load_json:
fields = load_json['fields']
if 'summary' in fields:
2022-07-25 15:37:11 +00:00
data["title"] = data["title"] + \
2023-04-30 03:30:59 +00:00
fields['summary'] + (
f' (spx: {data["translation"]})' if data.get("translation", False) else '')
2021-02-06 16:30:13 +00:00
if 'issuetype' in fields:
2022-07-25 15:37:11 +00:00
data["type"] = fields['issuetype']['name']
2021-02-06 16:30:13 +00:00
if 'status' in fields:
2022-07-25 15:37:11 +00:00
data["status"] = fields['status']['name']
2021-02-06 16:30:13 +00:00
if 'project' in fields:
2022-07-25 15:37:11 +00:00
data["project"] = fields['project']['name']
2021-02-06 16:30:13 +00:00
if 'resolution' in fields:
2022-07-31 08:33:20 +00:00
data["resolution"] = fields['resolution']['name'] if fields[
2023-04-30 03:30:59 +00:00
'resolution'] is not None else 'Unresolved'
2021-02-06 16:30:13 +00:00
if 'versions' in load_json['fields']:
2023-09-03 11:49:14 +00:00
versions = fields['versions']
2021-02-06 16:30:13 +00:00
verlist = []
2023-09-03 11:49:14 +00:00
for item in versions[:]:
2021-02-06 16:30:13 +00:00
verlist.append(item['name'])
if verlist[0] == verlist[-1]:
2022-07-25 15:37:11 +00:00
data['version'] = "Version: " + verlist[0]
2021-02-06 16:30:13 +00:00
else:
2022-07-25 15:37:11 +00:00
data['version'] = "Versions: " + \
2022-07-31 08:33:20 +00:00
verlist[0] + " ~ " + verlist[-1]
2022-07-25 16:13:55 +00:00
data["link"] = 'https://bugs.mojang.com/browse/' + id_
2021-02-06 16:30:13 +00:00
if 'customfield_12200' in fields:
if fields['customfield_12200']:
2022-07-25 15:37:11 +00:00
data["priority"] = "Mojang Priority: " + \
2022-07-31 08:33:20 +00:00
fields['customfield_12200']['value']
2021-02-06 16:30:13 +00:00
if 'priority' in fields:
if fields['priority']:
2022-07-25 15:37:11 +00:00
data["priority"] = "Priority: " + fields['priority']['name']
2021-02-06 16:30:13 +00:00
if 'fixVersions' in fields:
2022-07-25 15:37:11 +00:00
if data["status"] == 'Resolved':
2021-02-06 16:30:13 +00:00
if fields['fixVersions']:
2022-07-25 15:37:11 +00:00
data["fixversion"] = fields['fixVersions'][0]['name']
2023-05-17 09:30:26 +00:00
issue_link = None
2021-02-06 16:30:13 +00:00
msglist = []
if errmsg != '':
msglist.append(errmsg)
else:
2022-07-25 15:37:11 +00:00
if title := data.get("title", False):
msglist.append(title)
if type_ := data.get("type", False):
type_ = 'Type: ' + type_
if status_ := data.get("status", False):
if status_ in ['Open', 'Resolved']:
2023-09-03 11:49:14 +00:00
type_ = f'{type_} | Status: {status_}'
2022-07-25 15:37:11 +00:00
msglist.append(type_)
if project := data.get("project", False):
project = 'Project: ' + project
msglist.append(project)
if status_ := data.get("status", False):
if status_ not in ['Open', 'Resolved']:
status_ = 'Status: ' + status_
msglist.append(status_)
if priority := data.get("priority", False):
msglist.append(priority)
if resolution := data.get("resolution", False):
resolution = "Resolution: " + resolution
msglist.append(resolution)
if fixversion := data.get("fixversion", False):
msglist.append("Fixed Version: " + fixversion)
if version := data.get("version", False):
msglist.append(version)
2022-09-04 16:27:49 +00:00
if (link := data.get("link", False)) and not nolink:
2022-07-25 15:37:11 +00:00
msglist.append(str(Url(link)))
2023-05-17 09:30:26 +00:00
issue_link = link
2022-07-25 15:37:11 +00:00
msg = '\n'.join(msglist)
2023-05-17 09:30:26 +00:00
return msg, issue_link