diff --git a/packages/tagscript-plugin-discord/src/lib/Parsers/Files.ts b/packages/tagscript-plugin-discord/src/lib/Parsers/Files.ts new file mode 100644 index 00000000..3dee9e24 --- /dev/null +++ b/packages/tagscript-plugin-discord/src/lib/Parsers/Files.ts @@ -0,0 +1,15 @@ +import { BaseParser, Context, IParser, split } from 'tagscript'; + +/** + * This parser allows sending files along with message using file url. + */ +export class FilesParser extends BaseParser implements IParser { + public constructor() { + super(['files'], false, true); + } + + public parse(ctx: Context) { + ctx.response.actions.files = split(ctx.tag.payload!, true); + return ''; + } +} diff --git a/packages/tagscript-plugin-discord/src/lib/Parsers/index.ts b/packages/tagscript-plugin-discord/src/lib/Parsers/index.ts index abe84076..e5480b10 100644 --- a/packages/tagscript-plugin-discord/src/lib/Parsers/index.ts +++ b/packages/tagscript-plugin-discord/src/lib/Parsers/index.ts @@ -2,5 +2,6 @@ export * from './AllowDeny'; export * from './Cooldown'; export * from './Delete'; export * from './Embed'; +export * from './Files'; export * from './Format'; export * from './Silent'; diff --git a/packages/tagscript-plugin-discord/src/lib/interfaces/index.ts b/packages/tagscript-plugin-discord/src/lib/interfaces/index.ts new file mode 100644 index 00000000..48788778 --- /dev/null +++ b/packages/tagscript-plugin-discord/src/lib/interfaces/index.ts @@ -0,0 +1,15 @@ +import { MessageEmbedOptions } from 'discord.js'; +import 'tagscript'; + +declare module 'tagscript' { + export interface IActions { + cooldown?: { + cooldown: number; + message: string | null; + }; + embed?: MessageEmbedOptions; + deleteMessage?: boolean; + silentResponse?: boolean; + files?: string[]; + } +} diff --git a/packages/tagscript-plugin-discord/tests/Parsers/Files.test.ts b/packages/tagscript-plugin-discord/tests/Parsers/Files.test.ts new file mode 100644 index 00000000..aece1a7f --- /dev/null +++ b/packages/tagscript-plugin-discord/tests/Parsers/Files.test.ts @@ -0,0 +1,11 @@ +import { Interpreter } from 'tagscript'; +import { FilesParser } from '../../src'; + +describe('Files', () => { + test('GIVEN file url WHEN parse THEN return empty string and url in actions', async () => { + const ts = new Interpreter(new FilesParser()); + const text = '{files:https://example.com/file.txt,https://example.com/file2.txt}'; + + expect((await ts.run(text)).actions.files).toStrictEqual(['https://example.com/file.txt', 'https://example.com/file2.txt']); + }); +}); diff --git a/packages/tagscript-plugin-discord/tests/interface.ts b/packages/tagscript-plugin-discord/tests/interface.ts new file mode 100644 index 00000000..48788778 --- /dev/null +++ b/packages/tagscript-plugin-discord/tests/interface.ts @@ -0,0 +1,15 @@ +import { MessageEmbedOptions } from 'discord.js'; +import 'tagscript'; + +declare module 'tagscript' { + export interface IActions { + cooldown?: { + cooldown: number; + message: string | null; + }; + embed?: MessageEmbedOptions; + deleteMessage?: boolean; + silentResponse?: boolean; + files?: string[]; + } +} diff --git a/packages/tagscript/src/lib/interfaces/index.ts b/packages/tagscript/src/lib/interfaces/index.ts index c7f400d8..f8b55797 100644 --- a/packages/tagscript/src/lib/interfaces/index.ts +++ b/packages/tagscript/src/lib/interfaces/index.ts @@ -1,4 +1,3 @@ -import type { Snowflake, MessageEmbedOptions } from 'discord.js'; import type { Context, Lexer } from '../Interpreter'; import type { Awaitable } from '../Utils/Util'; @@ -32,13 +31,6 @@ export interface IParser { export interface IKeyValues {} export interface IActions { - cooldown?: { - cooldown: number; - message: string | null; - }; - require?: { ids: Snowflake[]; message: string | null }; - deny?: { ids: Snowflake[]; message: string | null }; - embed?: MessageEmbedOptions; - deleteMessage?: boolean; - silentResponse?: boolean; + require?: { ids: string[]; message: string | null }; + deny?: { ids: string[]; message: string | null }; }