This commit is contained in:
2026-03-14 22:16:46 +01:00
parent 8d4a002b73
commit 1564a4de44
2 changed files with 64 additions and 12 deletions
+63 -12
View File
@@ -2,10 +2,12 @@ mod commands;
use std::env; use std::env;
use async_nats::jetstream::{self, context::traits::Requester};
use serenity::{ use serenity::{
Client, Client,
all::{Context, EventHandler, GatewayIntents}, all::{Context, EventHandler, GatewayIntents},
async_trait, async_trait,
futures::future::ErrInto,
model::{ model::{
application::{Command, Interaction}, application::{Command, Interaction},
gateway::Ready, gateway::Ready,
@@ -65,26 +67,75 @@ impl EventHandler for Handler {
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
// Configure the client with your Discord bot token in the environment.
let discord_token = env::var("DISCORD_TOKEN").expect("Expected a token in the environment"); let discord_token = env::var("DISCORD_TOKEN").expect("Expected a token in the environment");
let nats_client = async_nats::connect("nats://localhost:4222") let nats_client = async_nats::connect("nats://localhost:4222")
.await .await
.expect("Error creating nats client"); .expect("Error creating nats client");
let handler = Handler { nats_client }; let jetstream_client = jetstream::new(nats_client.clone());
// Build our client. let stream = jetstream_client
let mut discord_client = Client::builder(discord_token, GatewayIntents::non_privileged()) .create_stream(jetstream::stream::Config {
.event_handler(handler) name: "LOCKS".to_string(),
subjects: vec!["locks.*".to_string()],
storage: jetstream::stream::StorageType::Memory,
max_messages_per_subject: 1,
discard_new_per_subject: true,
discard: jetstream::stream::DiscardPolicy::New,
..Default::default()
})
.await .await
.expect("Error creating discord client"); .expect("Error creating locks stream");
// Finally, start a single shard, and start listening to events. println!("created the stream");
//
// Shards will automatically attempt to reconnect, and will perform exponential backoff until match jetstream_client.publish("locks.a", "test".into()).await.unwrap().await {
// it reconnects. Ok(a) => {
if let Err(why) = discord_client.start().await { println!("publish ok {:?}", a);
println!("Client start error: {why:?}");
} }
Err(why) => {
println!("{why:?}");
}
}
// match jetstream_client.request("locks.a", "test").await {
// Ok(a) => {
// println!("publish ok {a:?}");
// Ok("a")
// }
// Err(why) => {
// println!("{why:?}");
// Err("a")
// }
// };
// match jetstream_client.publish("locks.b", "test".into()).await {
// Ok(a) => {
// println!("publish ok {a:?}");
// }
// Err(why) => {
// println!("{why:?}");
// }
// };
// match jetstream_client.publish("locks.a", "test".into()).await {
// Ok(a) => {
// println!("publish ok {a:?}");
// }
// Err(why) => {
// println!("{why:?}");
// }
// };
println!("done");
// let handler = Handler { nats_client };
// let mut discord_client = Client::builder(discord_token, GatewayIntents::non_privileged())
// .event_handler(handler)
// .await
// .expect("Error creating discord client");
// if let Err(why) = discord_client.start().await {
// println!("Client start error: {why:?}");
// }
} }
+1
View File
@@ -3,3 +3,4 @@ services:
image: nats:2.12.5-alpine3.22 image: nats:2.12.5-alpine3.22
ports: ports:
- 127.0.0.1:4222:4222 - 127.0.0.1:4222:4222
command: --jetstream