Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
Dan Ballard | 3186856eab |
|
@ -26,7 +26,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl imp::EventHandler for Echobot {
|
impl imp::EventHandler for Echobot {
|
||||||
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(&mut self, cwtch: &dyn libcwtch::CwtchLib, behaviour: &mut Behaviour, profile: &Profile, conversation_id: ConversationID, _handle: String, _timestamp_received: DateTime<FixedOffset>, message: MessageWrapper) {
|
||||||
let response = MessageWrapper {
|
let response = MessageWrapper {
|
||||||
o: MessageType::TextMessage,
|
o: MessageType::TextMessage,
|
||||||
d: message.d,
|
d: message.d,
|
||||||
|
|
30
src/imp.rs
30
src/imp.rs
|
@ -1,3 +1,4 @@
|
||||||
|
use std::ops::Index;
|
||||||
use chrono::{DateTime, FixedOffset};
|
use chrono::{DateTime, FixedOffset};
|
||||||
use libcwtch::structs::*;
|
use libcwtch::structs::*;
|
||||||
use libcwtch::CwtchLib;
|
use libcwtch::CwtchLib;
|
||||||
|
@ -18,10 +19,10 @@ pub trait EventHandler {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn on_new_contact(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, convo_id: ConversationID) {}
|
fn on_new_contact(&self, cwtch: &dyn libcwtch::CwtchLib, profile: &Profile, convo_id: ConversationID) {}
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
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(&mut self, cwtch: &dyn libcwtch::CwtchLib, behaviour: &mut Behaviour, 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, contact: ContactIdentity, timestamp_sent: DateTime<FixedOffset>, message: MessageWrapper) {}
|
fn on_new_message_from_group(&mut self, cwtch: &dyn libcwtch::CwtchLib, behaviour: &mut Behaviour, profile: &Profile, conversation_id: ConversationID, contact: ContactIdentity, timestamp_sent: DateTime<FixedOffset>, message: MessageWrapper) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cwtch bot
|
/// Cwtch bot
|
||||||
|
@ -54,6 +55,19 @@ impl Imp {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn behaviour_mut(&self) -> &Behaviour {
|
||||||
|
&self.behaviour
|
||||||
|
}
|
||||||
|
pub fn behaviour_allowlist_add(&mut self, contact: ContactIdentity) {
|
||||||
|
self.behaviour.allow_list.peers.push(contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn behaviour_allowlist_rm(&mut self, contact: ContactIdentity) {
|
||||||
|
if let Some(index) = self.behaviour.allow_list.peers.iter().position(|c| *c == contact) {
|
||||||
|
self.behaviour.allow_list.peers.remove(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The main event loop handler for the bot, supply your own customer handler to handle events after the imp's automatic handling has processed the event
|
/// The main event loop handler for the bot, supply your own customer handler to handle events after the imp's automatic handling has processed the event
|
||||||
#[allow(unused_variables, unused_mut)]
|
#[allow(unused_variables, unused_mut)]
|
||||||
pub fn event_loop<T>(&mut self, handler: &mut T)
|
pub fn event_loop<T>(&mut self, handler: &mut T)
|
||||||
|
@ -205,16 +219,16 @@ impl Imp {
|
||||||
if let Some(profile) = self.profile.as_ref() {
|
if let Some(profile) = self.profile.as_ref() {
|
||||||
match &self.behaviour.contact_interaction_policy {
|
match &self.behaviour.contact_interaction_policy {
|
||||||
ContactInteractionPolicy::Ignore => (),
|
ContactInteractionPolicy::Ignore => (),
|
||||||
ContactInteractionPolicy::Accept => handler.on_new_message_from_contact(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone()),
|
ContactInteractionPolicy::Accept => handler.on_new_message_from_contact(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone()),
|
||||||
ContactInteractionPolicy::AcceptFromContact=> {
|
ContactInteractionPolicy::AcceptFromContact=> {
|
||||||
if profile.conversations[conversation_id].accepted {
|
if profile.conversations[conversation_id].accepted {
|
||||||
handler.on_new_message_from_contact(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone());
|
handler.on_new_message_from_contact(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ContactInteractionPolicy::AllowList => {
|
ContactInteractionPolicy::AllowList => {
|
||||||
if let Some(conversation) = profile.conversations.get(&conversation_id) {
|
if let Some(conversation) = profile.conversations.get(&conversation_id) {
|
||||||
if self.behaviour.allow_list.peers.contains(&conversation.contact_id) {
|
if self.behaviour.allow_list.peers.contains(&conversation.contact_id) {
|
||||||
handler.on_new_message_from_contact(self.cwtch.as_ref(), profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone());
|
handler.on_new_message_from_contact(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), nick.clone(), timestamp_received.clone(), message.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -226,17 +240,17 @@ impl Imp {
|
||||||
if let Some(profile) = self.profile.as_ref() {
|
if let Some(profile) = self.profile.as_ref() {
|
||||||
match &self.behaviour.group_interaction_policy {
|
match &self.behaviour.group_interaction_policy {
|
||||||
GroupInteractionPolicy::Ignore => (),
|
GroupInteractionPolicy::Ignore => (),
|
||||||
GroupInteractionPolicy::Accept => handler.on_new_message_from_group(self.cwtch.as_ref(), profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone()),
|
GroupInteractionPolicy::Accept => handler.on_new_message_from_group(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone()),
|
||||||
GroupInteractionPolicy::AcceptFromContact=> {
|
GroupInteractionPolicy::AcceptFromContact=> {
|
||||||
if let Some(contact_convo_id) = profile.find_conversation_id_by_handle(contact_id.clone()) {
|
if let Some(contact_convo_id) = profile.find_conversation_id_by_handle(contact_id.clone()) {
|
||||||
if profile.conversations[&contact_convo_id].accepted {
|
if profile.conversations[&contact_convo_id].accepted {
|
||||||
handler.on_new_message_from_group(self.cwtch.as_ref(), profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone())
|
handler.on_new_message_from_group(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
GroupInteractionPolicy::AllowList => {
|
GroupInteractionPolicy::AllowList => {
|
||||||
if self.behaviour.allow_list.peers.contains(&contact_id) {
|
if self.behaviour.allow_list.peers.contains(&contact_id) {
|
||||||
handler.on_new_message_from_group(self.cwtch.as_ref(), profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone())
|
handler.on_new_message_from_group(self.cwtch.as_ref(), &mut self.behaviour, profile, conversation_id.clone(), contact_id.clone(), timestamp_sent.clone(), message.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue