bot: implement github event handling

This commit is contained in:
Antoine Martin 2021-09-12 20:13:34 +02:00
parent a402029dd2
commit cd6badb9a0
3 changed files with 73 additions and 12 deletions

View file

@ -7,13 +7,19 @@ use std::{
use anyhow::Context;
use matrix_sdk::{
room::Room,
ruma::events::{room::member::MemberEventContent, StrippedStateEvent},
ruma::events::{
room::member::MemberEventContent, room::message::MessageEventContent,
AnyMessageEventContent, StrippedStateEvent,
},
Client, ClientConfig, Session, SyncSettings,
};
use tokio::sync::mpsc::UnboundedReceiver;
use tracing::{debug, info};
use tracing::{debug, info, warn};
use crate::{config::ProloloConfig, webhooks::Event};
use crate::{
config::ProloloConfig,
webhooks::{github::RefType, Event, GitHubEvent},
};
mod handlers;
use handlers::autojoin::autojoin_authorized_rooms;
@ -86,6 +92,54 @@ impl Prololo {
}
};
debug!("received event: {:?}", event);
Self::handle_event(event, &client, &config).await
}
}
async fn handle_event(event: Event, client: &Client, config: &ProloloConfig) {
match event {
Event::GitHub(event) => Self::handle_github_event(event, client, config).await,
}
}
const SEPARATOR: &'static str = "";
async fn handle_github_event(event: GitHubEvent, client: &Client, config: &ProloloConfig) {
let message = match event {
GitHubEvent::Create(event) => match event.ref_type {
RefType::Branch => return, // new branches are handled by the Push event
RefType::Tag => {
format!(
"[{}] {} created tag {} {} {}",
event.repository.name,
event.sender.login,
event.r#ref,
Self::SEPARATOR,
event.repository.ref_url(&event.r#ref)
)
}
},
GitHubEvent::Issues => todo!(),
GitHubEvent::IssueComment => todo!(),
GitHubEvent::Push => todo!(),
};
let message = AnyMessageEventContent::RoomMessage(MessageEventContent::text_plain(message));
let room = match client.get_joined_room(&config.matrix_room_id) {
Some(room) => room,
None => {
warn!(
"room {} isn't joined yet, can't send message",
config.matrix_room_id
);
return;
}
};
if let Err(e) = room.send(message, None).await {
warn!("encountered error while sending message: {}", e);
}
}