Files
clan-core/pkgs/matrix-bot/matrix_bot/bot.py
Qubasa c26b7e0a0a matrix-bot: Init working sending and receiving
matrix-bot: Code cleanup

matrix-bot: Code cleanup#

matrix-bot: Code cleanup#

matrix-bot: Ping on review neede

Add .gitignore

Working user ping
2024-07-02 19:47:36 +02:00

82 lines
2.3 KiB
Python

import logging
log = logging.getLogger(__name__)
import time
from pathlib import Path
import json
import aiohttp
from nio import (
AsyncClient,
JoinResponse,
JoinedMembersResponse,
MatrixRoom,
RoomMessageText,
)
from matrix_bot.gitea import (
GiteaData,
PullState,
fetch_pull_requests,
fetch_repo_labels,
)
from .locked_open import read_locked_file, write_locked_file
from .matrix import MatrixData, send_message
async def message_callback(room: MatrixRoom, event: RoomMessageText) -> None:
print(
f"Message received in room {room.display_name}\n"
f"{room.user_name(event.sender)} | {event.body}"
)
async def bot_run(
client: AsyncClient,
http: aiohttp.ClientSession,
matrix: MatrixData,
gitea: GiteaData,
) -> None:
# If you made a new room and haven't joined as that user, you can use
room: JoinResponse = await client.join(matrix.room)
users: JoinedMembersResponse = await client.joined_members(room.room_id)
if not users.transport_response.ok:
raise Exception(f"Failed to get users {users}")
for user in users.members:
print(f"User: {user.user_id} {user.display_name}")
labels = await fetch_repo_labels(gitea, http)
label_ids: list[int] = []
for label in labels:
if label["name"] in gitea.trigger_labels:
label_ids.append(label["id"])
tstart = time.time()
pulls = await fetch_pull_requests(gitea, http, limit=50, state=PullState.ALL)
last_updated_path = Path("last_updated.json")
last_updated = read_locked_file(last_updated_path)
for pull in pulls:
if pull["requested_reviewers"] and pull["mergeable"]:
if last_updated == {}:
last_updated = pull
elif pull["updated_at"] < last_updated["updated_at"]:
last_updated = pull
else:
continue
log.info(f"Pull request {pull['title']} needs review")
message = f"Pull request {pull['title']} needs review\n{pull['html_url']}"
await send_message(client, room, message, user_ids=["@qubasa:gchq.icu"])
write_locked_file(last_updated_path, last_updated)
tend = time.time()
tdiff = round(tend - tstart)
log.debug(f"Time taken: {tdiff}s")
# await client.sync_forever(timeout=30000) # milliseconds