Как в Rust фоном запустить Discord RPC?
Разрабатываю Tauri приложение, столкнулся со следующей проблемой: Требуется отображать через Discord RPC текущее состояние в приложении, решил использовать библиотеку discord_rich_presence
use discord_rich_presence::{activity, DiscordIpc, DiscordIpcClient};
fn main() {
let mut client = DiscordIpcClient::new("1222240908393844876").unwrap();
match client.connect() {
Ok(t) => t,
Err(err) => return ()
}
client.set_activity(activity::Activity::new()
.details("Находится в лаунчере")
.assets(discord_rich_presence::activity::Assets::new()
.large_image("logo")
)
).expect("Cannot set activity message!");
std::thread::park();
}
Cargo.toml:
[package]
name = "rust_learn"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
discord-rich-presence = "0.2.3"
Код работает, но при встраивании в tauri код строчка std::thread::park()
не даёт запустить само приложение:
fn main() {
let mut client = DiscordIpcClient::new("1222240908393844876").unwrap();
match client.connect() {
Ok(t) => t,
Err(err) => return ()
}
client.set_activity(activity::Activity::new()
.details("Находится в лаунчере")
.assets(discord_rich_presence::activity::Assets::new()
.large_image("logo")
)
).expect("Cannot set activity message!");
std::thread::park();
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![check_version, download_version])
.run(tauri::generate_context!())
.expect("failed to run app");
}
Как запустить Discord RPC фоновым приложением, или каким-либо другим образом, чтобы Tauri приложение работало?
Дополнение: Попробовал добавить
client.close()
вместо паркинга - через 15 секунд активность пропадает.
Ответы (1 шт):
Discord RPC работает пока запущена команда, а соответственно мне было достаточно вставить код перед запуском Tauri приложения и убрать std::thread::park()
дабы оно запустилось.
Собственно вот рабочий код:
use discord_rich_presence::{activity, DiscordIpc, DiscordIpcClient};
use chrono::Utc;
fn main() {
let client_id = "1222240908393844876";
let mut client = DiscordIpcClient::new(client_id).unwrap();
client.connect().unwrap();
let timestamp = Utc::now().timestamp();
client.set_activity(activity::Activity::new()
.details("В лаунчере")
.timestamps(discord_rich_presence::activity::Timestamps::new()
.start(timestamp)
)
.assets(discord_rich_presence::activity::Assets::new()
.large_image("logo")
)
).expect("Cannot set activity message!");
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![ check_version, download_version, launch_minecraft ])
.run(tauri::generate_context!())
.expect("failed to run app");
}