Retrieve Reply information from ExecBodyParams
#52
1 changed files with 59 additions and 2 deletions
|
@ -1,5 +1,4 @@
|
|||
|
||||
use twitch_irc::message::PrivmsgMessage;
|
||||
use twitch_irc::message::{PrivmsgMessage, TwitchUserBasics};
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
|
@ -57,9 +56,67 @@ impl ExecBodyParams {
|
|||
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,
|
||||
}
|
||||
modulatingforce
commented
`ExecBodyParams`
New Struct - `pub struct ReplyParent`
|
||||
|
||||
|
||||
pub mod actions_util {
|
||||
|
|
Loading…
Reference in a new issue
ExecBodyParams
New Method -
pub fn get_parent_reply(&self) -> Option<ReplyParent>