This repository has been archived by the owner on Mar 16, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
General Cleanup and Performance (#5)
* Organization for GQL addition * Removed unused deps * Stop cloning everything... * guild lookup schema
- Loading branch information
Showing
22 changed files
with
1,038 additions
and
126 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
2 changes: 1 addition & 1 deletion
2
src/commands/admin/kill.rs → src/discord/commands/admin/kill.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
src/commands/admin/ping.rs → src/discord/commands/admin/ping.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
use crate::discord::{ | ||
commands::{help::*, *}, | ||
handler, | ||
shard::{PostgresPool, ShardManagerContainer}, | ||
}; | ||
use bb8_postgres::PostgresConnectionManager; | ||
use postgres::NoTls; | ||
use serenity::client::bridge::gateway::ShardManager; | ||
use serenity::prelude::Mutex; | ||
use serenity::{client::Client, framework::standard::StandardFramework, model::id::UserId}; | ||
use std::{collections::HashSet, env, sync::Arc}; | ||
|
||
pub async fn setup(pool: &bb8::Pool<PostgresConnectionManager<NoTls>>) -> Arc<Mutex<ShardManager>> { | ||
let token: String = env::var("DISCORD_TOKEN").expect("Missing token env"); | ||
|
||
let mut owners = HashSet::new(); | ||
owners.insert(UserId(83281345949728768)); | ||
|
||
let framework = StandardFramework::new() | ||
.configure(|c| { | ||
c.owners(owners) | ||
.prefix("!") | ||
.ignore_bots(true) | ||
.ignore_webhooks(true) | ||
.allow_dm(false) | ||
}) | ||
.help(&HELP) | ||
// .group(&GENERAL_GROUP) | ||
.group(&ADMIN_GROUP); | ||
|
||
let mut client: Client = Client::new(&token) | ||
.event_handler(handler::Handler) | ||
.framework(framework) | ||
.await | ||
.expect("Error creating client"); | ||
|
||
{ | ||
let mut data = client.data.write().await; | ||
data.insert::<ShardManagerContainer>(Arc::clone(&client.shard_manager)); | ||
data.insert::<PostgresPool>(pool.clone()); | ||
} | ||
|
||
let shards = Arc::clone(&client.shard_manager); | ||
tokio::spawn(async move { | ||
client | ||
.start_autosharded() | ||
.await | ||
.expect("Failed to start autosharding."); | ||
}); | ||
shards | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
pub mod commands; | ||
pub mod connection; | ||
pub mod handler; | ||
pub mod shard; |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
pub mod schema; | ||
pub mod server; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
use async_graphql::{Context, FieldError, FieldResult}; | ||
use bb8_postgres::PostgresConnectionManager; | ||
use postgres::NoTls; | ||
|
||
pub type PostgresPool = bb8::Pool<PostgresConnectionManager<NoTls>>; | ||
|
||
pub struct Guild { | ||
pub id: i64, | ||
pub name: String, | ||
} | ||
|
||
#[async_graphql::Object] | ||
impl Guild { | ||
async fn id(&self) -> &i64 { | ||
&self.id | ||
} | ||
|
||
async fn created_at(&self) -> i64 { | ||
(&self.id >> 22) + 1420070400000 | ||
} | ||
|
||
async fn name(&self) -> &str { | ||
&self.name | ||
} | ||
} | ||
|
||
pub struct QueryRoot; | ||
|
||
#[async_graphql::Object] | ||
impl QueryRoot { | ||
async fn guild(&self, ctx: &Context<'_>, id: i64) -> FieldResult<Guild> { | ||
let pool = match ctx.data_unchecked::<PostgresPool>().get().await { | ||
Ok(pool) => pool, | ||
Err(_) => return Err(FieldError("Fatal db pool error".to_string(), None)), | ||
}; | ||
|
||
let guild = match pool | ||
.query("SELECT id, name FROM guilds WHERE id = $1", &[&id]) | ||
.await | ||
{ | ||
Ok(guild) => guild, | ||
Err(e) => { | ||
println!("{}", e); | ||
return Err(FieldError("Failed to fetch guild".to_string(), None)); | ||
} | ||
}; | ||
|
||
if guild.len() == 0 { | ||
return Err(FieldError("Guild not found".to_string(), None)); | ||
} | ||
|
||
let guild = &guild[0]; | ||
|
||
Ok(Guild { | ||
id: guild.get(0), | ||
name: guild.get(1), | ||
}) | ||
} | ||
} | ||
|
||
pub struct MutationRoot; | ||
|
||
#[async_graphql::Object] | ||
impl MutationRoot {} | ||
|
||
pub struct SubscriptionRoot; | ||
|
||
#[async_graphql::Subscription] | ||
impl SubscriptionRoot {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
use crate::graphql::schema::{MutationRoot, PostgresPool, QueryRoot, SubscriptionRoot}; | ||
use async_graphql::http::{playground_source, GraphQLPlaygroundConfig}; | ||
use async_graphql::{QueryBuilder, Schema}; | ||
use async_graphql_warp::{graphql_subscription, GQLResponse}; | ||
use std::convert::Infallible; | ||
use warp::{http::Response, Filter}; | ||
|
||
pub async fn start(pool: &PostgresPool) { | ||
let schema = Schema::build(QueryRoot, MutationRoot, SubscriptionRoot) | ||
.data(pool.clone()) | ||
.finish(); | ||
|
||
println!("Playground: http://localhost:8000"); | ||
|
||
let graphql_post = async_graphql_warp::graphql(schema.clone()).and_then( | ||
|(schema, builder): (_, QueryBuilder)| async move { | ||
let resp = builder.execute(&schema).await; | ||
Ok::<_, Infallible>(GQLResponse::from(resp)) | ||
}, | ||
); | ||
|
||
let graphql_playground = warp::path::end().and(warp::get()).map(|| { | ||
Response::builder() | ||
.header("content-type", "text/html") | ||
.body(playground_source( | ||
GraphQLPlaygroundConfig::new("/").subscription_endpoint("/"), | ||
)) | ||
}); | ||
|
||
let routes = graphql_subscription(schema) | ||
.or(graphql_playground) | ||
.or(graphql_post); | ||
warp::serve(routes).run(([0, 0, 0, 0], 8000)).await; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,56 +1,20 @@ | ||
mod commands; | ||
mod handler; | ||
mod discord; | ||
mod graphql; | ||
mod postgres; | ||
mod shard; | ||
mod twitch; | ||
mod utils; | ||
|
||
use crate::postgres::connection; | ||
use commands::help::*; | ||
use commands::*; | ||
use dotenv; | ||
use serenity::{client::Client, framework::standard::StandardFramework, model::id::UserId}; | ||
use shard::{PostgresPool, ShardManagerContainer}; | ||
use std::{collections::HashSet, env, sync::Arc}; | ||
|
||
#[tokio::main] | ||
async fn main() { | ||
dotenv::dotenv().ok(); | ||
pretty_env_logger::init(); | ||
|
||
let pool = connection::setup().await.expect("Failed to setup postgres"); | ||
|
||
let token: String = env::var("DISCORD_TOKEN").expect("Missing token env"); | ||
|
||
let mut owners = HashSet::new(); | ||
owners.insert(UserId(83281345949728768)); | ||
|
||
let framework = StandardFramework::new() | ||
.configure(|c| { | ||
c.owners(owners) | ||
.prefix("!") | ||
.ignore_bots(true) | ||
.ignore_webhooks(true) | ||
.allow_dm(false) | ||
}) | ||
.help(&HELP) | ||
// .group(&GENERAL_GROUP) | ||
.group(&ADMIN_GROUP); | ||
|
||
let mut client: Client = Client::new(&token) | ||
.event_handler(handler::Handler) | ||
.framework(framework) | ||
let pool = crate::postgres::connection::setup() | ||
.await | ||
.expect("Error creating client"); | ||
|
||
{ | ||
let mut data = client.data.write().await; | ||
data.insert::<ShardManagerContainer>(Arc::clone(&client.shard_manager)); | ||
data.insert::<PostgresPool>(pool.clone()); | ||
} | ||
.expect("Failed to setup postgres"); | ||
|
||
client | ||
.start_autosharded() | ||
.await | ||
.expect("Failed to start autosharding."); | ||
crate::discord::connection::setup(&pool).await; | ||
crate::graphql::server::start(&pool).await; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.