Skip to main content
The Deno 2 Release Candidate is here
Learn more

Space

A low-level Deno module for interacting with Discord.

Features

  • 100% coverage over Discord’s HTTP and websocket APIs.
  • Secure by default. Client-side checks prevent 4xxs from occuring.
  • Written purely in TypeScript to guarantee type safety.
  • Built-in utilities such as event logging and custom caching.

Install

export * from "https://deno.land/x/space@0.6.0-alpha/mod.ts";

If you only want to use HTTP:

export * from "https://deno.land/x/space@0.6.0-alpha/lib/api/http/mod.ts";

If you only want to use interactions:

export * from "https://deno.land/x/space@0.6.0-alpha/lib/api/interactions/mod.ts";

If you only want to use the Gateway:

export * from "https://deno.land/x/space@0.6.0-alpha/lib/api/websocket/mod.ts";

See the release notes for all available versions.

Getting Started

Simple program to get started:

import {
  Client,
  GatewayDispatchEvents,
  GatewayIntentBits,
  Message,
  onMessageCreate,
} from "./deps.ts";

const token = prompt("token:");
if (!token) {
  throw new Error("bad token");
}

const client = new Client(`Bot ${token}`);

client.gateway.listen(
  GatewayDispatchEvents.MessageCreate,
  (message) => onMessageCreate(client, message),
  (message: Message) => {
    if (message.content === "!ping") {
      client.rest.createMessage(message.channelID, {
        content: "pong!",
      });
    }
  },
);

client.connect({
  intents: GatewayIntentBits.GUILD_MESSAGES,
});

Simple interactions program:

import { InteractionResponseType, Server } from "./deps.ts";

const publicKey = prompt("public key:");
if (!publicKey) {
  throw new Error("bad public key");
}

const server = new Server(publicKey);

server.listen(GatewayDispatchEvents.InteractionCreate, (interaction) => {
  if (interaction.data.name === "ping") {
    return {
      type: InteractionResponseType.ChannelMessageWithSource,
      data: { content: "pong" },
    };
  }
});

server.connect(8080);

See the documentation for reference.

Resources