initial commit
This commit is contained in:
21
.github/workflows/main.yml
vendored
Normal file
21
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: main
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
jobs:
|
||||||
|
packages:
|
||||||
|
name: test packages
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.3.4
|
||||||
|
- uses: cachix/install-nix-action@v13
|
||||||
|
with:
|
||||||
|
install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-2.4pre20210429_d15a196/install
|
||||||
|
extra_nix_config: |
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
- uses: cachix/cachix-action@v10
|
||||||
|
with:
|
||||||
|
name: natto1784
|
||||||
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
||||||
|
- run: nix build
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
target/
|
||||||
|
result
|
1307
Cargo.lock
generated
Normal file
1307
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
16
Cargo.toml
Normal file
16
Cargo.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[package]
|
||||||
|
name = "singh3"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = [ "Amneesh Singh <natto@weirdnatto.in>" ]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tracing = "0.1.22"
|
||||||
|
|
||||||
|
[dependencies.serenity]
|
||||||
|
version = "0.10.8"
|
||||||
|
features = ["cache", "framework", "standard_framework", "rustls_backend", "unstable_discord_api"]
|
||||||
|
|
||||||
|
[dependencies.tokio]
|
||||||
|
version = "1.0"
|
||||||
|
features = ["macros", "signal", "rt-multi-thread"]
|
13
LICENSE
Normal file
13
LICENSE
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
93
flake.lock
generated
Normal file
93
flake.lock
generated
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1614513358,
|
||||||
|
"narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5466c5bbece17adaab2d82fae80b46e807611bf3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1622966049,
|
||||||
|
"narHash": "sha256-6g+28v94ISkVk9TBSsITVOnB2slK8plieWPIF2jo/l0=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "fbfb79400a08bf754e32b4d4fc3f7d8f8055cf94",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1617325113,
|
||||||
|
"narHash": "sha256-GksR0nvGxfZ79T91UUtWjjccxazv6Yh/MvEJ82v1Xmw=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "54c1e44240d8a527a8f4892608c4bce5440c3ecb",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"rust-overlay": "rust-overlay",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1623034161,
|
||||||
|
"narHash": "sha256-cbw9X+nVFcpIuBga0hkbtzXbW2fyDWBon6oUN/uQmu0=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "0b952cdfa37f8b0fc70fc75fbd4605227cd0b272",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1622445595,
|
||||||
|
"narHash": "sha256-m+JRe6Wc5OZ/mKw2bB3+Tl0ZbtyxxxfnAWln8Q5qs+Y=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "7d706970d94bc5559077eb1a6600afddcd25a7c8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
37
flake.nix
Normal file
37
flake.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
description = "A simple filehost written in rust";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = github:nixos/nixpkgs/nixos-unstable;
|
||||||
|
utils.url = github:numtide/flake-utils;
|
||||||
|
rust-overlay.url = github:oxalica/rust-overlay;
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, utils, rust-overlay }:
|
||||||
|
utils.lib.eachDefaultSystem
|
||||||
|
(system:
|
||||||
|
let
|
||||||
|
overlays = [ (import rust-overlay) ];
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system overlays;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShell = with pkgs; mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
rust-bin.nightly.latest.default
|
||||||
|
rust-analyzer
|
||||||
|
];
|
||||||
|
};
|
||||||
|
defaultPackage = pkgs.rustPlatform.buildRustPackage rec {
|
||||||
|
pname = "singh3";
|
||||||
|
version = "0.1.0";
|
||||||
|
src = ./. ;
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
rust-bin.nightly.latest.default
|
||||||
|
];
|
||||||
|
cargoSha256 = "sha256-qpmDIhgHcSoX/wIJlKNULxrEr+KOrCdXOi7HDuCdlFM=";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
12
src/general.rs
Normal file
12
src/general.rs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
use serenity::prelude::*;
|
||||||
|
use serenity::model::prelude::*;
|
||||||
|
use serenity::framework::standard::{
|
||||||
|
CommandResult,
|
||||||
|
macros::command
|
||||||
|
};
|
||||||
|
|
||||||
|
#[command]
|
||||||
|
pub async fn ping(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
|
msg.reply(ctx, "Pong!").await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
104
src/main.rs
Normal file
104
src/main.rs
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
mod general;
|
||||||
|
use serenity::{
|
||||||
|
async_trait,
|
||||||
|
client::bridge::gateway::ShardManager,
|
||||||
|
framework::{standard::macros::group, StandardFramework},
|
||||||
|
http::Http,
|
||||||
|
model::{
|
||||||
|
event::ResumedEvent,
|
||||||
|
gateway::Ready,
|
||||||
|
interactions::{ApplicationCommand, Interaction, InteractionResponseType, InteractionType, InteractionData},
|
||||||
|
},
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
use std::{collections::HashSet, env, sync::Arc};
|
||||||
|
use tracing::{error, info};
|
||||||
|
|
||||||
|
pub struct ShardManagerContainer;
|
||||||
|
use general::*;
|
||||||
|
|
||||||
|
impl TypeMapKey for ShardManagerContainer {
|
||||||
|
type Value = Arc<Mutex<ShardManager>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Handler;
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl EventHandler for Handler {
|
||||||
|
async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
|
||||||
|
if interaction.kind == InteractionType::ApplicationCommand {
|
||||||
|
if let Some(InteractionData::ApplicationCommand(data)) = interaction.data.as_ref() {
|
||||||
|
let content = match data.name.as_str() {
|
||||||
|
"ping" => "Hey, I'm alive!".to_string(),
|
||||||
|
_ => "not implemented :(".to_string(),
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Err(why) = interaction
|
||||||
|
.create_interaction_response(&ctx.http, |response| {
|
||||||
|
response
|
||||||
|
.kind(InteractionResponseType::ChannelMessageWithSource)
|
||||||
|
.interaction_response_data(|message| message.content(content))
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
println!("Cannot respond to slash command: {}", why);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn ready(&self, _: Context, ready: Ready) {
|
||||||
|
info!("{} connected bhay", ready.user.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn resume(&self, _: Context, _: ResumedEvent) {
|
||||||
|
info!("how th when the");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[group]
|
||||||
|
#[commands(ping)]
|
||||||
|
struct General;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let token = env::var("DISCORD_TOKEN").expect("Token daal madarchod");
|
||||||
|
|
||||||
|
let http = Http::new_with_token(&token);
|
||||||
|
|
||||||
|
let (owners, bot_id) = match http.get_current_application_info().await {
|
||||||
|
Ok(info) => {
|
||||||
|
let mut owners = HashSet::new();
|
||||||
|
owners.insert(info.owner.id);
|
||||||
|
match http.get_current_user().await {
|
||||||
|
Ok(bot_id) => (owners, bot_id.id),
|
||||||
|
Err(why) => panic!("Could not access the bot id: {:?}", why),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(why) => panic!("Could not access application info: {:?}", why),
|
||||||
|
};
|
||||||
|
|
||||||
|
let framework = StandardFramework::new()
|
||||||
|
.configure(|c| c.owners(owners).prefix("xx"))
|
||||||
|
.group(&GENERAL_GROUP);
|
||||||
|
|
||||||
|
let mut client = Client::builder(&token)
|
||||||
|
.framework(framework)
|
||||||
|
.event_handler(Handler)
|
||||||
|
.application_id(*bot_id.as_u64())
|
||||||
|
.await
|
||||||
|
.expect("Client no wokey");
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut data = client.data.write().await;
|
||||||
|
data.insert::<ShardManagerContainer>(client.shard_manager.clone());
|
||||||
|
}
|
||||||
|
let _ = ApplicationCommand::create_global_application_command(&http, |a| {
|
||||||
|
a.name("ping").description("A simple ping command")
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
|
||||||
|
if let Err(why) = client.start().await {
|
||||||
|
error!("Client error: {:?}", why);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user