confirm subscription with a tick reaction
This commit is contained in:
parent
a208f352bc
commit
db39469cad
2 changed files with 38 additions and 6 deletions
|
|
@ -1,7 +1,10 @@
|
||||||
use crate::grist::{Priority, Shift};
|
use crate::grist::{Priority, Shift};
|
||||||
use chrono::{DateTime, FixedOffset, TimeZone, Utc};
|
use chrono::{DateTime, FixedOffset, TimeZone, Utc};
|
||||||
use clap::{CommandFactory, Parser, Subcommand};
|
use clap::{CommandFactory, Parser, Subcommand};
|
||||||
use matrix_sdk::{Client, Room};
|
use matrix_sdk::{
|
||||||
|
Client, Room,
|
||||||
|
ruma::events::{OriginalSyncMessageLikeEvent, room::message::RoomMessageEventContent},
|
||||||
|
};
|
||||||
|
|
||||||
prelude! {}
|
prelude! {}
|
||||||
|
|
||||||
|
|
@ -55,7 +58,6 @@ enum Action {
|
||||||
},
|
},
|
||||||
|
|
||||||
// should we add an option to (un)subscribe someone else?
|
// should we add an option to (un)subscribe someone else?
|
||||||
|
|
||||||
/// Se désinscrire d'un shift
|
/// Se désinscrire d'un shift
|
||||||
#[command(name = "désinscrire")]
|
#[command(name = "désinscrire")]
|
||||||
Unsubscribe {
|
Unsubscribe {
|
||||||
|
|
@ -107,9 +109,39 @@ pub fn format_shifts(shifts: Vec<Shift>) -> String {
|
||||||
output
|
output
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn handle(command: impl AsRef<str>, sender: OwnedUserId, room: Room, client: Client) -> Res<()> {
|
/// Attaches a reaction to the message corresponding to `event`.
|
||||||
|
///
|
||||||
|
/// If sending the reaction fails, a warning is issued but not error is thrown.
|
||||||
|
pub async fn send_reaction(
|
||||||
|
room: Room,
|
||||||
|
event: impl AsRef<EventId>,
|
||||||
|
reaction: impl Into<String>,
|
||||||
|
) -> Res<()> {
|
||||||
|
use matrix_sdk::ruma::events::{reaction::ReactionEventContent, relation::Annotation};
|
||||||
|
let event = event.as_ref();
|
||||||
|
let reaction = reaction.into();
|
||||||
|
let reaction_res = room
|
||||||
|
.send(ReactionEventContent::new(Annotation::new(
|
||||||
|
event.into(),
|
||||||
|
reaction,
|
||||||
|
)))
|
||||||
|
.await;
|
||||||
|
if let Err(e) = reaction_res {
|
||||||
|
warn!("failed to send reaction, moving on...\n{}", e)
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn handle(
|
||||||
|
command: impl AsRef<str>,
|
||||||
|
event: OriginalSyncMessageLikeEvent<RoomMessageEventContent>,
|
||||||
|
room: Room,
|
||||||
|
client: Client,
|
||||||
|
) -> Res<()> {
|
||||||
debug!("handling command: {}", command.as_ref());
|
debug!("handling command: {}", command.as_ref());
|
||||||
|
|
||||||
|
let sender = event.sender;
|
||||||
|
|
||||||
let args = shlex::split(command.as_ref()).ok_or_else(lazyhow!("error: Invalid quoting"))?;
|
let args = shlex::split(command.as_ref()).ok_or_else(lazyhow!("error: Invalid quoting"))?;
|
||||||
|
|
||||||
let mut command = Clap::command();
|
let mut command = Clap::command();
|
||||||
|
|
@ -153,13 +185,13 @@ pub async fn handle(command: impl AsRef<str>, sender: OwnedUserId, room: Room, c
|
||||||
debug!("user asked for subscribe");
|
debug!("user asked for subscribe");
|
||||||
let _ = crate::grist::subscribe(id, sender.to_string()).await?;
|
let _ = crate::grist::subscribe(id, sender.to_string()).await?;
|
||||||
debug!("subscribe ok");
|
debug!("subscribe ok");
|
||||||
// confirm with tick reaction
|
send_reaction(room, event.event_id, "✔️").await?;
|
||||||
}
|
}
|
||||||
Action::Unsubscribe { id } => {
|
Action::Unsubscribe { id } => {
|
||||||
debug!("user asked for unsubscribe");
|
debug!("user asked for unsubscribe");
|
||||||
let _ = crate::grist::unsubscribe(id, sender.to_string()).await?;
|
let _ = crate::grist::unsubscribe(id, sender.to_string()).await?;
|
||||||
debug!("unsubscribe ok");
|
debug!("unsubscribe ok");
|
||||||
// confirm with tick reaction
|
send_reaction(room, event.event_id, "✔️").await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ pub async fn on_room_message(
|
||||||
event.sender, text_content.body, body
|
event.sender, text_content.body, body
|
||||||
);
|
);
|
||||||
|
|
||||||
command::handle(body, event.sender, room, client).await?;
|
command::handle(body, event.clone(), room, client).await?;
|
||||||
debug!("message successfully sent");
|
debug!("message successfully sent");
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue