mirror of
https://github.com/roleypoly/roleypoly.git
synced 2025-06-16 17:49:09 +00:00
port bot to rust, upgrade response, and cut away some of the tf cruft
This commit is contained in:
parent
0a37eff047
commit
f5fb729ce7
17 changed files with 1440 additions and 205 deletions
89
packages/bot/src/main.rs
Normal file
89
packages/bot/src/main.rs
Normal file
|
@ -0,0 +1,89 @@
|
|||
extern crate dotenv;
|
||||
extern crate tokio;
|
||||
|
||||
use dotenv::dotenv;
|
||||
use std::env;
|
||||
use serenity::{
|
||||
async_trait,
|
||||
model::{
|
||||
channel::Message,
|
||||
gateway::Ready,
|
||||
interactions::{
|
||||
message_component::ButtonStyle,
|
||||
},
|
||||
},
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
|
||||
struct Handler {
|
||||
ui_public_uri : String,
|
||||
ui_hostname : String,
|
||||
}
|
||||
|
||||
|
||||
#[async_trait]
|
||||
impl EventHandler for Handler {
|
||||
async fn message(&self, ctx: Context, msg: Message) {
|
||||
// No DMs, bots, or self.
|
||||
if msg.is_private() || msg.author.bot {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ignore messages that don't mention the bot
|
||||
if !msg.mentions_me(&ctx).await.unwrap_or(false) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.channel_id.send_message(&ctx, |m| {
|
||||
m.reference_message(&msg).allowed_mentions(|f| {
|
||||
f.replied_user(false)
|
||||
});
|
||||
|
||||
m.embed(|e| {
|
||||
e.title(":beginner: Howdy, pick your roles here!");
|
||||
e.description("Roleypoly will open in your browser.\n\nIf that's not cool with you, try the `/roleypoly` command!");
|
||||
e.url(&self.ui_public_uri);
|
||||
e.color(0x453e3d);
|
||||
e
|
||||
});
|
||||
|
||||
m.components(|c| {
|
||||
c.create_action_row(|r| {
|
||||
r.create_button(|b| {
|
||||
b.style(ButtonStyle::Link);
|
||||
b.url(&self.ui_public_uri);
|
||||
b.label(format!("Pick your roles on {}", self.ui_hostname));
|
||||
b
|
||||
});
|
||||
r
|
||||
});
|
||||
c
|
||||
});
|
||||
m
|
||||
}).await.unwrap();
|
||||
}
|
||||
|
||||
async fn ready(&self, _: Context, ready: Ready) {
|
||||
println!("{} is connected! (shard: {:?})", ready.user.name, ready.shard.unwrap_or_default());
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
dotenv().ok();
|
||||
let token = env::var("BOT_TOKEN").expect("BOT_TOKEN not set");
|
||||
let client_id: u64 = env::var("BOT_CLIENT_ID").expect("BOT_CLIENT_ID not set").parse().unwrap();
|
||||
let ui_public_uri = env::var("UI_PUBLIC_URI").expect("UI_PUBLIC_URI not set");
|
||||
let ui_hostname = url::Url::parse(&ui_public_uri).unwrap().host_str().unwrap().to_string();
|
||||
|
||||
let mut client =
|
||||
Client::builder(&token).application_id(client_id).event_handler(Handler {
|
||||
ui_public_uri,
|
||||
ui_hostname,
|
||||
}).await.expect("Err creating client");
|
||||
|
||||
if let Err(why) = client.start_autosharded().await {
|
||||
println!("Client error: {:?}", why);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue