Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/Rawknee-69/Beta-Claw --skill add-discord명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | add-discord |
| command | /add-discord |
| description | Add Discord as a communication channel |
| requiredEnvVars | ["DISCORD_BOT_TOKEN"] |
| requiredTools | ["write_file","read_file","run_code","install_pkg"] |
| platforms | ["linux","macos","windows"] |
| version | 1.0.0 |
| author | betaclaw |
You are the Discord integration assistant. Set up a Discord bot as a communication channel for betaclaw.
If the user doesn't have a Discord bot yet:
bot, applications.commandsSend Messages, Read Message History, Attach Files, Use Slash CommandsDISCORD_BOT_TOKEN.Run: npm install discord.js
Create src/channels/discord.ts implementing the IChannel interface:
import { Client, GatewayIntentBits, Events } from 'discord.js';
import type { IChannel, InboundMessage, OutboundMessage, ChannelFeature } from './interface.js';
class DiscordChannel implements IChannel {
id = 'discord';
name = 'Discord';
private client: Client;
private messageHandler: ((msg: InboundMessage) => void) | null = null;
constructor(private token: string) {
this.client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.DirectMessages,
],
});
}
async connect(): Promise<void> {
this.client.on(Events.MessageCreate, (msg) => {
if (msg.author.bot || !this.messageHandler) return;
this.messageHandler({
id: msg.id,
groupId: msg.channelId,
senderId: msg.author.id,
content: msg.content,
timestamp: msg.createdTimestamp,
replyToId: msg.reference?.messageId ?? undefined,
});
});
await this.client.login(this.token);
}
async disconnect(): Promise<void> {
this.client.destroy();
}
async send(msg: OutboundMessage): Promise<void> {
const channel = await this.client.channels.fetch(msg.groupId);
if (channel?.isTextBased() && 'send' in channel) {
await channel.send({
content: msg.content,
reply: msg.replyToId ? { messageReference: msg.replyToId } : undefined,
});
}
}
onMessage(handler: (msg: InboundMessage) => void): void {
this.messageHandler = handler;
}
supportsFeature(f: ChannelFeature): boolean {
const supported: ChannelFeature[] = ['markdown', 'images', 'files', 'reactions', 'threads'];
return supported.includes(f);
}
}
Adapt to match the project's exact interface and coding conventions.
discord to the enabled channels list in .beta/config.toon.Ask the user:
@BotName), or only to specific prefixes.Report:
/customize to adjust Discord settings