Merge branch 'retrieve-reply-details' of https://git.flake.sh/modulatingforce/forcebot_rs into retrieve-reply-details
This commit is contained in:
commit
57725ee840
1 changed files with 59 additions and 2 deletions
|
@ -1,5 +1,4 @@
|
||||||
|
use twitch_irc::message::{PrivmsgMessage, TwitchUserBasics};
|
||||||
use twitch_irc::message::PrivmsgMessage;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
|
@ -57,9 +56,67 @@ impl ExecBodyParams {
|
||||||
requestor_badge_mut
|
requestor_badge_mut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns some information about the message that was replied to by the `PrivmsgMessage` contained
|
||||||
|
/// in the `msg` field of this struct.
|
||||||
|
///
|
||||||
|
/// If that message replied to message return that information in form of `Some<ReplyParent>`.
|
||||||
|
/// Otherwise, return `None`.
|
||||||
|
pub fn get_parent_reply(&self) -> Option<ReplyParent> {
|
||||||
|
let map = &self.msg.source.tags.0;
|
||||||
|
let tags = [
|
||||||
|
"reply-parent-user-id",
|
||||||
|
"reply-parent-user-login",
|
||||||
|
"reply-parent-display-name",
|
||||||
|
"reply-parent-msg-id",
|
||||||
|
"reply-parent-msg-body"
|
||||||
|
];
|
||||||
|
|
||||||
|
// filter out all tags that do not have content.
|
||||||
|
let tag_contents: Vec<String> = tags.iter().filter_map(|tag| {
|
||||||
|
if let Some(&Some(ref t)) = map.get(*tag) {
|
||||||
|
Some(t.clone())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
// if no tags got filtered out return the struct.
|
||||||
|
// else return `None`.
|
||||||
|
return if tag_contents.len() == 5 {
|
||||||
|
Some(ReplyParent {
|
||||||
|
sender: TwitchUserBasics {
|
||||||
|
id: tag_contents[0].clone(),
|
||||||
|
login: tag_contents[1].clone(),
|
||||||
|
name: tag_contents[2].clone(),
|
||||||
|
},
|
||||||
|
message_id: tag_contents[3].clone(),
|
||||||
|
message_text: tag_contents[4].clone(),
|
||||||
|
channel_login: self.msg.channel_login.clone(),
|
||||||
|
channel_id: self.msg.channel_id.clone(),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Represents the message a `PrivmsgMessage` replies to.
|
||||||
|
/// Similar to a less detailed `PrivmsgMessage`.
|
||||||
|
///
|
||||||
|
/// This should not be constructed manually but only from calling `get_parent_reply()` on
|
||||||
|
/// `ExecBodyParams`.
|
||||||
|
///
|
||||||
|
/// Fields that will be the same as the `PrivmsgMessage` this was generated from:
|
||||||
|
/// - `channel_login`
|
||||||
|
/// - `channel_id`
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub struct ReplyParent {
|
||||||
|
pub sender: TwitchUserBasics,
|
||||||
|
pub message_id: String,
|
||||||
|
pub message_text: String,
|
||||||
|
pub channel_login: String,
|
||||||
|
pub channel_id: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pub mod actions_util {
|
pub mod actions_util {
|
||||||
|
|
Loading…
Reference in a new issue