mirror of
https://github.com/MeexReay/bRAC.git
synced 2025-05-06 13:38:04 +03:00
message formating
This commit is contained in:
parent
8b64a2e1c3
commit
8b9b870172
45
Cargo.lock
generated
45
Cargo.lock
generated
@ -2,11 +2,21 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bRAC"
|
||||
version = "1.99.2"
|
||||
dependencies = [
|
||||
"rand",
|
||||
"regex",
|
||||
"termion",
|
||||
]
|
||||
|
||||
@ -57,6 +67,12 @@ dependencies = [
|
||||
"redox_syscall",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "numtoa"
|
||||
version = "0.2.4"
|
||||
@ -136,6 +152,35 @@ version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb"
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-automata",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.98"
|
||||
|
@ -6,3 +6,4 @@ edition = "2021"
|
||||
[dependencies]
|
||||
rand = "0.9.0"
|
||||
termion = "4.0.3"
|
||||
regex = "1.11.1"
|
62
src/main.rs
62
src/main.rs
@ -1,16 +1,28 @@
|
||||
use std::{error::Error, fmt::format, fs, io::{stdin, stdout, BufRead, Read, Write}, net::TcpStream, sync::{Arc, RwLock}, thread, time::{self, Duration, SystemTime, UNIX_EPOCH}};
|
||||
use std::{
|
||||
error::Error, io::{stdin, stdout, BufRead, Read, Write}, net::TcpStream, sync::{Arc, RwLock}, thread
|
||||
};
|
||||
|
||||
use rand::random;
|
||||
use termion::{event::Key, input::TermRead, raw::IntoRawMode};
|
||||
use regex::Regex;
|
||||
use termion::{color, event::Key, input::TermRead, raw::IntoRawMode, style};
|
||||
|
||||
const MAX_MESSAGES: usize = 100;
|
||||
const DEFAULT_HOST: &str = "meex.lol:11234";
|
||||
const MAGIC_KEY: &str = "리㹰";
|
||||
|
||||
fn send_message(host: &str, message: &str) -> Result<(), Box<dyn Error>> {
|
||||
let mut stream = TcpStream::connect(host)?;
|
||||
stream.write_all(&[0x01])?;
|
||||
stream.write_all(message.as_bytes())?;
|
||||
stream.write_all("\0".repeat(1023 - message.len()).as_bytes())?;
|
||||
let data = format!("\r{}{}",
|
||||
message,
|
||||
if message.chars().count() < 39 {
|
||||
" ".repeat(39-message.chars().count())
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
);
|
||||
stream.write_all(data.as_bytes())?;
|
||||
stream.write_all("\0".repeat(1023 - data.len()).as_bytes())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -47,7 +59,6 @@ fn read_messages(host: &str) -> Result<String, Box<dyn Error>> {
|
||||
.parse()?
|
||||
};
|
||||
|
||||
// println!("{} {}", skip, packet_size);
|
||||
stream.write_all(&[0x01])?;
|
||||
|
||||
let packet_data = {
|
||||
@ -97,6 +108,42 @@ fn get_input(prompt: &str, default: &str) -> String {
|
||||
}.to_string()
|
||||
}
|
||||
|
||||
fn on_message(message: String) -> String {
|
||||
let message = Regex::new(r"\{[^}]*\}\ ").unwrap().replace(&message, "").to_string();
|
||||
let message = message.replace("\r", "");
|
||||
let message = message.replace("\0", "");
|
||||
let message = message.replace("\t", "");
|
||||
|
||||
let captures = Regex::new(r"\[(.*?)\] <(.*?)> (.*)").unwrap().captures(&message)
|
||||
.or_else(|| Regex::new(&format!("\\[(.*?)\\] {}<(.*?)> (.*)", MAGIC_KEY)).unwrap().captures(&message))
|
||||
.or_else(|| Regex::new(&format!("\\[(.*?)\\] {} <(.*?)> (.*)", MAGIC_KEY)).unwrap().captures(&message))
|
||||
.or_else(|| Regex::new(r"\[(.*?)\] (.*?): (.*)").unwrap().captures(&message));
|
||||
|
||||
if let Some(captures) = captures {
|
||||
let date = &captures[1];
|
||||
let nick = &captures[2];
|
||||
let content = &captures[3];
|
||||
|
||||
let mut result = String::new();
|
||||
result.push_str(&format!("{}{}[{}] ", color::Fg(color::White), style::Faint, date));
|
||||
result.push_str(&format!("{}{}{}<{}> ", style::Reset, style::Bold, color::Fg(color::Cyan), nick));
|
||||
result.push_str(&format!("{}{}{}", color::Fg(color::White), style::Blink, content));
|
||||
result.push_str(&style::Reset.to_string());
|
||||
result
|
||||
} else if let Some(captures) = Regex::new(r"\[(.*?)\] (.*)").unwrap().captures(&message) {
|
||||
let date = &captures[1];
|
||||
let content = &captures[2];
|
||||
|
||||
let mut result = String::new();
|
||||
result.push_str(&format!("{}{}[{}] ", color::Fg(color::White), style::Faint, date));
|
||||
result.push_str(&format!("{}{}{}{}", style::Reset, color::Fg(color::White), style::Blink, content));
|
||||
result.push_str(&style::Reset.to_string());
|
||||
result
|
||||
} else {
|
||||
message
|
||||
}
|
||||
}
|
||||
|
||||
fn print_console(messages: &str, input: &str) -> Result<(), Box<dyn Error>> {
|
||||
let mut messages = messages.split("\n")
|
||||
.map(|o| o.to_string())
|
||||
@ -104,6 +151,7 @@ fn print_console(messages: &str, input: &str) -> Result<(), Box<dyn Error>> {
|
||||
messages.reverse();
|
||||
messages.truncate(MAX_MESSAGES);
|
||||
messages.reverse();
|
||||
let messages: Vec<String> = messages.into_iter().map(on_message).collect();
|
||||
let mut out = stdout().into_raw_mode()?;
|
||||
let text = format!("{}{}\n> {}", "\n".repeat(MAX_MESSAGES - messages.len()), messages.join("\n"), input);
|
||||
for line in text.lines() {
|
||||
@ -132,7 +180,7 @@ fn main() {
|
||||
}
|
||||
});
|
||||
|
||||
let stdout = stdout().into_raw_mode().unwrap();
|
||||
let _ = stdout().into_raw_mode().unwrap();
|
||||
|
||||
let stdin = stdin();
|
||||
for key in stdin.keys() {
|
||||
@ -140,7 +188,7 @@ fn main() {
|
||||
Key::Char('\n') => {
|
||||
let message = input.read().unwrap().clone();
|
||||
if !message.is_empty() {
|
||||
send_message(&host, &format!("<{}> {}", name, message)).expect("Error sending message");
|
||||
send_message(&host, &format!("{}<{}> {}", MAGIC_KEY, name, message)).expect("Error sending message");
|
||||
input.write().unwrap().clear();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user