Skip to content
Snippets Groups Projects
Commit f64e4902 authored by Sven Mäder's avatar Sven Mäder :speech_balloon:
Browse files

Add subcommands unowned and mine

parent 0120db14
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ maubot: 0.1.0
id: ch.ethz.phys.rt
# A PEP 440 compliant version string.
version: 0.2.8
version: 0.2.9
# The SPDX license identifier for the plugin. https://spdx.org/licenses/
# Optional, assumes all rights reserved if omitted.
......
......@@ -117,6 +117,12 @@ class RT(Plugin):
entry['Content'] = block
return entry
async def _search(self, params: dict) -> dict:
rest = f'{self.rest}search/ticket'
async with self.http.get(rest, headers=self.headers, params=params) as response:
content = await response.text()
return dict(self.regex_history.findall(content))
@command.passive('((^| )([rR][tT]#?))([0-9]+)', multiple=True)
async def handler(self, evt: MessageEvent, subs: List[Tuple[str, str]]) -> None:
await evt.mark_read()
......@@ -313,3 +319,33 @@ class RT(Plugin):
f'assigned {self.html_link(number)} to '
f'<a href="https://matrix.to/#/{target_mxid}">{target_mxid}</a> 😜')
await evt.respond(content)
@rt.subcommand('unowned', aliases=('u', 'un'), help='List all unowned open tickets.')
async def unowned(self, evt: MessageEvent) -> None:
if not self.can_manage(evt):
return
await evt.mark_read()
params = {'query': 'Owner = "Nobody" AND ( Status = "new" OR Status = "open" )'}
tickets_dict = await self._search(params)
# links = {k: self.markdown_link(k) for k, v in tickets_dict.items()}
tickets = ' \n'.join([f'`{k}`: {v}' for k, v in tickets_dict.items()])
await evt.respond(f'Unowned open tickets: \n{tickets}')
@rt.subcommand('mine', aliases=('m', 'my'), help='List all your open tickets.')
async def mine(self, evt: MessageEvent) -> None:
if not self.can_manage(evt):
return
await evt.mark_read()
displayname = await self._displayname(evt.room_id, evt.sender)
username = evt.sender[1:].split(':')[0]
params = {'query': f'Owner = "{username}" AND ( Status = "new" OR Status = "open" )'}
tickets_dict = await self._search(params)
# links = {k: self.html_link(k) for k, v in tickets_dict.items()}
body = '\n'.join([f'{k}: {v}' for k, v in tickets_dict.items()])
fbody = '<br/>'.join([f'<code>{k}</code>: {v}' for k, v in tickets_dict.items()])
content = TextMessageEventContent(
msgtype=MessageType.NOTICE, format=Format.HTML,
body=f'Open tickets for {displayname}:\n{body}',
formatted_body=f'Open tickets for <a href="https://matrix.to/#/{evt.sender}">'
f'{evt.sender}</a>:<br/>{fbody}')
await evt.respond(content)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment