Files
discordeno/README.md
meister03 aca0e3cf1b Merge Dev into Main (#2345)
* Simplify SfetchMembers (#2339)

Co-authored-by: meister03

* Create leaveVoiceChannel.ts (#2342)

* Update editFollowupMessage.ts (#2344)

* Update editInteractionResponse.ts (#2343)

* Update editMessage.ts (#2341)

* Update calculateShardId.ts

Fix wrong shardId calculations

* Add Role Icon to Edit (#2346)

Co-authored-by: meister03

* Add mix max length (#2347)

Co-authored-by: meister03

* style: deno fmt

* Fix Disabled Options (#2368)

Co-authored-by: meister03 <meisterpi@gmail.com>

* Add app_permissions (#2369)

Co-authored-by: meister03 <meisterpi@gmail.com>

* thread_id instead of threadId (#2378)

Co-authored-by: Veeti K <veeti@veetik.com>

* feat: Create `ApplicationCommandFlags` enumerator. (#2384)

Co-authored-by: vxern <vxern@wordcollector.co.uk>

* Small Changes in a bulk pr to close the issues (#2370)

* Initial Commit

* Close #2364

* Add preset whitelist to automod #2356 -> Resolve Issue

* Close [api-docs] AutoMod message intent updates (#5083) #2330

* Breaking Channge | [api-docs] Update message type names (#5093)

* message.interaction.name changed attitude | [api-docs] Update Change_Log.md #2333

* #2333 also closes #2316

* Clarify 45 chars length | Add those on permission plugins | [api-docs] text input label has max 45 characters (#4689) #2137

* Clarify webhook naming restrictions (#4625) #2094

* 8th August Webhook new View Channel perm | Closes #2363

* 8th August Webhook new View Channel perm | Closes #2363

* Document thread_name for execute webhook (#5007) #2263

* Close Update create and modify channel documentation (#4867) #2237

* unnecesary nullable tag in Modify Guild Member params (#5164) #2355

* deno fmt

* deno fmt

* Use .includefor disallowed webhook names"

* Add Missing Enums & #2367, #2362, #2361, #2371, #2372. #2349, #2358, #2325 back

* deno fmt :(

Co-authored-by: meister03 <meisterpi@gmail.com>
Co-authored-by: LTS20050703 <87189679+lts20050703@users.noreply.github.com>

Co-authored-by: Tomato6966 <chris.pre03@gmail.com>
Co-authored-by: ITOH <to@itoh.at>
Co-authored-by: meister03 <meisterpi@gmail.com>
Co-authored-by: Veeti K <veeti@veetik.com>
Co-authored-by: vxern <vxern@wordcollector.co.uk>
Co-authored-by: LTS20050703 <87189679+lts20050703@users.noreply.github.com>
2022-08-23 08:46:01 -04:00

8.6 KiB

Discordeno

Discord API library for Deno

Discordeno follows semantic versioning

Discord Test Coverage

Features

  • Secure & stable: Discordeno is actively maintained to ensure great performance and convenience.
  • Simple, Efficient, & Lightweight: Discordeno is simplistic, easy-to-use and versatile while being efficient and lightweight. No caching by default.
  • Functional API: The functional API ensures overall concise yet performant code while removing the difficulties of extending built-in classes and inheritance.
  • Cross Runtime: Supports both Deno and Node.js runtimes.
  • Standalone REST, Gateway, Custom Cache & more: Discordeno provides the ability to have almost every part of a bot as a standalone piece.
  • Plugins: Designed to let you plugin and override any part of the code. Never deal with the headaches of maintaining your fork just to get something customized for your needs. You can use plugins for almost anything, for example we have a few official plugins.
    • Cache plugin that enables caching everything.
    • Sweeper plugin that enables sweepers to clean the cache every once in a while.
    • Permission plugin checks internally all missing permissions before forwarding a request to the Discord API so that the client does not get globally banned by Discord.
  • Flexibility: If your bot does not need certain properties from objects then you can simply remove them. For example, if your bot does not need Channel.topic you should not have to store it. This can save you GBs of memory. Doing this for any property on any object is as simple as a few lines of code.

REST

  • Freedom from Invalid Request 1 Hour Downtimes
    • Discordeno will protect your bot from going down for an hour and will instead decrease the maximum downtime to 10 minutes.
  • Freedom from global rate limit errors
    • As your bot grows, you want to handle global rate limits better. Shards don't communicate fast enough to truly handle it properly so this allows 1 rest handler across the entire bot.
    • In fact, you can host multiple instances of your bot and all connect to the same rest server.
  • REST does not rest!
    • Separate rest means if your bot for whatever reason crashes, your requests that are queued will still keep going and will not be lost.
    • Seamless updates! When you want to update and reboot the bot, you could potentially lose tons of messages or responses that are in queue. Using this you could restart your bot without ever worrying about losing any responses.
  • Single source of contact to Discord API
    • This will allow you to make requests to discord from anywhere including a bot dashboard. You no longer need to have to communicate to your bot processes just to make a request or anything. Free up your bot process for processing bot events.
  • Scalability! Scalability! Scalability!

Gateway

  • Zero Downtime Updates:
    • Your bot can be updated in a matter of seconds. With normal sharding, you have to restart which also has to process identifying all your shards with a 1/~5s rate limit. With WS handling moved to a proxy process, this allows you to instantly get the bot code restarted without any concerns of delays. If you have a bot on 200,000 servers normally this would mean a 20 minute delay to restart your bot if you made a small change and restarted.
  • Zero Downtime Resharding:
    • Discord stops letting your bot get added to new servers at certain points in time. For example, suppose you had 150,000 servers running 150 shards. The maximum amount of servers your shards could hold is 150 * 2500 = 375,000. If your bot reaches this, it can no longer join new servers until it re-shards.
    • DD proxy provides 2 types of re-sharding. Automated and manual. You can also have both.
      • Automated: This system will automatically begin a Zero-downtime resharding process behind the scenes when you reach 80% of your maximum servers allowed by your shards. For example, since 375,000 was the max, at 300,000 we would begin re-sharding behind the scenes with ZERO DOWNTIME.
        • 80% of maximum servers reached (The % of 80% is customizable.)
        • Identify limits have room to allow re-sharding. (Also customizable)
      • Manual: You can also trigger this manually should you choose.
  • Horizontal Scaling:
    • The proxy system allows you to scale the bot horizontally. When you reach a huge size, you can either keep spending more money to keep beefing up your server or you can buy several cheaper servers and scale horizontally. The proxy means you can have WS handling on a completely separate system.
  • No Loss Restarts:
    • When you restart a bot without the proxy system, normally you would lose many events. Users may be using commands or messages are sent that will not be filtered. As your bot's grow this number rises dramatically. Users may join who wont get the auto-roles or any other actions your bot should take. With the proxy system, you can keep restarting your bot and never lose any events. Events will be put into a queue while your bot is down(max size of queue is customizable), once the bot is available the queue will begin processing all events.
  • Controllers:
    • The controller aspect gives you full control over everything inside the proxy. You can provide a function to simply override the handler. For example, if you would like a certain function to do something different, instead of having to fork and maintain your fork, you can just provide a function to override.
  • Clustering With Workers:
    • Take full advantage of all your CPU cores by using workers to spread the load. Control how many shards per worker and how many workers to maximize efficiency!

Custom Cache

Have your cache setup in any way you like. Redis, PGSQL or any cache layer you would like.

Getting Started

Minimal Example

Here is a minimal example to get started with:

import { createBot, Intents, startBot } from "https://deno.land/x/discordeno@13.0.0-rc18/mod.ts";
import { enableCachePlugin, enableCacheSweepers } from "https://deno.land/x/discordeno_cache_plugin@0.0.18/mod.ts";

const baseBot = createBot({
  token: Deno.env.get("DISCORD_TOKEN"),
  intents: Intents.Guilds | Intents.GuildMessages,
  botId: Deno.env.get("BOT_ID"),
  events: {
    ready() {
      console.log("Successfully connected to gateway");
    },
    messageCreate(bot, message) {
      // Process the message here with your command handler
    },
  },
});

const bot = enableCachePlugin(baseBot);

enableCacheSweepers(bot);

await startBot(bot);

Templates

Note to developers: don't worry, a lot of developers start out by building a Discord bot as their first project, and it's not easy. Discordeno is designed and built with all of the issues in mind that many developers have encountered when they initially started writing Discord bots using existing libraries. If you are a beginner, you can check out these awesome official and unofficial templates:

Frameworks

Plugins

Contributing

We appreciate your help! Before contributing, please read the Contributing Guide.