implement group policy; group api fixes in experimental libcwtch-rs
This commit is contained in:
parent
11485a3d8f
commit
76fa84bd66
|
@ -29,6 +29,15 @@ pub enum NewContactPolicy {
|
||||||
AllowList(AllowListMembers)
|
AllowList(AllowListMembers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum GroupInvitePolicy {
|
||||||
|
/// Ignore all group invites
|
||||||
|
IgnoreAll,
|
||||||
|
/// Accept all group invites
|
||||||
|
AcceptAll,
|
||||||
|
/// Only accept group invites from contacts. Pairs strongly with NewContactPolicy of AllowList
|
||||||
|
AcceptFromContact,
|
||||||
|
}
|
||||||
|
|
||||||
/// Settings for the bot on how it should automatically behave
|
/// Settings for the bot on how it should automatically behave
|
||||||
pub struct Behaviour {
|
pub struct Behaviour {
|
||||||
/// The bot will enable experimental feautres (required for any experiments to be used)
|
/// The bot will enable experimental feautres (required for any experiments to be used)
|
||||||
|
@ -47,6 +56,9 @@ pub struct Behaviour {
|
||||||
|
|
||||||
/// Policy dictacting how the bot should automatically handle ContactCreated events
|
/// Policy dictacting how the bot should automatically handle ContactCreated events
|
||||||
pub new_contant_policy: NewContactPolicy,
|
pub new_contant_policy: NewContactPolicy,
|
||||||
|
|
||||||
|
/// Policy dictating how the bot should handle Group Invites
|
||||||
|
pub group_invite_policy: GroupInvitePolicy,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// intermediary struct for building a Behaviour using builder patern
|
/// intermediary struct for building a Behaviour using builder patern
|
||||||
|
@ -63,6 +75,7 @@ impl BehaviourBuilder {
|
||||||
proto_experiment_fileshare: false,
|
proto_experiment_fileshare: false,
|
||||||
proto_experiment_groups: false,
|
proto_experiment_groups: false,
|
||||||
new_contant_policy: NewContactPolicy::Ignore,
|
new_contant_policy: NewContactPolicy::Ignore,
|
||||||
|
group_invite_policy: GroupInvitePolicy::IgnoreAll,
|
||||||
profile_name: "".to_string(),
|
profile_name: "".to_string(),
|
||||||
profile_pic_path: None,
|
profile_pic_path: None,
|
||||||
},
|
},
|
||||||
|
@ -107,4 +120,9 @@ impl BehaviourBuilder {
|
||||||
self.behaviour.new_contant_policy = val;
|
self.behaviour.new_contant_policy = val;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn group_invite_policy(mut self, val: GroupInvitePolicy) -> Self {
|
||||||
|
self.behaviour.group_invite_policy = val;
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
41
src/imp.rs
41
src/imp.rs
|
@ -1,9 +1,11 @@
|
||||||
use chrono::{DateTime, FixedOffset};
|
use chrono::{DateTime, FixedOffset};
|
||||||
use libcwtch::structs::*;
|
use libcwtch::structs::*;
|
||||||
use libcwtch::CwtchLib;
|
use libcwtch::CwtchLib;
|
||||||
use libcwtch::event::{ConversationID, Event};
|
use libcwtch::event::{ContactIdentity, ConversationID, Event};
|
||||||
|
use libcwtch::structs::MessageType::InviteGroup;
|
||||||
|
|
||||||
use crate::behaviour::{Behaviour, NewContactPolicy};
|
use crate::behaviour::{Behaviour, GroupInvitePolicy, NewContactPolicy};
|
||||||
|
use crate::behaviour::GroupInvitePolicy::AcceptAll;
|
||||||
use crate::behaviour::NewContactPolicy::AllowList;
|
use crate::behaviour::NewContactPolicy::AllowList;
|
||||||
|
|
||||||
/// Trait to be used by implementors of imp bots to supply their custom event handling
|
/// Trait to be used by implementors of imp bots to supply their custom event handling
|
||||||
|
@ -20,7 +22,7 @@ pub trait EventHandler {
|
||||||
fn on_new_message_from_contact(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, conversation_id: ConversationID, handle: String, timestamp_received: DateTime<FixedOffset>, message: MessageWrapper) {}
|
fn on_new_message_from_contact(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, conversation_id: ConversationID, handle: String, timestamp_received: DateTime<FixedOffset>, message: MessageWrapper) {}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn on_new_message_from_group(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, conversation_id: ConversationID, handle: String, timestamp_sent: DateTime<FixedOffset>, message: MessageWrapper) {}
|
fn on_new_message_from_group(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, conversation_id: ConversationID, contact: ContactIdentity, timestamp_sent: DateTime<FixedOffset>, message: MessageWrapper) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cwtch bot
|
/// Cwtch bot
|
||||||
|
@ -111,14 +113,6 @@ impl Imp {
|
||||||
panic!("error parsing profile: {}", e);
|
panic!("error parsing profile: {}", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Share profile image
|
|
||||||
match self.settings.as_ref() {
|
|
||||||
Some(_settings) => {
|
|
||||||
self.cwtch.share_file(&profile_id, ConversationID(-1), "build_bot.png");
|
|
||||||
}
|
|
||||||
None => (),
|
|
||||||
};
|
|
||||||
|
|
||||||
self.cwtch.set_profile_attribute(
|
self.cwtch.set_profile_attribute(
|
||||||
&profile_id,
|
&profile_id,
|
||||||
"profile.name",
|
"profile.name",
|
||||||
|
@ -139,7 +133,6 @@ impl Imp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
self.profile = Some(ok_profile.clone());
|
self.profile = Some(ok_profile.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,14 +183,28 @@ impl Imp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::NewMessageFromPeer {profile_id, conversation_id,contact_id, nick, timestamp_received, message, notification, picture } => {
|
Event::NewMessageFromPeer {profile_id, conversation_id,contact_id, nick, timestamp_received, message, notification, picture } => {
|
||||||
match self.profile.as_ref() {
|
if message.o == InviteGroup {
|
||||||
Some(profile) => handler.on_new_message_from_contact(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone()),
|
if let Some(profile) = self.profile.as_ref() {
|
||||||
None => {},
|
match self.behaviour.group_invite_policy {
|
||||||
|
GroupInvitePolicy::IgnoreAll => (),
|
||||||
|
GroupInvitePolicy::AcceptAll => self.cwtch.import_bundle(profile_id, message.d.as_str()),
|
||||||
|
GroupInvitePolicy::AcceptFromContact=> {
|
||||||
|
if profile.conversations[conversation_id].accepted {
|
||||||
|
self.cwtch.import_bundle(profile_id, message.d.as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
match self.profile.as_ref() {
|
||||||
|
Some(profile) => handler.on_new_message_from_contact(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone()),
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::NewMessageFromGroup { profile_id, conversation_id, timestamp_sent, contact_id, index, message, content_hash, picture, nick, notification, } => {
|
Event::NewMessageFromGroup { profile_id, conversation_id, timestamp_sent, contact_id, index, message, content_hash, picture, notification, } => {
|
||||||
if let Some(profile )= self.profile.as_ref() {
|
if let Some(profile )= self.profile.as_ref() {
|
||||||
handler.on_new_message_from_group(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_sent.clone(), message.clone())
|
handler.on_new_message_from_group(self.cwtch.as_ref(), profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::ErrUnhandled { name, data } => eprintln!("unhandled event: {}!", name),
|
Event::ErrUnhandled { name, data } => eprintln!("unhandled event: {}!", name),
|
||||||
|
|
Loading…
Reference in New Issue