This commit is contained in:
MedzikUser 2022-02-13 13:03:22 +01:00
parent 8c7c15e1f6
commit 8f68e0180f
No known key found for this signature in database
GPG Key ID: A5FAC1E185C112DB
6 changed files with 187 additions and 50 deletions

35
Cargo.lock generated
View File

@ -140,6 +140,16 @@ dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "ctrlc"
version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a19c6cedffdc8c03a3346d723eb20bd85a13362bb96dc2ac000842c6381ec7bf"
dependencies = [
"nix",
"winapi 0.3.9",
]
[[package]]
name = "discord-rich-presence"
version = "0.1.8"
@ -154,13 +164,14 @@ dependencies = [
]
[[package]]
name = "discord-rpc"
name = "discordrpc"
version = "0.1.0"
dependencies = [
"better-panic",
"clap",
"clap_complete",
"colored",
"ctrlc",
"discord-rich-presence",
]
@ -252,6 +263,15 @@ version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "memoffset"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
"autocfg",
]
[[package]]
name = "miniz_oxide"
version = "0.4.4"
@ -262,6 +282,19 @@ dependencies = [
"autocfg",
]
[[package]]
name = "nix"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
dependencies = [
"bitflags",
"cc",
"cfg-if",
"libc",
"memoffset",
]
[[package]]
name = "object"
version = "0.27.1"

View File

@ -1,15 +1,27 @@
[package]
name = "discord-rpc"
name = "discordrpc"
description = "Fast Discord RPC Client written in Rust"
license = "BSD-3-Clause"
authors = ["MedzikUser <nivua1fn@duck.com>"]
homepage = "https://github.com/MedzikUser/discord-rpc"
repository = "https://github.com/MedzikUser/discord-rpc.git"
keywords = ["discord", "discord-rpc", "discordrpc", "discord-rich-presence", "discord-rpc-client", "discord-rpc-builder"]
categories = ["command-line-utilities"]
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.release]
lto = true
panic = 'abort'
opt-level = 'z'
codegen-units = 1
[dependencies]
better-panic = "0.3.0"
clap_complete = "3.0.6"
colored = "2.0.0"
discord-rich-presence = "0.1.8"
ctrlc = "3.2.1"
[dependencies.clap]
version = "3.0.14"

View File

@ -1,23 +0,0 @@
use crate::cli::parse::Cli;
use clap::StructOpt;
pub fn state() -> String {
let args = Cli::parse();
if args.state != "none" {
args.state
} else {
"state".to_string()
}
}
pub fn details() -> String {
let args = Cli::parse();
if args.details != "none" {
args.details
} else {
"details".to_string()
}
}

View File

@ -1,5 +1,3 @@
pub mod check;
pub mod parse;
pub use check::*;
pub use parse::Cli;

View File

@ -5,52 +5,117 @@ use clap::Parser;
pub struct Cli {
#[clap(
short = 'c',
long = "client-id",
help = "Discord application Client ID",
required = true,
display_order = 1
)]
pub client_id: String,
#[clap(short = 's', help = "State", default_value = "none", required = false)]
pub state: String,
#[clap(
short = 'd',
long = "details",
help = "Details",
default_value = "none",
required = false
required = true,
display_order = 2
)]
pub details: String,
#[clap(
short = 's',
long = "state",
help = "State",
required = false,
default_value = "none",
display_order = 3
)]
pub state: String,
#[clap(
short = 'N',
long = "large-image",
help = "Large Image name",
default_value = "none",
required = false
required = false,
display_order = 4
)]
pub large_image: String,
#[clap(
short = 'I',
long = "large-image-text",
help = "Large Image text",
default_value = "none",
required = false
required = false,
display_order = 5
)]
pub large_text: String,
#[clap(
short = 'n',
long = "small-image",
help = "Small Image name",
default_value = "none",
required = false
required = false,
display_order = 6
)]
pub small_image: String,
#[clap(
short = 'i',
long = "small-image-text",
help = "Small Image text",
default_value = "none",
required = false
required = false,
display_order = 7
)]
pub small_text: String,
#[clap(
short = 'B',
long = "button-1-text",
help = "Button 1 Text",
default_value = "none",
required = false,
display_order = 8
)]
pub button_1_text: String,
#[clap(
short = 'T',
long = "button-1-url",
help = "Button 1 URL address",
default_value = "none",
required = false,
display_order = 9
)]
pub button_1_url: String,
#[clap(
short = 'b',
long = "button-2-text",
help = "Button 2 Text",
default_value = "none",
required = false,
display_order = 10
)]
pub button_2_text: String,
#[clap(
short = 't',
long = "button-2-url",
help = "Button 2 URL address",
default_value = "none",
required = false,
display_order = 11
)]
pub button_2_url: String,
#[clap(
short = 'e',
long = "timer",
help = "Enable timer (counted from the current time)",
display_order = 12
)]
pub enable_time: bool,
}

View File

@ -1,22 +1,37 @@
mod cli;
use crate::cli::*;
use std::{process::exit, vec, time::{UNIX_EPOCH, SystemTime}};
use clap::StructOpt;
use discord_rich_presence::{activity::{Activity, self}, new_client, DiscordIpc};
use colored::Colorize;
use discord_rich_presence::{
activity::{self, Activity},
new_client, DiscordIpc,
};
use crate::cli::Cli;
fn main() {
better_panic::install();
ctrlc::set_handler(move || {
println!("{}", "Bye!".red());
exit(0)
})
.expect("Error setting Ctrl-C handler");
let args = Cli::parse();
let state = state();
let details = details();
let state = args.state;
let details = args.details;
let large_image = args.large_image;
let large_text = args.large_text;
let small_image = args.small_image;
let small_text = args.small_text;
let button_1_text = args.button_1_text;
let button_1_url = args.button_1_url;
let button_2_text = args.button_2_text;
let button_2_url = args.button_2_url;
let enable_timer = args.enable_time;
let mut client = new_client(&args.client_id).expect("failed to create client");
@ -24,36 +39,73 @@ fn main() {
client
.connect()
.expect("failed to connect to Discord, Please try again or relaunch Discord");
.expect("failed to connect to Discord, please try again or relaunch Discord app");
let mut activity: Activity = activity.state(&state);
activity = activity.details(&details);
println!("{} {}", "details :".cyan(), details.yellow());
let mut activity: Activity = activity.details(&details);
if state != "none" {
println!("{} {}", "state :".cyan(), state.yellow());
activity = activity.state(&state);
}
let mut assets = activity::Assets::new();
if large_image != "none" {
println!("{} {}", "large image :".cyan(), large_image.yellow());
assets = assets.large_image(&large_image);
}
if large_text != "none" {
println!("{} {}", "large image text :".cyan(), large_text.yellow());
assets = assets.large_text(&large_text);
}
if small_image != "none" {
assets = assets.small_image(&large_image);
println!("{} {}", "small image :".cyan(), small_image.yellow());
assets = assets.small_image(&small_image);
}
if small_text != "none" {
assets = assets.small_text(&large_text);
println!("{} {}", "small image text :".cyan(), small_text.yellow());
assets = assets.small_text(&small_text);
}
activity = activity.assets(assets);
if button_1_text != "none" && button_1_url != "none" {
println!("{} {}", "button 1 text :".cyan(), button_1_text.yellow());
println!("{} {}", "button 1 url :".cyan(), button_1_url.yellow());
activity = activity.buttons(vec![activity::Button::new(&button_1_text, &button_1_url)]);
}
if button_1_text != "none" && button_1_url != "none" && button_2_text != "none" && button_2_url != "none" {
println!("{} {}", "button 2 text :".cyan(), button_2_text.yellow());
println!("{} {}", "button 2 url :".cyan(), button_2_url.yellow());
activity = activity.buttons(vec![activity::Button::new(&button_1_text, &button_1_url), activity::Button::new(&button_2_text, &button_2_url)]);
}
if enable_timer {
let time_unix = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() as i64;
activity = activity.timestamps(activity::Timestamps::new().start(time_unix))
}
client.set_activity(activity).expect("client set activity");
println!("{} {}", "state :".cyan(), state.yellow());
print!("{} {}\n", "Connected!".green(), "Press Ctrl+C to exit!".magenta());
println!(
"{} {}",
"Connected!".green(),
"Press Ctrl+C to exit!".magenta()
);
loop {}
}