update
This commit is contained in:
parent
8c7c15e1f6
commit
8f68e0180f
|
@ -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"
|
||||
|
|
16
Cargo.toml
16
Cargo.toml
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -1,5 +1,3 @@
|
|||
pub mod check;
|
||||
pub mod parse;
|
||||
|
||||
pub use check::*;
|
||||
pub use parse::Cli;
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
78
src/main.rs
78
src/main.rs
|
@ -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 {}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue