mirror of
https://github.com/sern-handler/website
synced 2026-06-23 00:02:30 +00:00
fix: fix cloning tools from git
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
"build": "astro check && astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro",
|
||||
"postinstall": "bun run setup.mjs",
|
||||
"postinstall": "bun run setup.ts",
|
||||
"lunaria:build": "lunaria build",
|
||||
"lunaria:preview": "lunaria preview"
|
||||
},
|
||||
|
||||
37
setup.mjs
37
setup.mjs
@@ -1,37 +0,0 @@
|
||||
import { $ } from "bun";
|
||||
import { GITHUB_URL } from '~/utils/consts.ts';
|
||||
import { existsSync } from 'node:fs';
|
||||
import { copyFile } from "node:fs/promises";
|
||||
|
||||
const gits = [
|
||||
{
|
||||
name: 'sern-handler-v3'
|
||||
},
|
||||
{
|
||||
name: 'sern-handler-v4',
|
||||
branch: 'feat/v4',
|
||||
},
|
||||
];
|
||||
|
||||
for (const git of gits) {
|
||||
await $`rm -rf ${git.name}`;
|
||||
await $`git clone -b ${git.branch || 'main'} ${GITHUB_URL}/handler ${git.name}`;
|
||||
await $`cd ${git.name} && bun install`;
|
||||
}
|
||||
|
||||
const tools = ['poster', 'ioc', 'builder', 'localizer', 'publisher'];
|
||||
// await $`bunx --yes degit --force sern-handler/tools/packages tools/`;
|
||||
|
||||
await Promise.all(tools.map((tool) => {
|
||||
const docpage = `./tools/${tool}/index.mdx`;
|
||||
const metadata = `./tools/${tool}/metadata.json`;
|
||||
if (existsSync(docpage) && existsSync(metadata)) {
|
||||
console.log(`cp ${docpage} ./src/content/docs/v4/tools/${tool}.mdx`);
|
||||
return copyFile(docpage, `./src/content/docs/v4/tools/${tool}.mdx`);
|
||||
}
|
||||
|
||||
console.warn(`${docpage} or ${metadata} not found for ${tool}`);
|
||||
}));
|
||||
|
||||
|
||||
|
||||
56
setup.ts
Normal file
56
setup.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import { $ } from "bun";
|
||||
import { GITHUB_URL } from "~/utils/consts.ts";
|
||||
import { existsSync } from "node:fs";
|
||||
import { copyFile } from "node:fs/promises";
|
||||
|
||||
interface GitItem {
|
||||
name: string;
|
||||
repo: string;
|
||||
branch?: string;
|
||||
install?: boolean;
|
||||
folder?: string;
|
||||
}
|
||||
|
||||
const gits: GitItem[] = [
|
||||
{
|
||||
name: "sern-handler-v3",
|
||||
repo: "handler",
|
||||
},
|
||||
{
|
||||
name: "sern-handler-v4",
|
||||
repo: "handler",
|
||||
branch: "feat/v4",
|
||||
},
|
||||
{
|
||||
name: "tools",
|
||||
repo: "tools",
|
||||
folder: "packages",
|
||||
install: false,
|
||||
},
|
||||
];
|
||||
|
||||
for (const git of gits) {
|
||||
await $`rm -rf ${git.name}`;
|
||||
await $`git clone -b ${git.branch ?? "main"} ${GITHUB_URL}/${git.repo} ${git.name}`;
|
||||
|
||||
if (git.install ?? true) {
|
||||
await $`cd ${git.name} && bun install`;
|
||||
}
|
||||
|
||||
if (git.folder) {
|
||||
await $`mv ${git.name}/${git.folder}/* ${git.name} && rm -rf ${git.name}/${git.folder}`;
|
||||
}
|
||||
}
|
||||
|
||||
const tools = (await $`ls -d tools/* | grep -v .github`.text())
|
||||
.split("\n")
|
||||
.filter(
|
||||
(t) => existsSync(`${t}/index.mdx`) && existsSync(`${t}/metadata.json`),
|
||||
);
|
||||
|
||||
for (const tool of tools) {
|
||||
await copyFile(
|
||||
`${tool}/index.mdx`,
|
||||
`src/content/docs/v4/tools/${tool.split("/")[1]}.mdx`,
|
||||
);
|
||||
}
|
||||
@@ -2,12 +2,10 @@
|
||||
title: Localizer
|
||||
description: Translate your bot for the world
|
||||
sidebar:
|
||||
order: 1
|
||||
order: 2
|
||||
---
|
||||
|
||||
|
||||
# @sern/localizer
|
||||
|
||||
A localization module for managing translations and providing localized content in your application.
|
||||
|
||||
## Installation
|
||||
@@ -16,25 +14,47 @@ A localization module for managing translations and providing localized content
|
||||
npm i @sern/localizer
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
**Initializing the Localizer**
|
||||
```ts
|
||||
import { makeDependencies } from '@sern/handler';
|
||||
import { Localization } from '@sern/localizer';
|
||||
|
||||
await makeDependencies(({ add }) => {
|
||||
add('localizer', Localization());
|
||||
});
|
||||
```
|
||||
This localizer is **FILE BASED**.
|
||||
Create the directory `assets/locals`. Each json file in here must be named after the `locale`
|
||||
|
||||
import { Tabs, TabItem } from "@astrojs/starlight/components";
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
**Initializing the Localizer**
|
||||
|
||||
<Tabs>
|
||||
<TabItem label ="src/index.js">
|
||||
```ts {2} {6}
|
||||
import { makeDependencies } from '@sern/handler';
|
||||
import { Localization } from '@sern/localizer';
|
||||
|
||||
await makeDependencies(({ add }) => {
|
||||
// add other deps
|
||||
add('localizer', Localization());
|
||||
});
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem label="src/dependencies.d.ts">
|
||||
```ts {5}
|
||||
import type { Logging, CoreDependencies } from '@sern/handler'
|
||||
import type { Localizer } from '@sern/localizer'
|
||||
declare global {
|
||||
interface Dependencies extends CoreDependencies {
|
||||
localizer: Localizer;
|
||||
}
|
||||
}
|
||||
export {}
|
||||
```
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
This localizer is **FILE BASED**.
|
||||
Create the directory `assets/locals`. Each json file in here must be named after the `locale`
|
||||
|
||||
|
||||
<Tabs>
|
||||
<TabItem label="Spanish">
|
||||
```json title=~/assets/locals/es.json
|
||||
```json title=~/assets/locals/es-ES.json
|
||||
{
|
||||
"salute": {
|
||||
"hello": "hola"
|
||||
@@ -46,7 +66,7 @@ import { Tabs, TabItem } from "@astrojs/starlight/components";
|
||||
```json title=~/assets/locals/en-US.json
|
||||
{
|
||||
"salute": {
|
||||
"hello": "hola"
|
||||
"hello": "hello"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -62,7 +82,7 @@ execute : (ctx, { deps }) => {
|
||||
//the localizer object from makeDependencies
|
||||
deps.localizer
|
||||
// Returns the Spanish translation for 'salute.hello'
|
||||
deps.localizer.translate("salute.hello", "es");
|
||||
deps.localizer.translate("salute.hello", "es-ES");
|
||||
}
|
||||
```
|
||||
|
||||
@@ -71,5 +91,5 @@ execute : (ctx, { deps }) => {
|
||||
import { local } from '@sern/localizer';
|
||||
|
||||
// Returns the Spanish translation for 'salute.hello'
|
||||
const greeting = local('salute.hello', 'es');
|
||||
const greeting = local('salute.hello', 'es-ES');
|
||||
```
|
||||
|
||||
106
src/content/docs/v4/tools/publisher.mdx
Normal file
106
src/content/docs/v4/tools/publisher.mdx
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Publisher
|
||||
description: Publish application commands as a Service
|
||||
sidebar:
|
||||
order: 1
|
||||
---
|
||||
|
||||
## Implicits
|
||||
- Requires process.env to be populated
|
||||
- A common provider of this is `dotenv`
|
||||
```txt title=".env"
|
||||
DISCORD_TOKEN=<YOUR_TOKEN>
|
||||
NODE_ENV=<production|development>
|
||||
```
|
||||
- Calls the discord API with the [PUT route](https://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-global-application-commands). Wherever your commands directory is located, publish will override the existing application commands at Discord.
|
||||
|
||||
## Usage
|
||||
|
||||
**Initializing the Publisher**
|
||||
```ts
|
||||
import { makeDependencies } from '@sern/handler';
|
||||
import { Publisher } from '@sern/publisher';
|
||||
|
||||
await makeDependencies(({ add }) => {
|
||||
add('publisher', new Publisher());
|
||||
});
|
||||
```
|
||||
|
||||
## Features
|
||||
- Automatically syncs api with your command base
|
||||
- generates JSON file of output (**.sern/command-data-remote.json**)
|
||||
- supports a configuration that is the same as the original publish plugin.
|
||||
|
||||
|
||||
Each command file can have an extra plugin `publishConfig` that follows `ValidPublishOptions`:
|
||||
## Config
|
||||
```ts
|
||||
|
||||
type ValidMemberPermissions =
|
||||
| typeof PermissionFlagBits //discord.js enum
|
||||
| typeof PermissionFlagBits[] //array of discord.js enum
|
||||
| string //must be a stringified number
|
||||
| bigint
|
||||
|
||||
interface PublishConfig {
|
||||
guildIds?: string[];
|
||||
defaultMemberPermissions?: ValidMemberPermissions;
|
||||
integrationTypes?: Array<'Guild'|'User'>
|
||||
contexts: number[]
|
||||
}
|
||||
type ValidPublishOptions =
|
||||
| PublishConfig
|
||||
| (absPath: string, module: CommandModule) => PublishConfig
|
||||
```
|
||||
:::tip
|
||||
These types are exported under @sern/publisher
|
||||
:::
|
||||
|
||||
### Example: command published with integrationTypes
|
||||
|
||||
:::tip
|
||||
Make sure you modify the install method in the Discord dev portal
|
||||
:::
|
||||
|
||||
```ts title=src/commands/ping.ts
|
||||
import { commandModule, CommandType } from '@sern/handler'
|
||||
import { publishConfig } from '@sern/publisher'
|
||||
|
||||
export default commandModule( {
|
||||
type: CommandType.Slash,
|
||||
plugins: [
|
||||
publishConfig({
|
||||
integrationTypes: ['User'],
|
||||
contexts: [1,2]
|
||||
})
|
||||
],
|
||||
description: `hello worl`,
|
||||
execute: (ctx) => {
|
||||
ctx.reply('pong')
|
||||
}
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Example: command published in guild
|
||||
|
||||
```ts title=src/commands/ping.ts
|
||||
import { commandModule, CommandType } from '@sern/handler'
|
||||
import { publishConfig } from '@sern/publisher'
|
||||
|
||||
export default commandModule( {
|
||||
type: CommandType.Slash,
|
||||
plugins: [
|
||||
publishConfig({
|
||||
guildIds: ["889026545715400705"]
|
||||
})
|
||||
],
|
||||
description: `hello worl`,
|
||||
execute: (ctx) => {
|
||||
ctx.reply('pong')
|
||||
}
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user