Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fs::{File, OpenOptions, remove_file};
- use image::Luma;
- use whatsappweb::connection::*;
- use whatsappweb::message::{Direction, Peer, ChatMessageContent, ChatMessage};
- mod message;
- const SESSION_FILENAME: &str = "session.bin";
- struct Handler {}
- impl WhatsappWebHandler for Handler {
- fn on_state_changed(&self, _connection: &WhatsappWebConnection<Handler>, state: State) {
- println!("new state: {:?}", state);
- }
- fn on_persistent_session_data_changed(&self, persistent_session: PersistentSession) {
- bincode::serialize_into(OpenOptions::new().create(true).write(true).open(SESSION_FILENAME).unwrap(), &persistent_session).unwrap();
- }
- fn on_user_data_changed(&self, _connection: &WhatsappWebConnection<Handler>, user_data: UserData) {
- println!("userdata changed: {:?}", user_data);
- }
- fn on_disconnect(&self, reason: whatsappweb::connection::DisconnectReason) {
- println!("disconnected");
- match reason {
- whatsappweb::connection::DisconnectReason::Removed => {
- remove_file(SESSION_FILENAME).unwrap();
- }
- _ => {}
- }
- }
- fn on_message(&self, connection: &WhatsappWebConnection<Handler>, message_new: bool, message_box: Box<ChatMessage>) {
- if !message_new {
- return;
- }
- let message = *message_box;
- let peer = match message.direction {
- Direction::Receiving(peer) => peer,
- _ => return
- };
- let sender_jid = match &peer {
- &Peer::Individual(ref jid) => jid,
- _ => return
- };
- connection.send_message_read(message.id.clone(), peer.clone());
- match sender_jid.is_group {
- false => {
- match message.content {
- ChatMessageContent::Text(text) => {
- message::on_text_message(text, sender_jid);
- }
- _ => {
- message::on_media_message(message.content, sender_jid);
- }
- }
- }
- _ => {}
- }
- }
- }
- pub fn start() {
- let handler = Handler {};
- if let Ok(file) = File::open(SESSION_FILENAME) {
- let (_, join_handle) = whatsappweb::connection::with_persistent_session(bincode::deserialize_from(file).unwrap(), handler);
- join_handle.join().unwrap();
- } else {
- let (_, join_handle) = whatsappweb::connection::new(|qr| { qr.render::<Luma<u8>>().module_dimensions(10, 10).build().save("login_qr.png").unwrap(); }, handler);
- join_handle.join().unwrap();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement