diff --git a/.dockerignore b/.dockerignore index 8d777f3e..f7e03dd2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,16 @@ **/* !package.json -!package-lock.json -!guide -!nginx.conf \ No newline at end of file +!pnpm-lock.yaml +!pnpm-workspace.yaml +!next.config.mjs +!postcss.config.mjs +!source.config.ts +!tsconfig.json +!app +!components +!lib +!content +!data +!public +!scripts +!nginx.conf diff --git a/.gitignore b/.gitignore index 6893e072..2824a73b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,23 @@ data.json build*.sh ignore/* .DS_Store -guide/.vuepress/public/images/*.* .vscode OnTemplate.md .env -guide/.vuepress/public/docs-pages.json \ No newline at end of file + +# next / fumadocs +.source +/.next/ +/out/ +*.tsbuildinfo +next-env.d.ts +.vercel + +# remote images cached locally by lib/remark/images.ts +guide/.vuepress/public/images/*.* + +# browser-automation session artifacts (snapshots, console logs) +.playwright-mcp/ + +.pnpm-store +docs-pages.json diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 521a9f7c..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -legacy-peer-deps=true diff --git a/Dockerfile b/Dockerfile index 30b05357..c1c16f39 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,16 +2,17 @@ FROM node:24-alpine AS builder WORKDIR /app -COPY package*.json ./ -RUN npm ci --legacy-peer-deps +RUN npm i -g pnpm@11 + +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +RUN pnpm install --frozen-lockfile COPY . . -# adjust the build command if your project uses a different script -RUN npm run build +RUN pnpm build # Stage 2 — serve with nginx FROM nginx:1.25-alpine -ARG BUILD_DIR=guide/.vuepress/dist +ARG BUILD_DIR=out # Remove default config and add a simple SPA-friendly config COPY nginx.conf /etc/nginx/conf.d/default.conf @@ -20,4 +21,5 @@ COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/${BUILD_DIR} /usr/share/nginx/html EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file +CMD ["nginx", "-g", "daemon off;"] + diff --git a/DockerfileDev b/DockerfileDev index 702f1aa0..943ec713 100644 --- a/DockerfileDev +++ b/DockerfileDev @@ -1,10 +1,11 @@ -# Stage 1 — build the static assets -FROM node:24-alpine3.21 AS builder +FROM node:24-alpine3.21 WORKDIR /app -COPY package*.json ./ -RUN npm i --legacy-peer-deps +RUN npm i -g pnpm@11 + +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +RUN pnpm install --frozen-lockfile COPY . . -CMD ["npm", "run", "dev"] \ No newline at end of file +CMD ["pnpm", "dev"] diff --git a/README.md b/README.md index 006a3f46..6adb7ab5 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ For larger changes involving many files, we recommend using your IDE and the dev ### Requirements [Git](https://git-scm.com/install/), -[Node.js](https://nodejs.org/en/download/current) `>=22.18.0` or [Docker Desktop](https://www.docker.com/products/docker-desktop/) +[Node.js](https://nodejs.org/en/download/current) `>=22.18.0` with [pnpm](https://pnpm.io/installation), or [Docker Desktop](https://www.docker.com/products/docker-desktop/) ### Steps @@ -43,13 +43,13 @@ git clone git@github.com:YOUR_USERNAME/ccdoc.git 3\. Install dependencies: ```bash -npm i +pnpm install ``` 4\. Start the dev server and go to [localhost:8080](http://localhost:8080): ```bash -npm run dev +pnpm dev ``` ### Docker Compose @@ -60,6 +60,16 @@ npm run dev docker compose up ``` +### Termux + +The default Turbopack does not natively run on Android. You need to download their fixed package: + +```bash +pkg i turbopack +``` + +Restart your app and then continue using the [Node.js](#nodejs) method. + ## Saving Changes After your changes are done, you need to update your fork. @@ -79,7 +89,11 @@ git commit -m "Updated category Member" 3\. Push changes to your fork: ```bash -git push +git push origin ``` -To send these changes for review, open your cloned fork on GitHub and click the `Open Pull Request` button. +To send these changes for review, open your cloned fork on GitHub, and click the `Open Pull Request` button. + +## Naviagation + +All documentation files are stored at `/content/docs`. diff --git a/app/(docs)/[[...slug]]/page.tsx b/app/(docs)/[[...slug]]/page.tsx new file mode 100644 index 00000000..19d0e1fe --- /dev/null +++ b/app/(docs)/[[...slug]]/page.tsx @@ -0,0 +1,83 @@ +import { getPageMarkdownUrl, source } from "@/lib/source"; +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, + MarkdownCopyButton, + ViewOptionsPopover, +} from "fumadocs-ui/layouts/docs/page"; +import { notFound } from "next/navigation"; +import { getMDXComponents } from "@/components/mdx"; +import type { Metadata } from "next"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import { appName, gitConfig, socialImage, appDescription } from "@/lib/shared"; +import { Button } from "@/components/ui/button"; +import { GitHubLogoIcon } from "@radix-ui/react-icons"; + +export default async function Page(props: PageProps<"/[[...slug]]">) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDX = page.data.body; + const markdownUrl = getPageMarkdownUrl(page).url; + + return ( + + {page.data.title} + + {page.data.description} + +
+ + +
+ + + +
+ ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata( + props: PageProps<"/[[...slug]]">, +): Promise { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const social = page.data.title + ? `${page.data.title} | ${appName}` + : `${appName} Documentation`; + + return { + title: page.data.title, + description: appDescription, + openGraph: { + title: social, + description: appDescription, + images: socialImage, + }, + twitter: { + card: "summary", + title: social, + description: appDescription, + images: socialImage, + }, + }; +} diff --git a/app/(docs)/layout.tsx b/app/(docs)/layout.tsx new file mode 100644 index 00000000..d2e715bf --- /dev/null +++ b/app/(docs)/layout.tsx @@ -0,0 +1,11 @@ +import { source } from "@/lib/source"; +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { baseOptions } from "@/lib/layout.shared"; + +export default function Layout({ children }: LayoutProps<"/">) { + return ( + + {children} + + ); +} diff --git a/app/api/search/route.ts b/app/api/search/route.ts new file mode 100644 index 00000000..c82103f8 --- /dev/null +++ b/app/api/search/route.ts @@ -0,0 +1,53 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const revalidate = false; + +/** difficulty labels were never treated as tags */ +const NOT_A_TAG = /Easy|Difficult|Read Below|Medium|Bugged/i; + +/** + * The old VuePress search fed `` values into the index via + * `parseTags.js`, which is how searching "kick" or "reactions" finds a + * function. Badge props are JSX attributes, so they never reach the structured + * content Fumadocs indexes by default — read them back off the source file. + */ +function tagsFor(filePath: string, title: string) { + const raw = fs.readFileSync(path.join(process.cwd(), 'content/docs', filePath), 'utf8'); + + const tags: string[] = []; + for (const [, text] of raw.matchAll(/<(?:Badge|Tag)[^>]*\btext="([^"]*)"/g)) { + if (text.length > 1 && !NOT_A_TAG.test(text)) tags.push(text); + } + // the old plugin also indexed the bare function name + if (title.startsWith('$')) tags.push(title.slice(1)); + + return [...new Set(tags)]; +} + +export const { staticGET: GET } = createFromSource(source, { + // https://docs.orama.com/docs/orama-js/supported-languages + language: 'english', + buildIndex(page) { + const structuredData = page.data.structuredData; + const tags = tagsFor(page.path, page.data.title); + + return { + id: page.url, + title: page.data.title, + description: page.data.description, + url: page.url, + structuredData: tags.length + ? { + ...structuredData, + contents: [ + ...structuredData.contents, + { heading: undefined, content: tags.join(' ') }, + ], + } + : structuredData, + }; + }, +}); diff --git a/app/global.css b/app/global.css new file mode 100644 index 00000000..c9480f7c --- /dev/null +++ b/app/global.css @@ -0,0 +1,24 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; + +html { + scrollbar-gutter: stable; +} + +html > body[data-scroll-locked] { + margin-right: 0px !important; + --removed-body-scroll-bar-size: 0px !important; +} + +discord-messages { + display: block; + margin: 1rem 0; + border-radius: 8px; + overflow: hidden; +} +@layer utilities { + .prose p { + margin-top: 0.25rem !important; + } +} \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 00000000..0eec4fa4 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,44 @@ +import { Inter } from "next/font/google"; +import type { Metadata, Viewport } from "next"; +import { Provider } from "@/components/provider"; +import { appDescription, appName, siteUrl, socialImage } from "@/lib/shared"; +import "./global.css"; + +const inter = Inter({ + subsets: ["latin"], +}); + +export const metadata: Metadata = { + metadataBase: new URL(siteUrl), + title: { + template: `%s | ${appName}`, + default: `${appName} Documentation`, + }, + description: appDescription, + icons: { + icon: socialImage, + }, + openGraph: { + description: appDescription, + images: socialImage, + }, + twitter: { + card: "summary", + description: appDescription, + images: socialImage, + }, +}; + +export const viewport: Viewport = { + themeColor: "#74b0f7", +}; + +export default function Layout({ children }: LayoutProps<"/">) { + return ( + + + {children} + + + ); +} diff --git a/app/llms-full.txt/route.ts b/app/llms-full.txt/route.ts new file mode 100644 index 00000000..d494d2cb --- /dev/null +++ b/app/llms-full.txt/route.ts @@ -0,0 +1,10 @@ +import { getLLMText, source } from '@/lib/source'; + +export const revalidate = false; + +export async function GET() { + const scan = source.getPages().map(getLLMText); + const scanned = await Promise.all(scan); + + return new Response(scanned.join('\n\n')); +} diff --git a/app/llms.mdx/[[...slug]]/route.ts b/app/llms.mdx/[[...slug]]/route.ts new file mode 100644 index 00000000..4485752e --- /dev/null +++ b/app/llms.mdx/[[...slug]]/route.ts @@ -0,0 +1,23 @@ +import { getLLMText, getPageMarkdownUrl, source } from '@/lib/source'; +import { notFound } from 'next/navigation'; + +export const revalidate = false; + +export async function GET(_req: Request, { params }: RouteContext<'/llms.mdx/[[...slug]]'>) { + const { slug } = await params; + // remove the appended "content.md" + const page = source.getPage(slug?.slice(0, -1)); + if (!page) notFound(); + + return new Response(await getLLMText(page), { + headers: { + 'Content-Type': 'text/markdown', + }, + }); +} + +export function generateStaticParams() { + return source.getPages().map((page) => ({ + slug: getPageMarkdownUrl(page).segments, + })); +} diff --git a/app/llms.txt/route.ts b/app/llms.txt/route.ts new file mode 100644 index 00000000..fc80cb65 --- /dev/null +++ b/app/llms.txt/route.ts @@ -0,0 +1,8 @@ +import { source } from '@/lib/source'; +import { llms } from 'fumadocs-core/source'; + +export const revalidate = false; + +export function GET() { + return new Response(llms(source).index()); +} diff --git a/components/arg.tsx b/components/arg.tsx new file mode 100644 index 00000000..2aa9a126 --- /dev/null +++ b/components/arg.tsx @@ -0,0 +1,58 @@ +import React from "react"; +import "./styles/arg.css"; + +export interface ArgProps { + name?: string; + default?: string; + code?: boolean | string; +} + +export const Arg: React.FC = ({ + name = "Argument", + default: defaultValue = "", + code = false, +}) => { + const isRequired = defaultValue === ""; + const isCode = code === true || code === "true"; + + return ( +
+
+
+ {isRequired ? ( + "Required Argument" + ) : ( + <> + Optional Argument + {isCode ? ( +
+ Default: {defaultValue} +
+ ) : ( +
Default: {defaultValue}
+ )} + + )} +
+ + Tooltip + + + + + +
+
{name}
+
+ ); +}; + +export default Arg; diff --git a/components/badge.tsx b/components/badge.tsx new file mode 100644 index 00000000..9d8f0107 --- /dev/null +++ b/components/badge.tsx @@ -0,0 +1,41 @@ +import type { ReactNode } from 'react'; + +type BadgeType = 'tip' | 'info' | 'warning' | 'danger'; + +const styles: Record = { + tip: 'bg-emerald-500/12 text-emerald-700 ring-emerald-500/25 dark:text-emerald-300', + info: 'bg-sky-500/12 text-sky-700 ring-sky-500/25 dark:text-sky-300', + warning: 'bg-amber-500/12 text-amber-700 ring-amber-500/25 dark:text-amber-300', + danger: 'bg-rose-500/12 text-rose-700 ring-rose-500/25 dark:text-rose-300', +}; + +/** + * Drop-in replacement for the VuePress ``, kept prop-compatible so the + * ~1000 existing usages in content did not need rewriting. + */ +export function Badge({ + type = 'tip', + text, + vertical = 'middle', + children, +}: { + type?: BadgeType; + text?: string; + vertical?: 'top' | 'middle' | 'bottom'; + children?: ReactNode; +}) { + return ( + + {text ?? children} + + ); +} + +export function Tag({text}: {text: string}) { + return ( + + ); +} diff --git a/components/discord.tsx b/components/discord.tsx new file mode 100644 index 00000000..2d154976 --- /dev/null +++ b/components/discord.tsx @@ -0,0 +1,191 @@ +'use client'; + +import type { ComponentProps, ElementType, ReactNode } from 'react'; +import React from 'react'; +import { useTheme } from 'next-themes'; + +import { + DiscordActionRow, + DiscordButton, + DiscordEmbed as RawEmbed, + DiscordEmbedDescription, + DiscordEmbedField as RawEmbedField, + DiscordEmbedFields, + DiscordEmbedFooter, + DiscordMention as RawMention, + DiscordMessage as RawMessage, + DiscordMessages as RawMessages, + DiscordReaction as RawReaction, + DiscordReactions, +} from '@skyra/discord-components-react'; + +/** + * Discord message mock-ups. + * + * The old site used `@discord-message-components/vue`, which has no maintained + * React counterpart. Skyra is the maintained successor. + */ + +function withSiteTheme(Component: any) { + return function Themed( + props: ComponentProps & { lightTheme?: boolean } + ) { + const { resolvedTheme } = useTheme(); + const Rendered = Component as ElementType; + + return ( + + ); + }; +} + +export const DiscordMessages = withSiteTheme(RawMessages); +export const DiscordMessage = withSiteTheme(RawMessage); + +/** + * Legacy DiscordEmbed. + * + * Existing syntax continues to work: + * + * + * + * You are awesome + * + * + * + * New simplified syntax also works: + * + * + * You are awesome + * + */ +type DiscordEmbedProps = Omit< + ComponentProps, + 'children' +> & { + children?: ReactNode; +}; + +export function DiscordEmbed({ + children, + ...props +}: DiscordEmbedProps) { + const { resolvedTheme } = useTheme(); + + const childArray = React.Children.toArray(children); + + // Empty embed: preserve it as-is. + if (childArray.length === 0) { + return ( + + ); + } + + const child = childArray.length === 1 + ? childArray[0] + : null; + + const isParagraph = + React.isValidElement(child) && + child.type === 'p'; + + const description = isParagraph + ? (child.props as { children?: ReactNode }).children + : children; + + const isPlainContent = + isParagraph || + typeof description === 'string' || + typeof description === 'number'; + + return ( + + {isPlainContent ? ( + + {description} + + ) : ( + children + )} + + ); +} + +export const DiscordEmbedField = withSiteTheme(RawEmbedField); +export const DiscordMention = withSiteTheme(RawMention); +export const DiscordReaction = withSiteTheme(RawReaction); + +// These have no `lightTheme` of their own — they inherit from their parent. +export { + DiscordActionRow, + DiscordButton, + DiscordEmbedDescription, + DiscordEmbedFields, + DiscordEmbedFooter, + DiscordReactions, +}; + +/** + * Simplified Discord message components. + * + */ + +type SimpleMessageProps = Omit< + ComponentProps, + 'children' +> & { + children?: ReactNode; +}; + + +export function DiscordMessageUser({ + children, + ...props +}: SimpleMessageProps) { + const lightTheme = useTheme().resolvedTheme === 'light'; + return ( + + {children} + + ); +} + +export function DiscordMessageBot({ + children, + ...props +}: SimpleMessageProps) { + const lightTheme = useTheme().resolvedTheme === 'light'; + + return ( + + {children} + + + ); +} + +/** + * `DiscordMarkdown` compatibility wrapper. + */ +export function DiscordMarkdown({ + children, +}: { + children?: ReactNode; +}) { + return children; +} diff --git a/components/image-zoom.tsx b/components/image-zoom.tsx new file mode 100644 index 00000000..3b2a82f7 --- /dev/null +++ b/components/image-zoom.tsx @@ -0,0 +1,49 @@ +'use client'; + +import { Image, type ImageProps } from 'fumadocs-core/framework'; +import type { ComponentProps } from 'react'; +import Zoom, { type UncontrolledProps } from 'react-medium-image-zoom'; +import '../styles/image-zoom.css'; + +export type ImageZoomProps = ImageProps & { + /** + * Image props when zoom in + */ + zoomInProps?: ComponentProps<'img'>; + + /** + * Props for `react-medium-image-zoom` + */ + rmiz?: UncontrolledProps; +}; + +function getImageSrc(src: ImageProps['src']): string { + if (typeof src === 'string') return src; + + if (typeof src === 'object') { + // Next.js + if ('default' in src) return (src as { default: { src: string } }).default.src; + return src.src; + } + + return ''; +} + +export function ImageZoom({ zoomInProps, children, rmiz, ...props }: ImageZoomProps) { + return ( + + {children ?? ( + + )} + + ); +} diff --git a/components/mdx.tsx b/components/mdx.tsx new file mode 100644 index 00000000..0d976ef5 --- /dev/null +++ b/components/mdx.tsx @@ -0,0 +1,68 @@ +import defaultMdxComponents from "fumadocs-ui/mdx"; +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; +import type { MDXComponents } from "mdx/types"; +import type { ComponentProps, ComponentType } from "react"; +import { Badge, Tag } from "@/components/badge"; +import { Arg } from "@/components/arg"; +import * as Discord from "@/components/discord"; +import { ImageZoom } from "fumadocs-ui/components/image-zoom"; + +const NextImage = defaultMdxComponents.img as ComponentType< + ComponentProps<"img"> +>; + +const Image = ({ + className, + src, + width, + height, + ...props +}: ComponentProps<"img">) => { + const classes = ["rounded-lg", className].filter(Boolean).join(" "); + + const resolvedSrc = typeof src === "string" ? src : (src as any)?.src; + const resolvedWidth = width || (src as any)?.width; + const resolvedHeight = height || (src as any)?.height; + + if (resolvedWidth && resolvedHeight) { + return ( + + ); + } + + return ( + + ); +}; + +export function getMDXComponents(components?: MDXComponents) { + return { + ...defaultMdxComponents, + img: Image, + Accordion, + Accordions, + Badge, + Tag, + Arg, + ...Discord, + ...components, + } satisfies MDXComponents; +} + +export const useMDXComponents = getMDXComponents; + +declare global { + type MDXProvidedComponents = ReturnType; +} diff --git a/components/provider.tsx b/components/provider.tsx new file mode 100644 index 00000000..522282b2 --- /dev/null +++ b/components/provider.tsx @@ -0,0 +1,8 @@ +'use client'; +import SearchDialog from '@/components/search'; +import { RootProvider } from 'fumadocs-ui/provider/next'; +import { type ReactNode } from 'react'; + +export function Provider({ children }: { children: ReactNode }) { + return {children}; +} diff --git a/components/search.tsx b/components/search.tsx new file mode 100644 index 00000000..b0417eb9 --- /dev/null +++ b/components/search.tsx @@ -0,0 +1,38 @@ +'use client'; +import { + SearchDialog, + SearchDialogClose, + SearchDialogContent, + SearchDialogHeader, + SearchDialogIcon, + SearchDialogInput, + SearchDialogList, + SearchDialogOverlay, + type SharedProps, +} from 'fumadocs-ui/components/dialog/search'; +import { useDocsSearch } from 'fumadocs-core/search/client'; +import { staticClient } from 'fumadocs-core/search/client/orama-static'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; + +export default function DefaultSearchDialog(props: SharedProps) { + const { locale } = useI18n(); // (optional) for i18n + const { search, setSearch, query } = useDocsSearch({ + client: staticClient({ + locale, + }), + }); + + return ( + + + + + + + + + + + + ); +} diff --git a/components/styles/arg.css b/components/styles/arg.css new file mode 100644 index 00000000..c498a089 --- /dev/null +++ b/components/styles/arg.css @@ -0,0 +1,84 @@ +.arg-badge { + display: inline-flex; + vertical-align: middle; + padding: 0 8px; + margin: 0; + align-items: center; + border-radius: 8px; + width: fit-content; + font-size: 12px; + gap: 6px; + font-weight: 600; +} + +.required-false { + background-color: rgba(100, 100, 255, 0.2); + color: rgb(150, 150, 200); + border: 1px solid rgba(100, 100, 255, 0.2); +} + +.required-true { + background-color: rgba(255, 100, 150, 0.2); + color: rgb(200, 100, 150); + border: 1px solid rgba(255, 100, 150, 0.2); +} + +.tooltip { + position: relative; + display: flex; + align-items: center; + cursor: pointer; +} + +.tooltip-text { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + justify-content: center; + font-weight: 600; + visibility: hidden; + border-radius: 8px; + opacity: 0; + position: absolute; + left: -185px; + width: 160px; + padding: 2px 10px; + z-index: 20; + background-color: rgba(255, 255, 255, 0.9); + color: black; + border: 1px solid rgba(150, 150, 150, 0.3); + transition: + opacity 0.3s ease, + visibility 0.2s ease, + transform 0.3s ease-out; + transform: translateX(-10px); + margin: 0; + line-height: 22px; +} + +.tooltip-text div { + line-height: 22px; +} + +html.dark .tooltip-text { + background-color: rgba(0, 0, 0, 0.9); + color: white; +} + +.tooltip:hover .tooltip-text { + visibility: visible; + opacity: 1; + transform: translateX(0px); +} + +@media screen and (max-width: 768px) { + .tooltip-text { + left: -10px; + top: 25px; + transform: translateY(10px); + } + .tooltip:hover .tooltip-text { + transform: translateY(0px); + } +} diff --git a/components/ui/button.tsx b/components/ui/button.tsx new file mode 100644 index 00000000..9b0549a5 --- /dev/null +++ b/components/ui/button.tsx @@ -0,0 +1,103 @@ +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, type VariantProps } from 'class-variance-authority'; + +const variants = { + primary: 'bg-fd-primary text-fd-primary-foreground hover:bg-fd-primary/80', + outline: 'border hover:bg-fd-accent hover:text-fd-accent-foreground', + ghost: 'hover:bg-fd-accent hover:text-fd-accent-foreground', + secondary: + 'border bg-fd-secondary text-fd-secondary-foreground hover:bg-fd-accent hover:text-fd-accent-foreground', +} as const; + +export const buttonVariants = cva( + 'inline-flex items-center justify-center gap-1.5 rounded-md p-2 text-sm font-medium transition-colors duration-100 disabled:pointer-events-none disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fd-ring [&_svg]:pointer-events-none [&_svg]:shrink-0', + { + variants: { + variant: variants, + color: variants, + size: { + sm: 'gap-1.5 px-2.5 py-1.5 text-xs [&_svg]:size-3.5', + md: 'px-3 py-2 text-sm [&_svg]:size-4', + icon: 'p-1.5 [&_svg]:size-5', + 'icon-sm': 'p-1.5 [&_svg]:size-4.5', + 'icon-xs': 'p-1 [&_svg]:size-4', + }, + }, + defaultVariants: { + color: 'primary', + size: 'sm', + }, + }, +); + +export type ButtonProps = React.ButtonHTMLAttributes & + React.AnchorHTMLAttributes & + VariantProps & { + asChild?: boolean; + icon?: React.ReactNode; + leftIcon?: React.ReactNode; + rightIcon?: React.ReactNode; + link?: string; + }; + +export const Button = React.forwardRef( + ( + { + className, + color, + size, + asChild = false, + icon, + leftIcon, + rightIcon, + children, + link, + ...props + }, + ref, + ) => { + const startIcon = icon || leftIcon; + const classes = buttonVariants({ color, size, className }); + + if (asChild) { + return ( + + {children} + + ); + } + + if (link) { + const isExternal = link.startsWith('http://') || link.startsWith('https://'); + + return ( + } + target={isExternal ? '_blank' : undefined} + rel={isExternal ? 'noreferrer' : undefined} + {...(props as React.AnchorHTMLAttributes)} + > + {startIcon} + {children} + {rightIcon} + + ); + } + return ( + + ); + }, +); + +Button.displayName = 'Button'; \ No newline at end of file diff --git a/content/docs/(functions)/Bot/botCount.mdx b/content/docs/(functions)/Bot/botCount.mdx new file mode 100644 index 00000000..784a6663 --- /dev/null +++ b/content/docs/(functions)/Bot/botCount.mdx @@ -0,0 +1,38 @@ +--- +title: "$botCount" +--- + +This function returns the total number of bots present in your Discord server (guild). + +## Usage +```cc +$botCount +``` + +Here's how you can use the `$botCount` function: + +```cc +!!exec There are $botCount bots in the server! +``` + +This command, when executed, will display a message showing the bot count in the server. See the example next: + + + +!!exec There are $botCount bots in the server! + + +There are 2 bots in the server! + + + + + +The bot count is retrieved from the bot's cache, not directly from the Discord API. This means the count might not be perfectly accurate, especially if all server members haven't been fully cached. Full caching is typically achieved at higher bot tiers (Tier 5). + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Bot/botOwnerID.mdx b/content/docs/(functions)/Bot/botOwnerID.mdx new file mode 100644 index 00000000..2699eab0 --- /dev/null +++ b/content/docs/(functions)/Bot/botOwnerID.mdx @@ -0,0 +1,51 @@ +--- +title: "$botOwnerID" +--- + +Retrieves the ID(s) of the bot owner(s). + +This function returns the Discord ID of the user(s) who own or manage the bot. If the bot is part of a team, it will return the IDs of all team members who are considered owners. + +## Usage + +```cc +$botOwnerID +``` + +Returns a single ID if there's only one owner, or a comma-separated list of IDs if there are multiple owners (e.g., a team). + +```cc +$botOwnerID[separator] +``` + +Returns a list of IDs separated by the specified `separator`. + +## Parameters + +* `separator` (Optional): A string used to separate the owner IDs when there are multiple owners. If omitted, IDs will be separated by commas. + +## Examples + +**Example 1: Get the bot owner ID (single owner):** + +If the bot has a single owner, this will return their ID. + +```cc +$botOwnerID +``` + +**Example 2: Get the bot owner IDs (team) with a custom separator:** + +If the bot belongs to a team, this will return the IDs of all team members separated by a pipe (|) character. + +```cc +$botOwnerID[|] +``` + +**Example 3: Get the bot owner IDs (team) with the default comma separator:** + +```cc +$botOwnerID +``` + +This will return the owner IDs separated by commas (e.g., `1234567890,9876543210`). \ No newline at end of file diff --git a/content/docs/(functions)/Bot/botPing.mdx b/content/docs/(functions)/Bot/botPing.mdx new file mode 100644 index 00000000..77de1c9b --- /dev/null +++ b/content/docs/(functions)/Bot/botPing.mdx @@ -0,0 +1,23 @@ +--- +title: "$botPing" +--- + +This function retrieves and returns the bot's current message ping (latency). This is a measure of the time it takes for the bot to send and receive a message. + +## How it Works + +The `$botPing` function calculates the time difference between when the bot sends a message to the Discord API and when it receives a response. This time is typically measured in milliseconds (ms). + +## Usage + +Simply use the `$botPing` function in your command or event. + +```cc +$botPing +``` + +## Example + +If the bot's ping is 50ms, the function will return: + +`50ms` diff --git a/content/docs/(functions)/Bot/botPrefix.mdx b/content/docs/(functions)/Bot/botPrefix.mdx new file mode 100644 index 00000000..7b519da2 --- /dev/null +++ b/content/docs/(functions)/Bot/botPrefix.mdx @@ -0,0 +1,17 @@ +--- +title: "$botPrefix" +--- + +This function retrieves and returns the current prefix of the bot. The prefix is used to recognize native bot commands such as `!!clone`, `!!create`, and other built-in commands. + +## Usage +```cc +$botPrefix +``` + + +The `$botPrefix` function returns the prefix currently configured for the bot. + +For the main bot, this is the bot's native command prefix (`!!`). + +For custom bots, the function returns the prefix configured by the administrator in the dashboard. \ No newline at end of file diff --git a/content/docs/(functions)/Bot/botTier.mdx b/content/docs/(functions)/Bot/botTier.mdx new file mode 100644 index 00000000..393c8784 --- /dev/null +++ b/content/docs/(functions)/Bot/botTier.mdx @@ -0,0 +1,18 @@ +--- +title: "$botTier" +--- + +This command retrieves the current tier level of your bot. + +The standard, free version of the bot operates at **Tier 0**. + + + +!!exec $botTier + + +0 + + + +The command will then return the tier level of your bot. \ No newline at end of file diff --git a/content/docs/(functions)/Bot/botTyping.mdx b/content/docs/(functions)/Bot/botTyping.mdx new file mode 100644 index 00000000..4e0474d5 --- /dev/null +++ b/content/docs/(functions)/Bot/botTyping.mdx @@ -0,0 +1,22 @@ +--- +title: "$botTyping" +--- + +Simulates the bot typing in the current channel. This will display the "Bot is typing..." indicator to users in the channel for approximately 10 seconds. + +**Important Note:** Due to limitations within the Discord API, the typing duration cannot be customized and is fixed at around 10 seconds. + +## Usage + +To trigger the bot typing indicator, simply use the `$botTyping` function. + +```cc +$botTyping +``` + +**Example:** + +If used within a command, the bot will display the "Bot is typing..." indicator for 10 seconds when the command is executed. +```cc +$botTyping +``` diff --git a/content/docs/(functions)/Bot/botVerified.mdx b/content/docs/(functions)/Bot/botVerified.mdx new file mode 100644 index 00000000..f2809247 --- /dev/null +++ b/content/docs/(functions)/Bot/botVerified.mdx @@ -0,0 +1,47 @@ +--- +title: "$botVerified" +--- + +This function checks if a Discord bot is verified. A verified bot has been reviewed and approved by Discord. + +## Usage + +```cc +$botVerified[Bot ID] +``` + +**`Bot ID`**: The ID of the bot you want to check. You can find this by right-clicking on the bot in Discord (with Developer Mode enabled) and selecting "Copy ID." + +## Examples + +Here are a couple of examples demonstrating how `$botVerified` works. + +### Example: Verified Bot + +In this example, we check if the bot with the ID `725721249652670555` is verified. + + + +!!exec $botVerified[725721249652670555] + + +true + + + +The function returns `true` because the bot with ID `725721249652670555` is verified. + +### Example: Unverified Bot + +In this example, we check if the bot with the ID `582019849073590274` is verified. + + + +!!exec $botVerified[582019849073590274] + + +false + + + +The function returns `false` because the bot with ID `582019849073590274` is not verified. \ No newline at end of file diff --git a/content/docs/(functions)/Bot/botVersion.mdx b/content/docs/(functions)/Bot/botVersion.mdx new file mode 100644 index 00000000..390c980a --- /dev/null +++ b/content/docs/(functions)/Bot/botVersion.mdx @@ -0,0 +1,19 @@ +--- +title: "$botVersion" +--- + +This function returns the version of your bot. + +## Usage + +The `$botVersion` function doesn't require any arguments. Simply use it in your commands to retrieve the current bot version. + +```cc +$botVersion +``` + +**Example:** + +Let's say your bot version is `v2.5.1`. If you use `$botVersion` in a message response, it will output: + +`v2.5.1` diff --git a/content/docs/(functions)/Bot/cacheMember.mdx b/content/docs/(functions)/Bot/cacheMember.mdx new file mode 100644 index 00000000..4bb0fa96 --- /dev/null +++ b/content/docs/(functions)/Bot/cacheMember.mdx @@ -0,0 +1,33 @@ +--- +title: "$cacheMember" +--- + +This function caches a member in the bot's memory. This is useful for functions like `$usersWithRole` that rely on having members already cached, especially if you're using them frequently *without* cooldowns. + +**Think of it this way:** Caching a member makes them instantly recognizable to the bot, preventing issues with functions that need to quickly access their information. + +**Note:** Functions like `$toggleRoles` and `$giveRoles` don't require you to manually cache members, as they handle member retrieval internally. + +## Usage +```cc +$cacheMember[userID (optional)] +``` + +* **`userID (optional)`:** The ID of the user you want to cache. If omitted, the function will attempt to cache the user who triggered the command. + +#### Example: + +`$cacheMember[123456789012345678]` - Caches the user with the ID 123456789012345678. + +`$cacheMember` - Caches the user who executed the command. + + + +**Automatic Caching:** When a user executes a command, they are automatically cached. You typically only need to use `$cacheMember` if you're dealing with users who haven't recently interacted with the bot or if you need to ensure a user is cached *before* a specific function is called. + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Bot/clientID.mdx b/content/docs/(functions)/Bot/clientID.mdx new file mode 100644 index 00000000..fdc34480 --- /dev/null +++ b/content/docs/(functions)/Bot/clientID.mdx @@ -0,0 +1,31 @@ +--- +title: "$clientID" +--- + +Retrieves the bot's User ID, also referred to as the Client ID. This is a unique identifier for your bot on Discord. + +## Usage +```cc +$clientID +``` + +
+ +This function is commonly used to programmatically access the bot's ID within custom commands or other bot logic. + +Here's an example of how it works in practice: + + + +!!exec $clientID + + +725721249652670555 + + + +As you can see, the command `!!exec $clientID` returns the bot's ID: `725721249652670555`. + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Bot/cpu.mdx b/content/docs/(functions)/Bot/cpu.mdx new file mode 100644 index 00000000..825e66d2 --- /dev/null +++ b/content/docs/(functions)/Bot/cpu.mdx @@ -0,0 +1,14 @@ +--- +title: "$cpu" +--- + +This function provides real-time information about the bot's current CPU usage. + +## Usage + +Simply use `$cpu` in your command or response. The function will be replaced with a numerical representation of the bot's CPU usage percentage. + +```cc +$cpu +``` + diff --git a/content/docs/(functions)/Bot/executionTime.mdx b/content/docs/(functions)/Bot/executionTime.mdx new file mode 100644 index 00000000..d8fa6cce --- /dev/null +++ b/content/docs/(functions)/Bot/executionTime.mdx @@ -0,0 +1,24 @@ +--- +title: "$executionTime" +--- + +This function returns the time it took for the interpreter to execute the code *before* this function, measured in milliseconds. + +## How to Use + +Simply include `$executionTime` in your code. It will be replaced with the execution time in milliseconds. + +```cc +$executionTime +``` + +**Example:** + +Imagine your bot executes some complex calculations or retrieves data from an external source. You can use `$executionTime` to gauge how long these operations take. + +```cc +Some complex command code +$executionTime +``` + +This would output the time taken to execute the "Some complex command code" part of the command. This can be useful for identifying performance bottlenecks. \ No newline at end of file diff --git a/content/docs/(functions)/Bot/getBotActivity.mdx b/content/docs/(functions)/Bot/getBotActivity.mdx new file mode 100644 index 00000000..96fe34b9 --- /dev/null +++ b/content/docs/(functions)/Bot/getBotActivity.mdx @@ -0,0 +1,33 @@ +--- +title: "$getBotActivity" +--- + + + +Retrieves the bot's current activity status (e.g., "Playing...", "Listening to...", "Watching...", "Competing in..."). + +## Usage + +```cc +$getBotActivity[text/type] +``` + +**Parameters:** + +* `text`: Returns the text displayed in the bot's activity status (e.g., "The Cosmos"). +* `type`: Returns the type of activity the bot is doing. (e.g. "PLAYING", "LISTENING", "WATCHING", "COMPETING") + +## Example + +This example demonstrates how to use `$getBotActivity[text]` to display the bot's current activity text. + +![Example Screenshot](https://i.imgur.com/KyYqUGU.png) + + + +!!exec $getBotActivity[text] + + +The Cosmos + + \ No newline at end of file diff --git a/content/docs/(functions)/Bot/getBotInvite.mdx b/content/docs/(functions)/Bot/getBotInvite.mdx new file mode 100644 index 00000000..0790ae66 --- /dev/null +++ b/content/docs/(functions)/Bot/getBotInvite.mdx @@ -0,0 +1,40 @@ +--- +title: "$getBotInvite" +--- + +Generate an invite link for your bot. + +## Usage + +```cc +$getBotInvite[permission;permission;permission...] +``` + +**Parameters:** + +* `permission` - (Optional) A list of permissions to request in the invite link. Separate multiple permissions with a semicolon (;). If no permissions are specified, the invite will request the default permissions. + +## Example + +```cc +!!exec $getBotInvite[admin] +``` + +This will output an invite link for your bot with administrator permissions. + +**Example Output:** + + + +!!exec $getBotInvite[admin] + + +https://discord.com/oauth2/authorize?client_id=725721249652670555&scope=bot+applications.commands&permissions=8 + + + + + +Refer to the [Permissions List](/CodeReferences/ref.permissions_list) for a comprehensive list of permission names and their corresponding integer values. + + \ No newline at end of file diff --git a/content/docs/(functions)/Bot/maxRam.mdx b/content/docs/(functions)/Bot/maxRam.mdx new file mode 100644 index 00000000..0ebef8f6 --- /dev/null +++ b/content/docs/(functions)/Bot/maxRam.mdx @@ -0,0 +1,19 @@ +--- +title: "$maxRam" +--- + +This function returns the maximum amount of RAM (memory) allocated to the current shard of your bot. It's helpful for monitoring resource usage and potentially optimizing performance. + +## Usage + +Simply use the function in your code: + +```cc +$maxRam +``` + +This will return the maximum RAM available to your bot's shard, typically expressed in mega bytes. + +**Example:** + +If the function returns `1024`, it means your shard has a maximum of 1GB of RAM available. \ No newline at end of file diff --git a/content/docs/(functions)/Bot/meta.json b/content/docs/(functions)/Bot/meta.json new file mode 100644 index 00000000..4fcbaf2d --- /dev/null +++ b/content/docs/(functions)/Bot/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Bot Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Bot/ping.mdx b/content/docs/(functions)/Bot/ping.mdx new file mode 100644 index 00000000..ab8cdfef --- /dev/null +++ b/content/docs/(functions)/Bot/ping.mdx @@ -0,0 +1,30 @@ +--- +title: "$ping" +--- + +This command provides the bot's ping (latency) in milliseconds. It's a quick and easy way to check if the bot is online, responsive, and functioning correctly. Think of it like a simple "health check" for the bot! + +## Usage +```cc +$ping +``` + +
+ +Here's an example of how to use the `$ping` command in Discord: + + + +!!exec $ping ms + + +20 ms + + + +In this example, the bot responded with `20 ms`, indicating a ping of 20 milliseconds. A lower ping generally means the bot is more responsive. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Bot/ram.mdx b/content/docs/(functions)/Bot/ram.mdx new file mode 100644 index 00000000..b92cd8e0 --- /dev/null +++ b/content/docs/(functions)/Bot/ram.mdx @@ -0,0 +1,31 @@ +--- +title: "$ram" +--- + +Displays the amount of RAM (Random Access Memory) currently being used by the bot. This command provides insight into the bot's resource consumption. + +## Usage +```cc +$ram +``` + +
+ +**Example:** + +```cc +!!exec $ram MB +``` + +**Bot Response:** + +``` +2143.55 MB +``` + +This indicates that the bot is currently using approximately 2143.55 MB of RAM. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Bot/serverCount.mdx b/content/docs/(functions)/Bot/serverCount.mdx new file mode 100644 index 00000000..e96dc99b --- /dev/null +++ b/content/docs/(functions)/Bot/serverCount.mdx @@ -0,0 +1,27 @@ +--- +title: "$serverCount" +--- + +This function returns the total number of servers (guilds) the bot is currently in. It's a simple way to display the bot's reach. + +## Usage +```cc +$serverCount +``` + +This function doesn't require any arguments. Just include it in your command response. +
+**Example:** + + +!!exec I am in $serverCount servers. + + +I am in 15000 servers. + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Bot/setBotActivity.mdx b/content/docs/(functions)/Bot/setBotActivity.mdx new file mode 100644 index 00000000..35b6801b --- /dev/null +++ b/content/docs/(functions)/Bot/setBotActivity.mdx @@ -0,0 +1,28 @@ +--- +title: "$setBotActivity" +--- + + + +Set your bot's activity status (the text displayed under the bot's name). + +## Usage + +```cc +$setBotActivity[activity type;activity text] +``` + +**Parameters:** + +* `activity type`: The type of activity. Valid options are: `playing`, `streaming`, `listening`, `watching`, `custom` and `competing`. +* `activity text`: The text to display as the bot's activity. + +## Examples + +**Example:** Sets the bot's activity to "Listening to The Cosmos". + +```cc +$setBotActivity[listening;The Cosmos] +``` + +![](https://i.imgur.com/KyYqUGU.png) \ No newline at end of file diff --git a/content/docs/(functions)/Bot/uptime.mdx b/content/docs/(functions)/Bot/uptime.mdx new file mode 100644 index 00000000..898755d2 --- /dev/null +++ b/content/docs/(functions)/Bot/uptime.mdx @@ -0,0 +1,30 @@ +--- +title: "$uptime" +--- + +This command displays how long the bot has been running since it was last started. + +## Usage +```cc +$uptime +``` + +
+ +Here's an example of how it works: + + + +!!exec $uptime + + +3d 17h 53m 27s + + + +In this example, the bot has been running for 3 days, 17 hours, 53 minutes, and 27 seconds. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/blackListChannelIDs.mdx b/content/docs/(functions)/Channel/blackListChannelIDs.mdx new file mode 100644 index 00000000..27fea990 --- /dev/null +++ b/content/docs/(functions)/Channel/blackListChannelIDs.mdx @@ -0,0 +1,41 @@ +--- +title: "$blackListChannelIDs" +--- + +Prevent command execution within specified channels and display a custom error message. + +This function allows you to blacklist specific channels (including categories and threads) where a command cannot be executed. If a user attempts to use the command in a blacklisted channel, the bot will send a predefined error message and stop the command's execution. + +## Usage + +```cc +$blackListChannelIDs[Channel ID 1;Channel ID 2;...;Error Message] +``` + +* **Channel ID 1;Channel ID 2;...**: A semicolon-separated list of channel IDs (or names) that are blacklisted. You can use the channel name, but using channel IDs is always recommended for accuracy. +* **Error Message**: The message that will be sent to the user if they attempt to use the command in a blacklisted channel. This message should be informative and helpful to the user. + +**Important Notes:** + +* You can blacklist multiple channels at once by separating their IDs with semicolons. +* The error message is required and must be placed after the list of channel IDs. +* This function checks the channel ID *where the command was executed*. + +## Example: + +```cc +$blackListChannelIDs[123456789012345678;987654321098765432;You cannot use this command in the #games or #help channels.] +``` + +In this example: + +* `123456789012345678` and `987654321098765432` are the channel IDs that are blacklisted. +* `You cannot use this command in the #games or #help channels.` is the error message that will be displayed to the user if they try to use the command in either of those channels. + +**Alternative Example using Channel Names (less reliable):** + +```cc +$blackListChannelIDs[games;help;You cannot use this command in the #games or #help channels.] +``` + +**Recommendation:** Using Channel IDs is the most reliable approach. To get a channel's ID, you may need to enable Developer Mode in your Discord settings (User Settings -> Advanced -> Developer Mode). Then you can right-click the channel and select "Copy ID". \ No newline at end of file diff --git a/content/docs/(functions)/Channel/cacheChannelMessages.mdx b/content/docs/(functions)/Channel/cacheChannelMessages.mdx new file mode 100644 index 00000000..f208f92c --- /dev/null +++ b/content/docs/(functions)/Channel/cacheChannelMessages.mdx @@ -0,0 +1,36 @@ +--- +title: "$cacheChannelMessages" +--- + +This command forces the bot to cache the latest messages from a channel. Caching messages allows the bot to access them faster, which can be useful for other commands. + +**Important:** This command caches up to 50 messages for standard bots. For bots that are Tier 3 or higher, it caches up to 100 messages. + +## Usage + +```cc +$cacheChannelMessages[Channel ID (optional)] +``` + +**Explanation:** + +* `Channel ID (optional)` is the ID of the channel you want to cache messages from. This is optional. + + * **If you provide a Channel ID:** The command will cache messages from the specified channel. + * **If you don't provide a Channel ID:** The command will cache messages from the channel where the command is executed (the current channel). This is equivalent to using `$channelID`. + +## Examples + +**Cache messages from the current channel:** + +```cc +$cacheChannelMessages +``` + +**Cache messages from a specific channel (using its ID):** + +```cc +$cacheChannelMessages[123456789012345678] +``` + +**Note:** Replace `123456789012345678` with the actual ID of the channel. You can typically find the Channel ID by enabling Developer Mode in Discord settings (Appearance -> Advanced) and right-clicking on the channel. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/categoryChannels.mdx b/content/docs/(functions)/Channel/categoryChannels.mdx new file mode 100644 index 00000000..89e2d8cd --- /dev/null +++ b/content/docs/(functions)/Channel/categoryChannels.mdx @@ -0,0 +1,32 @@ +--- +title: "$categoryChannels" +--- + +This function retrieves information about channels within a specified category. + +## Usage + +```cc +$categoryChannels[Category ID;Info type (name/id/mention);Separator (optional, default is ",")] +``` + +**Parameters:** + +* **`Category ID`:** The ID of the category you want to retrieve channel information from. This is a numerical value. +* **`Info type`:** Determines what information you want to retrieve for each channel. Choose from: + * `name`: Returns the name of each channel. + * `id`: Returns the ID of each channel. + * `mention`: Returns a mention string for each channel. +* **`Separator` (Optional):** Specifies the character or string to separate the channel information. If not provided, the default separator is a comma (`,`). + +## Example + +```cc +!!exec $categoryChannels[1004738497191628860;name;, ] +``` + +This example retrieves the names of all channels within the category with the ID `1004738497191628860`, separated by a comma and a space. + +**Result:** + +![](https://i.imgur.com/3H1BazG.png) \ No newline at end of file diff --git a/content/docs/(functions)/Channel/channel.mdx b/content/docs/(functions)/Channel/channel.mdx new file mode 100644 index 00000000..dec4ef88 --- /dev/null +++ b/content/docs/(functions)/Channel/channel.mdx @@ -0,0 +1,64 @@ +--- +title: "$channel" +--- + +Retrieves information about a specific channel. + +## Usage: + +`$channel[Channel ID;Option]` + +#### Parameters: + +* **Channel ID:** The ID of the channel you want to get information from. +* **Option:** The specific piece of information you want to retrieve about the channel. See the list below for available options. + +#### Available Options: + +The `Option` parameter determines what information `$channel` returns. Here's a breakdown of the available options: + +* `name`: The name of the channel. +* `id`: The ID of the channel. +* `isdeleted`: Returns `true` if the channel is deleted, otherwise `false`. +* `mention`: Returns the channel mention (e.g., `<#1234567890>`). +* `position`: The channel's position in the channel list (numerical). +* `rawposition`: The raw position of the channel, unaffected by sorting. +* `topic`: The channel topic (if applicable, e.g., for text channels). +* `type`: The type of channel (See Note below). +* `created`: The timestamp of when the channel was created (Unix timestamp). +* `timestamp`: Alias for `created`. Returns the timestamp when the channel was created (Unix timestamp). +* `guildid`: The ID of the guild (server) the channel belongs to. +* `guildname`: The name of the guild (server) the channel belongs to. +* `ismanageable`: Returns `true` if the bot can manage the channel, otherwise `false`. +* `parentid`: The ID of the parent category (if applicable). +* `parentname`: The name of the parent category (if applicable). +* `isviewable`: Returns `true` if the bot can view the channel, otherwise `false`. +* `isdeletable`: Returns `true` if the bot can delete the channel, otherwise `false`. +* `region`: Return the voice channel's RTC region +* `limit`: Return the voice channel's user limit + +##### RC Voice Channel Region +auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west + +#### Example: + +This example retrieves the name of the channel with the ID stored in the variable `$channelID`. + + + +!!exec #$channel[$channelID;name] + + +#custom-command-is-the-best + + + + + +The `type` option returns the channel's type. Refer to this [list](/CodeReferences/ref.channel_types) for possible channel types. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelCategoryID.mdx b/content/docs/(functions)/Channel/channelCategoryID.mdx new file mode 100644 index 00000000..e1871b9c --- /dev/null +++ b/content/docs/(functions)/Channel/channelCategoryID.mdx @@ -0,0 +1,32 @@ +--- +title: "$channelCategoryID" +--- + +Retrieves the ID of the category channel the current channel or a specified channel belongs to. + +**What it does:** This function returns the unique identifier (ID) of the category channel that the channel where the command is executed is in. You can also specify a different channel ID to get its category ID. + +## Usage: + +* `$channelCategoryID` - Returns the category ID of the current channel where the command is used. +* `$channelCategoryID[channelID]` - Returns the category ID of the specified channel ID. Replace `channelID` with the actual ID of the channel. + +
+ +**Example:** + + + +!!exec $channelCategoryID + + +83975894758938799 + + + +In this example, the command `!!exec $channelCategoryID` is used in a channel that is within the category channel with the ID `83975894758938799`. The bot returns the ID of the category channel. + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelCount.mdx b/content/docs/(functions)/Channel/channelCount.mdx new file mode 100644 index 00000000..2e4f1bc6 --- /dev/null +++ b/content/docs/(functions)/Channel/channelCount.mdx @@ -0,0 +1,34 @@ +--- +title: "$channelCount" +--- + +This function returns the total number of channels present in the server. + +## Usage +```cc +$channelCount[Channel Type (optional)] +``` + +You can optionally specify a channel type to count only channels of that specific type. Refer to this [list](/CodeReferences/ref.channel_types) for valid channel types. + +#### Parameters: + +* **`Channel Type` (optional):** The type of channel to count. If omitted, the function will count all channels. Valid types can be found in the [Channel Types Reference](/CodeReferences/ref.channel_types). + +#### Example: + +Counts the number of public threads in the server: + +
+ + +!!exec There are $channelCount[threads_public] threads in the server! + + +There are 13 threads in the server! + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelExists.mdx b/content/docs/(functions)/Channel/channelExists.mdx new file mode 100644 index 00000000..86859c30 --- /dev/null +++ b/content/docs/(functions)/Channel/channelExists.mdx @@ -0,0 +1,48 @@ +--- +title: "$channelExists" +--- + +Checks if a channel with the provided ID exists. Returns `true` if the channel exists, and `false` if it doesn't. + +## Usage: + +`$channelExists[channelID]` + +**Parameters:** + +* `channelID`: The ID of the channel to check. This should be a numerical value. + +
+ +**Example:** + +```cc +!!exec $channelExists[889102524727058463] +``` + +``` +true +``` + + + +This example checks if a channel with the ID `889102524727058463` exists. Since a channel with that ID exists, the function returns `true`. + + + + + +You can use the `$channelID` function to retrieve the ID of a channel based on its name. This is helpful if you don't already know the channel's ID. + + + + + +* `$findChannel`: Finds a channel by its name. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelID.mdx b/content/docs/(functions)/Channel/channelID.mdx new file mode 100644 index 00000000..4441e073 --- /dev/null +++ b/content/docs/(functions)/Channel/channelID.mdx @@ -0,0 +1,51 @@ +--- +title: "$channelID" +--- + +Returns the ID of the channel where the command is executed. You can also use it to find the ID of another channel by providing its name. + +## Usage +```cc +$channelID[channel name (optional)] +``` + +* If no channel name is provided, it returns the ID of the channel where the command was used. +* If a channel name is provided, it returns the ID of the channel with that name. + +
+ +**Example:** + +```cc +!!exec $channelID +``` + +``` +839090554205241394 +``` + +**Explanation:** The bot returns the channel ID where the `!!exec` command was used. + +
+ +**Example with channel name:** + +Let's say you have a channel named `#general`. You can get its ID like this: + +```cc +!!exec $channelID[general] +``` + +If a channel named `general` exists, the output will be its ID. + + + +This function will **not** work with the voice channel join/leave trigger. Use `$voiceChannelID` instead. + +This function will **not** work with the channel creation/deletion trigger. Use `$eventChannelID` instead. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelName.mdx b/content/docs/(functions)/Channel/channelName.mdx new file mode 100644 index 00000000..509f00ea --- /dev/null +++ b/content/docs/(functions)/Channel/channelName.mdx @@ -0,0 +1,48 @@ +--- +title: "$channelName" +--- + +Retrieves the name of a Discord channel. + +## Usage +```cc +$channelName[channelID] +``` + +`` (Required): The ID of the channel you want to get the name of. + +
+ +**Example:** + + + +!!exec $channelName[123456789012345678] + + +The channel's name is... (Assuming the channel ID 123456789012345678 is a channel named "help") + + + + + +* If a channel with the specified ID is not found, the function will return an empty string. +* Make sure your bot has the necessary permissions to access the channel. + + + + + +Use `$channelID` to get the ID of a channel by its name or to get the ID of the channel where the command was executed. + + + + + +Use `$findChannel` to find a channel using its name. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelPermissionsFor.mdx b/content/docs/(functions)/Channel/channelPermissionsFor.mdx new file mode 100644 index 00000000..5fc1783c --- /dev/null +++ b/content/docs/(functions)/Channel/channelPermissionsFor.mdx @@ -0,0 +1,37 @@ +--- +title: "$channelPermissionsFor" +--- + +This function retrieves the permissions a specific user or role has within a given channel. It returns a comma-separated list of those permissions. + +## Usage + +```cc +$channelPermissionsFor[userID/roleID] +$channelPermissionsFor[channelID;userID/roleID] +``` + +**Arguments:** + +* `userID/roleID`: (Required) The ID of the user or role whose permissions you want to retrieve. +* `channelID`: (Optional) The ID of the channel to check permissions in. If omitted, the current channel where the command is executed will be used. + +**Breakdown:** + +* **`$channelPermissionsFor[userID/roleID]`**: This will return the permissions of the specified user or role within the channel the command is being executed in. +* **`$channelPermissionsFor[channelID;userID/roleID]`**: This allows you to specify a different channel to check permissions in using its `channelID`. This is useful for checking permissions in other channels without being directly in that channel. + +## Example + +Here's an example demonstrating how to use `$channelPermissionsFor`: + + + +!!exec $channelPermissionsFor[$channelID;$authorID] + + +Create Instant Invite, Kick Members, Ban Members, Administrator, Manage Channels, Manage Guild, Add Reactions, View Audit Log, Priority Speaker, Stream, View Channel, Send Messages, Send Tts Messages, Manage Messages, Embed Links, Attach Files, Read Message History, Mention Everyone, Use External Emojis, View Guild Insights, Connect, Speak, Mute Members, Deafen Members, Move Members, Use Vad, Change Nickname, Manage Nicknames, Manage Roles, Manage Webhooks, Manage Emojis And Stickers, Use Application Commands, Request To Speak, Manage Events, Manage Threads, Use Public Threads, Create Public Threads, Use Private Threads, Create Private Threads, Use External Stickers, Send Messages In Threads, Start Embedded Activities, Moderate Members + + + +In this example, the command `!!exec $channelPermissionsFor[$channelID;$authorID]` retrieves and displays the permissions of the command author (`$authorID`) within the current channel (`$channelID`). The bot then responds with a comma-separated list of the user's permissions in that channel. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/channelTopic.mdx b/content/docs/(functions)/Channel/channelTopic.mdx new file mode 100644 index 00000000..9d155661 --- /dev/null +++ b/content/docs/(functions)/Channel/channelTopic.mdx @@ -0,0 +1,30 @@ +--- +title: "$channelTopic" +--- + +Retrieves the topic (or description) of a channel. + +## Syntax + +```cc +$channelTopic +$channelTopic[channelID] +``` + +## Arguments + +* `channelID` (Optional): The ID of the channel you want to retrieve the topic from. If omitted, it defaults to the channel where the command is executed. + +## Example Usage + +**1. Get the topic of the current channel:** + +```cc +$channelTopic +``` + +**2. Get the topic of a specific channel:** + +```cc +$channelTopic[123456789012345678] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Channel/channelType.mdx b/content/docs/(functions)/Channel/channelType.mdx new file mode 100644 index 00000000..4f7e79d2 --- /dev/null +++ b/content/docs/(functions)/Channel/channelType.mdx @@ -0,0 +1,35 @@ +--- +title: "$channelType" +--- + +Retrieves the type of a channel based on its ID. + +## Usage +```cc +$channelType[channelID] +``` + +This function allows you to determine the type of a specific channel using its unique ID. + +
+ +**Example:** + + + +!!exec $channelType[$channelID] + + +text + + + + + +The `$channelType` function returns a string representing the channel type. Refer to this [list](/CodeReferences/ref.channel_types) for possible channel types and their meanings. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/channelUsed.mdx b/content/docs/(functions)/Channel/channelUsed.mdx new file mode 100644 index 00000000..00d947a5 --- /dev/null +++ b/content/docs/(functions)/Channel/channelUsed.mdx @@ -0,0 +1,42 @@ +--- +title: "$channelUsed" +--- + +Returns the ID of the channel used. If no channel ID is specified, it defaults to the current channel where the command was executed. + +## Usage +```cc +$channelUsed[channelID (optional)] +``` + +**Parameters:** + +* `channelID (optional)`: The ID of the channel you want to be set as the channel used. If omitted, the function returns the ID of the channel where the command is run. + +**Example:** + +Here are a few examples showcasing the `$channelUsed` function: + + + +!!exec $channelUsed[839090554205241394] + + +!!exec $channelUsed + + +839090554205241394 + + + +In the first example, the bot set the specified channel ID `839090554205241394` as the channel used. In the second example, because no channel ID is provided, the bot returns the channel ID where the `!!exec` command was executed. + + + +* `$channelID` returns the channel ID where the command was executed. See the `$channelID` documentation for more information. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/clear.mdx b/content/docs/(functions)/Channel/clear.mdx new file mode 100644 index 00000000..0acabfe6 --- /dev/null +++ b/content/docs/(functions)/Channel/clear.mdx @@ -0,0 +1,60 @@ +--- +title: "$clear" +--- + +Clears messages from a channel. You can clear messages from a specific user, or clear all messages in the channel. + +## Usage: + +`$clear[amount;userID or everyone (optional);channelID (optional);skip pinned messages (optional)]` + +**Parameters:** + +* `amount`: The number of messages to clear (maximum 100). +* `userID` (optional): The ID of the user whose messages you want to clear. If omitted, or set to `everyone`, all messages will be cleared. +* `channelID` (optional): The ID of the channel to clear messages from. If omitted, the current channel is used. +* `skip pinned messages` (optional): default is 'no' +**Example:** + +**Before:** + + + +I'm a spammer, everyone shut up! + + +I'm a spammer, everyone shut up! + + +I'm a spammer, everyone shut up! + + +I'm a spammer, everyone shut up! + + +I'm a spammer, everyone shut up! + + +I'm a spammer, everyone shut up! + + +!!exec $clear[10;everyone] $sendMessage[Channel has been purged] + + + +**After:** + + + +Channel has been purged. + + + + + +You can clear a maximum of 100 messages at a time. Messages older than 2 weeks cannot be cleared. + + + +**Function Difficulty:** + diff --git a/content/docs/(functions)/Channel/cloneChannel.mdx b/content/docs/(functions)/Channel/cloneChannel.mdx new file mode 100644 index 00000000..8c596ac9 --- /dev/null +++ b/content/docs/(functions)/Channel/cloneChannel.mdx @@ -0,0 +1,44 @@ +--- +title: "$cloneChannel" +--- + +Clones a channel, duplicating its permissions. + +## Usage + +```cc +$cloneChannel[Channel ID;New Name (optional);Category (optional);Return ID (yes/no, optional)] +``` + +**Parameters:** + +* **`Channel ID`**: The ID of the channel you want to clone. This is a required parameter. +* **`New Name`**: (Optional) The desired name for the new, cloned channel. If left blank, the cloned channel will have the same name as the original. +* **`Category`**: (Optional) The name or ID of the category you want the cloned channel to be placed in. If omitted, the cloned channel will be created outside of any category. +* **`Return ID`**: (Optional) Specifies whether the function should return the ID of the newly created channel. Accepts `"yes"` or `"no"`. Defaults to `"no"` if not specified. + +## Examples + +**Basic Cloning:** + +This example clones the channel with the ID "General" and names the clone "General-Cloned". + +```cc +$cloneChannel[General;General-Cloned] +``` + +**Cloning to a Category:** + +This example clones the channel with the ID "General", names the clone "General-Cloned", and places it in the category named "Category1". + +```cc +$cloneChannel[General;General-Cloned;Category1] +``` + +**Returning the Cloned Channel ID:** + +This clones the channel with the ID "General" and returns the ID of the newly created channel. + +```cc +$cloneChannel[General;;;yes] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Channel/closeTicket.mdx b/content/docs/(functions)/Channel/closeTicket.mdx new file mode 100644 index 00000000..408f2ed4 --- /dev/null +++ b/content/docs/(functions)/Channel/closeTicket.mdx @@ -0,0 +1,35 @@ +--- +title: "$closeTicket" +--- + +Closes a ticket that was previously created by the bot using the `$newTicket` command. This is used to finalize and close a support or request ticket channel. + +## Usage +```cc +$closeTicket[optional error message] +``` + +`$closeTicket` can optionally take an error message as an argument. This message will be displayed if there's an issue closing the ticket (although in most cases the ticket will close without errors). + +
+ +**Example:** + +This example demonstrates how to send a message informing the user about the ticket closure, wait for a short period, and then close the ticket. + +```cc +$sendmessage[This ticket will be closed in 5 seconds.] +$wait[5s] +$closeTicket +``` + +**Explanation:** + +* `$sendmessage[This ticket will be closed in 5 seconds.]`: Sends a message to the ticket channel informing the user that the ticket will be closed shortly. +* `$wait[5s]`: Pauses the script execution for 5 seconds, giving the user a chance to read the message. +* `$closeTicket`: Closes the ticket channel. + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/createChannel.mdx b/content/docs/(functions)/Channel/createChannel.mdx new file mode 100644 index 00000000..a19c1b03 --- /dev/null +++ b/content/docs/(functions)/Channel/createChannel.mdx @@ -0,0 +1,56 @@ +--- +title: "$createChannel" +--- + +Creates a new channel within your Discord server. + +## Usage: + +```cc +$createChannel[name;type;return ID (yes/no);categoryID (optional);topic;NSFW (yes/no);Bitrate (i.e 64000, VC only);Position;Slowmode in Seconds (optional);User Limit (VC only);RTC Region (VC Only)] +``` + +#### Parameters: + +* **name:** The name of the channel. +* **type:** The type of channel to create (e.g., `text`, `voice`, `category`). Refer to the available channel types list below. +* **return ID (yes/no):** Specify `yes` if you want the function to return the ID of the newly created channel, otherwise `no`. +* **categoryID (optional):** The ID of the category to place the new channel under. If left blank, the channel will be created outside of any category. +* **topic:** (Optional) The topic/description of the channel. +* **NSFW (yes/no):** Specify `yes` if the channel should be marked as NSFW (Not Safe For Work), otherwise `no`. +* **Bitrate (i.e 64000, VC only):** The bitrate of the voice channel (in bits per second). Only applicable for voice channels. +* **Position:** The position of the channel in the channel list. Lower numbers appear higher. +* **Slowmode in Seconds (optional):** The slowmode duration for the channel, in seconds. Only applicable for text channels. +* **User Limit (VC only):** The maximum number of users allowed in the voice channel. Only applicable for voice channels. +* **RTC Region:** The RTC region of the voice channel, defaults to `auto` + +##### RTC Region: +For Voice Channel Only, to specify where voice channel RTC region located. +default is `auto`, where discord will pick the best one, but you can specify one of those: +> auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west + + +#### Example: + +```cc +$createChannel[general;text;no] +``` + +This will create a text channel named "general" in the server. + + + +For a complete list of valid channel types, see [this reference page](/CodeReferences/ref.channel_types). + + + + + +* `$createThread`: Use this function to create a new thread. +* `$createRole`: Use this function to create a new role. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/createForum.mdx b/content/docs/(functions)/Channel/createForum.mdx new file mode 100644 index 00000000..d7da5ae6 --- /dev/null +++ b/content/docs/(functions)/Channel/createForum.mdx @@ -0,0 +1,74 @@ +--- +title: "$createForum" +--- + +Create a new forum channel within your Discord server. + +## Usage + +```cc +$createForum[ + {name=Forum name} + {topic=Forum topic and guidelines (optional)} + {layout=Forum Layout (optional)} + {category=Forum category (optional)} + {position=Forum position in the category (optional)} + {default_reaction=Post's default reaction (optional)} + {tag_required=Whether tag is required or not when adding post (optional)} + {sort=sorting order of the posts(optional)} + {archive=When auto-archive inactive post (optional)} + {nsfw=age restriction of forum (optional)} + {post_ratelimit=Post creations ratelimit (optional)} + {message_ratelimit=Post messages ratelimit (optional)} + {reason=Creation Reason for audit log (optional)} + {tag=available tags in the post (optional)} + {moderator_tag=available tags only for moderators} + {return_id=Whether return the created forum id or not} +] +``` + +**Parameters:** + +* **`name`**: (Required) The name of the forum channel. +* **`topic`**: (Optional) A description or guidelines for the forum. This will be displayed at the top of the forum channel. +* **`layout`**: (Optional) The visual layout of the forum. Accepts two values: `list` or `gallery`. Defaults to `list` if not specified. +* **`category`**: (Optional) The category ID where the forum channel should be created. If not provided, the forum will be created in the same category as the channel executing the command or at the top of the guild. +* **`position`**: (Optional) The numerical position of the forum within its category. +* **`default_reaction`**: (Optional) The default emoji reaction added to each new post. Must be a valid emoji. +* **`tag_required`**: (Optional) Specifies whether a tag is required when creating a new post. Accepts `yes` or `no`. +* **`sort`**: (Optional) Determines the sorting order of posts in the forum. Accepts two values: `creation` (sort by creation date) or `activity` (sort by last activity). Defaults to `creation`. +* **`archive`**: (Optional) Automatically archives inactive posts after a specified duration. Accepts the following values: `1h`, `1d`, `3d`, `7d`. +* **`nsfw`**: (Optional) Marks the forum as age-restricted (NSFW). Accepts `yes` or `no`. +* **`post_ratelimit`**: (Optional) Sets a ratelimit (in seconds) for creating new posts within the forum. +* **`message_ratelimit`**: (Optional) Sets a ratelimit (in seconds) for sending messages within posts in the forum. +* **`reason`**: (Optional) A reason for creating the forum, which will be logged in the audit log. +* **`tag`**: (Optional) Defines available tags for posts. Can be repeated. +* **`moderator_tag`**: (Optional) Defines available tags only for moderators. Can be repeated. +* **`return_id`**: (Optional) Specifies whether the created forum's ID should be returned. Accepts `yes` or `no`. + +**Important Considerations:** + +* You can repeat the `{tag}` and `{moderator_tag}` parameters as many times as needed, but keep the combined total number of tags below 20. Discord's API limits the number of tags. + +### Tag Format + +Tags can be defined in two formats: + +1. **Emoji + Name:** ` ` (e.g., `❤️ Love`) +2. **Name Only:** `` (e.g., `Helpful`) + +### Example: + +```cc +$createForum[ + {name=Opinions} + {topic=Share your thoughts and opinions on various topics.} + {archive=1w} + {tag=In Life} + {tag=In Work} + {tag=In Society} + {tag_required=yes} + {default_reaction=👍} + {sort=activity} +] +``` diff --git a/content/docs/(functions)/Channel/deleteChannels.mdx b/content/docs/(functions)/Channel/deleteChannels.mdx new file mode 100644 index 00000000..7a3b3575 --- /dev/null +++ b/content/docs/(functions)/Channel/deleteChannels.mdx @@ -0,0 +1,37 @@ +--- +title: "$deleteChannels" +--- + +Deletes one or more channels from the server. + +## Usage: + +`$deleteChannels[channelID1;channelID2;channelID3;...]` + +**Parameters:** + +* `channelID1;channelID2;channelID3;...`: A semicolon-separated list of channel IDs to delete. + +#### Example: + +`$deleteChannels[$channelID]` + +This example will delete the channel the command is executed in. `$channelID` represents the ID of the current channel. + +**Deleting Multiple Channels:** + +`$deleteChannels[123456789012345678;987654321098765432]` + +This example will delete the channels with IDs 123456789012345678 and 987654321098765432. + + + +* Use `$deleteRoles` to delete roles. +* Use `$deleteThreads` to delete threads. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/editChannel.mdx b/content/docs/(functions)/Channel/editChannel.mdx new file mode 100644 index 00000000..d8e999d0 --- /dev/null +++ b/content/docs/(functions)/Channel/editChannel.mdx @@ -0,0 +1,50 @@ +--- +title: "$editChannel" +--- + +Edits the properties of a channel. + +## Usage: + +`$editChannel[channelID;categoryID/$default;name/$default;position/$default;nsfw/$default (yes/no);bitrate/$default;userLimit/$default;syncPermission/$default (yes/no);reason (optional);RTC region/$default]` + +> Use `$default` as a placeholder if you don't want to modify a specific property. + +**Parameters:** + +* `channelID`: The ID of the channel you want to edit. +* `categoryID`: The ID of the category to move the channel to. Use `$default` to keep it in the same category. +* `name`: The new name of the channel. Use `$default` to keep the current name. +* `position`: The new position of the channel in the channel list (integer). Use `$default` to keep the current position. +* `nsfw`: Whether the channel is NSFW (Not Safe For Work). Use `yes` or `no`. Use `$default` to keep the current setting. +* `bitrate`: The new bitrate of the channel (for voice channels). Use `$default` to keep the current bitrate. +* `userLimit`: The new user limit of the channel (for voice channels). Use `$default` to keep the current limit. +* `syncPermission`: Whether to sync the channel's permissions with its category. Use `yes` or `no`. Use `$default` to keep the current setting. +* `reason`: (Optional) The reason for editing the channel. This will be visible in the audit log. +* `RTC Region`: (Optional) The new RTC Region for a voice channel, defaults to 'auto' + + + +Refer to [this list](/CodeReferences/ref.channel_types) for all valid channel types and their properties. + + + +#### RTC Region List: +default is `auto`, but you can specify one of those: +> auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west + +#### Example: + +`$editChannel[$channelID;$default;new-channel-name;$default;$default;$default;$default;yes;Channel name update]` + +This example changes the channel name to "new-channel-name", syncs permissions with category and provides a reason for audit logs. All other channel properties will remain unchanged. + + + +Use `$modifyChannelPerms` to manage channel permissions in more detail. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/editForum.mdx b/content/docs/(functions)/Channel/editForum.mdx new file mode 100644 index 00000000..b818b901 --- /dev/null +++ b/content/docs/(functions)/Channel/editForum.mdx @@ -0,0 +1,109 @@ +--- +title: "$editForum" +--- + +Edits an existing forum channel. This allows you to modify various aspects of the forum, such as its name, topic, layout, and available tags. + +## Usage + +```cc +$editForum[ + {id=Forum Channel ID} + {name=Forum name (optional)} + {topic=Forum topic and guidelines (optional)} + {layout=Forum Layout (optional)} + {category=Forum category (optional)} + {position=Forum position in the category (optional)} + {default_reaction=Post's default reaction (optional)} + {tag_required=Whether tag is required or not when adding post (optional)} + {sort=sorting order of the posts(optional)} + {archive=When auto-archive inactive post (optional)} + {nsfw=age restriction of forum (optional)} + {post_ratelimit=Post creations ratelimit (optional)} + {message_ratelimit=Post messages ratelimit (optional)} + {reason=Edit Reason for audit log (optional)} + {tag=available tags in the post (optional)} + {moderator_tag=available tags only for moderators} + {remove_tag=Tag name to remove} +] +``` + +**Parameters:** + +* `id`: (Required) The ID of the forum channel you want to edit. +* `name`: (Optional) The new name for the forum channel. +* `topic`: (Optional) The new topic and guidelines for the forum channel. This is often displayed at the top of the forum. +* `layout`: (Optional) The layout of the forum. Accepts two values: `list` or `gallery`. +* `category`: (Optional) The ID of the category you want to move the forum channel to. +* `position`: (Optional) The position of the forum channel within its category. This determines the order in which it's displayed. +* `default_reaction`: (Optional) The default emoji reaction added to new posts in the forum. +* `tag_required`: (Optional) Set to `true` to require users to select a tag when creating a new post. Defaults to `false`. +* `sort`: (Optional) The sorting order of posts. Accepts two values: `creation` (sort by creation date) or `activity` (sort by last activity). +* `archive`: (Optional) The duration after which inactive posts are automatically archived. Accepts the following values: `1h`, `1d`, `3d`, `7d`. +* `nsfw`: (Optional) Set to `true` to mark the forum as age-restricted (NSFW). Defaults to `false`. +* `post_ratelimit`: (Optional) The ratelimit in seconds for creating new posts in the forum. +* `message_ratelimit`: (Optional) The ratelimit in seconds for sending messages in posts in the forum. +* `reason`: (Optional) The reason for editing the forum channel. This will be displayed in the audit log. +* `tag`: (Optional) Add a new tag available for posts. You can specify both an emoji and a name, or just a name. See "Tag Values" below. +* `moderator_tag`: (Optional) Add a tag available only for moderators. You can specify both an emoji and a name, or just a name. See "Tag Values" below. +* `remove_tag`: (Optional) The name of a tag to remove from the forum. You can use this parameter multiple times to remove several tags. + +### Tag Removal + +You can remove existing tags using the `{remove_tag=Tag name}` parameter. Repeat this parameter as many times as necessary to remove multiple tags. Make sure you use the exact name of the tag you want to remove. + +### Layout Values + +The `layout` parameter accepts two possible values: + +* `list`: Displays posts in a list format. +* `gallery`: Displays posts in a gallery format. + +### Sort Order Values + +The `sort` parameter accepts two possible values: + +* `creation`: Sort posts by their creation date. +* `activity`: Sort posts by their last activity. + +### Tag Values + +The `tag` and `moderator_tag` parameters accept two formats: + +* ` ` (e.g., `:heart: Love`) +* `` (e.g., `Helpful`) + +### Auto-archive Inactive Post + +The `archive` parameter accepts the following durations: + +* `1h` (1 hour) +* `1d` (1 day) +* `3d` (3 days) +* `7d` (7 days) + +### Tag Limits + +You can repeat the `{tag}` or `{moderator_tag}` parameters as many times as needed, but the total number of tags (combined `tag` and `moderator_tag`) cannot exceed 20. Discord will reject the request if you exceed this limit. + +### Example + +Adding a tag with an emoji: + +```cc +$editForum[ + {id=123456789} + {tag=:heart: Love} +] +``` + +### Example + +Changing the forum name: + +```cc +$editForum[ + {id=123456789} + {name=My cute new forum name} +] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Channel/eventChannelID.mdx b/content/docs/(functions)/Channel/eventChannelID.mdx new file mode 100644 index 00000000..fde36b1b --- /dev/null +++ b/content/docs/(functions)/Channel/eventChannelID.mdx @@ -0,0 +1,25 @@ +--- +title: "$eventChannelID" +--- + +Returns the ID of the channel that was created or deleted. This function is used specifically for the **Channel Creation** or **Channel Deletion** triggers. + +## Usage +```cc +$eventChannelID +``` + + + +**Important Considerations:** + +* This function is exclusively for the **Channel Creation** and **Channel Deletion** triggers. +* For **Voice Channel Join/Leave** events, use `$voiceChannelID` instead. +* This function will **not** work in regular command triggers. For those triggers, use `$channelID`. + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/eventChannelParent.mdx b/content/docs/(functions)/Channel/eventChannelParent.mdx new file mode 100644 index 00000000..38049560 --- /dev/null +++ b/content/docs/(functions)/Channel/eventChannelParent.mdx @@ -0,0 +1,25 @@ +--- +title: "$eventChannelParent" +--- + +Returns the ID of the category/forum channel under which a channel or thread was created or deleted. This is **only applicable and useful within channel triggers** (e.g., `channelCreate` or `channelDelete`). + +**In simpler terms:** Imagine a Discord server with categories and channels. This code helps you find out *which category* a new channel was created in, or *which category* a channel was deleted from. + +## How to Use + +Just use `$eventChannelParent` within the code of a channel-based trigger. It will be replaced with the category/forum's ID. + +```cc +$eventChannelParent +``` + +**Example Scenario:** + +Let's say you have a channel trigger that runs when a new channel is created. You can use `$eventChannelParent` to send a message to a specific log channel informing administrators which category the new channel was created under: + +```cc +$channelSendMessage[LogChannelID;A new channel ($eventChannelName) was created under category ID: $eventChannelParent] +``` + +**Important Note:** This function will only return a valid ID within the scope of channel triggers. Using it outside of those triggers may result in unexpected behavior (likely an empty string). \ No newline at end of file diff --git a/content/docs/(functions)/Channel/findChannel.mdx b/content/docs/(functions)/Channel/findChannel.mdx new file mode 100644 index 00000000..c60bb005 --- /dev/null +++ b/content/docs/(functions)/Channel/findChannel.mdx @@ -0,0 +1,54 @@ +--- +title: "$findChannel" +--- + +Searches for a channel by its ID, mention, or name. + +## Usage: + +`$findChannel[ID/mention/name;returnCurrentChannel (yes/no) (optional)]` + +**Parameters:** + +* `ID/mention/name`: The ID, mention, or name of the channel to search for. +* `returnCurrentChannel (yes/no) (optional)`: Determines the behavior when a channel isn't found: + * `yes`: (Default) Returns the current channel's ID if no match is found. + * `no`: Returns `undefined` if no match is found. + +**Example Scenarios:** + +**Scenario 1: Channel Found (using channel name)** + + + +!!exec $findChannel[bot-commands;no] + + +869243919697846379 + + + +In this example, the bot searches for a channel named "bot-commands". If found, it returns the channel's ID (869243919697846379). The `;no` tells the function to return undefined if the channel isn't found. + +**Scenario 2: Channel Not Found (with `returnCurrentChannel` set to `no`)** + + + +!!exec $findChannel[bot-cmnds;no] + + +undefined + + + +Here, the bot attempts to find a channel named "bot-cmnds" (note the typo). Since no such channel exists, and the second argument is set to `no`, the function returns `undefined`. + + + +`$channelExists` is useful for verifying if a channel ID exists before using it. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/findServerChannel.mdx b/content/docs/(functions)/Channel/findServerChannel.mdx new file mode 100644 index 00000000..38f94e0a --- /dev/null +++ b/content/docs/(functions)/Channel/findServerChannel.mdx @@ -0,0 +1,43 @@ +--- +title: "$findServerChannel" +--- + +This function allows you to search for a specific channel within your Discord server. You can identify the channel by its **name**, **mention**, or **ID**. + +The last parameter determines what the function returns: the channel's ID or `undefined` if the channel is not found. + +## Syntax + +```cc +$findServerChannel[query;returnCurrentChannel (yes/no) (optional)] +``` + +**Parameters:** + +* `query`: (Required) The name, mention (e.g., `<#1234567890>`), or ID of the channel you're looking for. +* `returnCurrentChannel`: (Optional) Specify whether to return the current channel's ID if not found. + * `yes`: Returns the channel's ID. + * `no`: Returns `undefined` if the channel is not found. Defaults to `no` if omitted. + +## Example + +In this example, we're searching for a channel named "general" and telling the function *not* to return anything if the channel is not found. + + + +!!exec $findServerChannel[general;no] + + +802179504147136552 + + + + + + +* `$findMember`: Find a member in the server. +* `$findRole`: Find a role in the server. +* `$findChannel`: Find a channel (works across servers if the bot is in multiple). + + + \ No newline at end of file diff --git a/content/docs/(functions)/Channel/getChannelMessages.mdx b/content/docs/(functions)/Channel/getChannelMessages.mdx new file mode 100644 index 00000000..babdc8d7 --- /dev/null +++ b/content/docs/(functions)/Channel/getChannelMessages.mdx @@ -0,0 +1,33 @@ +--- +title: "$getChannelMessages" +--- + +Retrieves the most recent messages from a specified channel. + +## Usage + +```cc +$getChannelMessages[Channel ID;userID or everyone (default is everyone);ids/contents;separator;amount (max 50);reverse (yes/no, default is no)] +``` + +**Parameters:** + +* **`Channel ID`:** The ID of the channel to retrieve messages from. +* **`userID`:** (Optional) The ID of a specific user whose messages you want to retrieve. If you want to retrieve messages from all users, use `everyone` (this is the default if you omit this parameter). +* **`ids/contents`:** Specifies whether you want to retrieve the message IDs or the message contents. Use `ids` to get the IDs, and `contents` to get the message content. +* **`separator`:** The character(s) used to separate the retrieved message IDs or contents in the output. For example, using `/` would separate the results like: `message1/message2/message3`. +* **`amount`:** (Optional) The maximum number of messages to retrieve (maximum is 50). Defaults to a lower number, so setting this is recommended for predictable results. +* **`reverse`:** (Optional) Determines the order of the messages. `yes` reverses the order (oldest to newest), while `no` (default) returns them in the default order (newest to oldest). + +## Example + +This example demonstrates how to retrieve the IDs of the 2 most recent messages sent by the command invoker in the channel where the command was executed, separating them with a forward slash. + + + +!!exec $getChannelMessages[$channelID;$authorID;ids;/;2] + + +982807194485555300/982807196318457918 + + \ No newline at end of file diff --git a/content/docs/(functions)/Channel/getChannelSlowmode.mdx b/content/docs/(functions)/Channel/getChannelSlowmode.mdx new file mode 100644 index 00000000..dc837cfc --- /dev/null +++ b/content/docs/(functions)/Channel/getChannelSlowmode.mdx @@ -0,0 +1,38 @@ +--- +title: "$getChannelSlowmode" +--- + +Retrieves the slow mode duration (in seconds) of a specified channel. If no slow mode is active, it returns `0`. + +## Syntax + +```cc +$getChannelSlowmode or $getChannelSlowmode[channelID] +``` + +## Parameters + +* **`channelID` (Optional):** The ID of the channel to check. If omitted, the function defaults to the current channel where the command is executed. + +## Example Usage + +* **Check the slow mode of the current channel:** + + ```cc + $getChannelSlowmode + ``` + + **Returns:** `5` (if the current channel has a 5-second slow mode) or `0` (if no slow mode is active). + +* **Check the slow mode of a specific channel:** + + ```cc + $getChannelSlowmode[123456789012345678] + ``` + + **Returns:** `10` (if channel with ID `123456789012345678` has a 10-second slow mode) or `0` (if no slow mode is active). + +## Notes + +* The `channelID` must be a valid channel ID. +* Ensure your bot has the necessary permissions to view the channel. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/latestMessage.mdx b/content/docs/(functions)/Channel/latestMessage.mdx new file mode 100644 index 00000000..e6e4fb04 --- /dev/null +++ b/content/docs/(functions)/Channel/latestMessage.mdx @@ -0,0 +1,45 @@ +--- +title: "$latestMessage" +--- + +Retrieves the most recent message content or ID from a channel, utilizing the cache for efficiency. + +## Usage + +```cc +$latestMessage[Channel ID (defaults to current channel);User ID (defaults to all users);Return Message ID instead (yes/no, defaults to no)] +``` + +**Explanation:** + +* **Channel ID:** The ID of the channel to search within. If omitted, it defaults to the channel where the command is executed (`$channelID`). +* **User ID:** The ID of a specific user to filter messages by. If omitted, it includes messages from all users (`everyone`). +* **Return Message ID:** A boolean value (`yes` or `no`) that determines whether to return the message's ID instead of its content. Defaults to `no`, returning the message content. + +## Examples + +### Example 1: Return the Latest Message Content + +This example retrieves the content of the most recent message in the current channel. + + + +!!exec $latestMessage[$channelID] + + +Hello World + + + +### Example 2: Return the Latest Message ID + +This example retrieves the ID of the most recent message from any user in the current channel. + + + +!!exec $latestMessage[$channelID;everyone;yes] + + +1234567890 + + \ No newline at end of file diff --git a/content/docs/(functions)/Channel/mentionChannel.mdx b/content/docs/(functions)/Channel/mentionChannel.mdx new file mode 100644 index 00000000..1cc61abe --- /dev/null +++ b/content/docs/(functions)/Channel/mentionChannel.mdx @@ -0,0 +1,22 @@ +--- +title: "$mentionChannel" +--- + +mention a channel, threads by name or id + +## Usage + +```cc +$mentionChannel[Name/ID] +``` + +### Example: +```cc +$mentionChannel[chat] + +``` + +### Example: +```cc +$mentionChannel[1234567898765431] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Channel/meta.json b/content/docs/(functions)/Channel/meta.json new file mode 100644 index 00000000..00c4e99c --- /dev/null +++ b/content/docs/(functions)/Channel/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Channel Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Channel/modifyChannelPerms.mdx b/content/docs/(functions)/Channel/modifyChannelPerms.mdx new file mode 100644 index 00000000..5a39dfd5 --- /dev/null +++ b/content/docs/(functions)/Channel/modifyChannelPerms.mdx @@ -0,0 +1,58 @@ +--- +title: "$modifyChannelPerms" +--- + +Modifies channel permissions, including those for categories. This function allows you to grant, deny, or set permissions to neutral for specific roles or users within a channel. + +## Usage: + +`$modifyChannelPerms[channelID;+perm1;-perm2;/perm3;+perm4;...;roleID/userID]` + +**Explanation:** + +* **`channelID`:** The ID of the channel you want to modify permissions for. This can be a text channel, voice channel, or category channel. +* **`;` (Semicolon):** Separates permission modifications. +* **`+perm`:** Grants the specified permission. +* **`-perm`:** Denies the specified permission. +* **`/perm`:** Sets the specified permission to neutral (inherited from the category or server). +* **`roleID/userID`:** The ID of the role or user you're modifying permissions for. Must be at the end of a permission modification set. + +#### Example: + +`$modifyChannelPerms[$channelID;-sendmessages;$roleID[muted]]` + +This example restricts users with the role "muted" from sending messages in the channel specified by `$channelID`. + +**Breakdown of the Example:** + +* `$channelID`: Represents the ID of the target channel. +* `-sendmessages`: Denies the `sendmessages` permission. +* `$roleID[muted]`: Represents the ID of the role named "muted". + + + + +* Use `+` to **grant** a permission. +* Use `-` to **deny** a permission. +* Use `/` to set a permission to **neutral** (inherit from parent). + + + + + + +A comprehensive list of all available permissions can be found [here](/CodeReferences/ref.permissions_list). + + + + + + +* `$editChannel`: Can be used to modify other channel properties (name, topic, etc.). + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Channel/newTicket.mdx b/content/docs/(functions)/Channel/newTicket.mdx new file mode 100644 index 00000000..7753e1f0 --- /dev/null +++ b/content/docs/(functions)/Channel/newTicket.mdx @@ -0,0 +1,53 @@ +--- +title: "$newTicket" +--- + +Create a new support ticket. This function allows users to easily open tickets for assistance, which can be closed later using the `$closeTicket` function. + +## Usage +```cc +$newTicket[ticket name;ticket message (optional);categoryID (optional);return ticket ID (yes/no) (optional);error message (optional)] +``` + +**Parameters:** + +* `ticket name`: The name of the ticket channel. Consider using `$userTag` to personalize it (e.g., `$userTag-Ticket`). +* `ticket message (optional)`: A message to be sent in the newly created ticket channel. If left blank, no message will be sent. +* `categoryID (optional)`: The ID of the category to create the ticket under. If not specified, it will create the ticket in the server. You can find category ID by enabling developer mode under discord settings. +* `return ticket ID (yes/no) (optional)`: Specifies whether the function should return the ticket channel ID. Use `yes` to retrieve the ID for further processing, or `no` (or leave blank) to suppress it. +* `error message (optional)`: An error message to display if the ticket creation fails. This can help users understand why their ticket wasn't created. + +**Example:** + +```cc +!!exec $newTicket[$userTag-Ticket;Hello World!] +``` + +This command will: + +1. Create a new text channel named "[username]-Ticket" (where [username] is the user's Discord tag). +2. Send the message "Hello World!" in the newly created ticket channel. + +**Tips & Important Information:** + + + +Take advantage of pre-built ticket system! You can find and clone highly customizable button-based ticket systems directly from the [dashboard](https://ccommandbot.com/dashboard). These community commands simplify the process of setting up a robust ticket system. + + + + + +By default, everyone can view the newly created ticket channel. To restrict access and maintain privacy, adjust the permissions of the ticket category. Specifically, **deny** the `View Channel` permission for the `@everyone` role within the ticket category. + + + + + +Enhance your ticket messages by using embeds! Utilize the [Message Curl Format](/CodeReferences/ref.message_curl_format) to create rich, visually appealing messages within the ticket channel. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/removeContains.mdx b/content/docs/(functions)/Channel/removeContains.mdx new file mode 100644 index 00000000..f0dff8b7 --- /dev/null +++ b/content/docs/(functions)/Channel/removeContains.mdx @@ -0,0 +1,34 @@ +--- +title: "$removeContains" +--- + +This function allows you to delete messages within a specified channel that contain certain words. It's useful for moderation and removing unwanted content. + +## Syntax + +```cc +$removeContains[channelID;limit;word1;word2;...] +``` + +## Parameters + +* **`channelID`**: The ID of the channel where messages should be deleted. You can retrieve a channel's ID by enabling Developer Mode in Discord settings (Appearance -> Advanced) and right-clicking the channel. +* **`limit`**: The maximum number of messages to search through in the channel. A higher limit will search through more messages, but may take longer. +* **`word1;word2;...`**: A semicolon-separated list of words to look for within the messages. Any message containing *any* of these words will be deleted. Case sensitivity may vary depending on the bot implementation, so test accordingly. + +## Example + +Let's say you want to delete messages in channel `123456789012345678` containing either the word "spam" or the word "advertisement", and you want to check the last 100 messages. You would use: + +```cc +$removeContains[123456789012345678;100;spam;advertisement] +``` + +This command will search the last 100 messages in channel `123456789012345678` and delete any message containing either "spam" or "advertisement". + +## Important Considerations + +* **Permissions:** The bot must have the `Manage Messages` permission in the specified channel to delete messages. +* **Rate Limits:** Be mindful of Discord's rate limits when deleting messages. Deleting messages rapidly can cause the bot to be temporarily rate limited. Consider adding a small delay between deletions if you anticipate a large number of messages being removed. +* **Case Sensitivity:** The case sensitivity of the word matching may depend on the specific implementation of the bot. Test thoroughly to ensure the function behaves as expected. +* **Message Age:** Discord only allows bots to delete messages that are less than 14 days old. Messages older than this cannot be removed using this function. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/serverChannels.mdx b/content/docs/(functions)/Channel/serverChannels.mdx new file mode 100644 index 00000000..08f965c8 --- /dev/null +++ b/content/docs/(functions)/Channel/serverChannels.mdx @@ -0,0 +1,64 @@ +--- +title: "$serverChannels" +--- + +This function retrieves a list of all channels within the current server (guild). + +## Usage + +```cc +$serverChannels[info (optional, default: name); type (optional, default: all); separator (optional, default: ", ")] +``` + +**Parameters:** + +* **`info`**: (Optional) Specifies what information about each channel should be returned. Defaults to the channel's name. + * Possible values: + * `name`: Returns the channel's name. + * `id`: Returns the channel's ID. + +* **`type`**: (Optional) Filters the channels based on their type. Defaults to `all` (returns all channels). + * Possible values: + * `all`: Returns all channels (text, voice, category, etc.). + * `text`: Returns only text channels. + * `voice`: Returns only voice channels. + * `category`: Returns only category channels. + +* **`separator`**: (Optional) The string used to separate the channel information in the returned list. Defaults to ", ". + +## Example + +This example retrieves the names of all text channels in the server, separated by forward slashes. + + + +!!exec $serverChannels[name;text;/] + + +channel1/channel2/channel3/channel4 + + + + + +* The `info` parameter determines what information you get for each channel. +* The `type` parameter lets you filter the channels returned. + + + + + + +* **all**: Returns all channels. +* **text**: Returns only text channels. +* **voice**: Returns only voice channels. +* **category**: Returns only category channels. + + + + + + +* `$categoryChannels`: Get channels within a specific category. + + \ No newline at end of file diff --git a/content/docs/(functions)/Channel/setChannelTopic.mdx b/content/docs/(functions)/Channel/setChannelTopic.mdx new file mode 100644 index 00000000..dca9ab10 --- /dev/null +++ b/content/docs/(functions)/Channel/setChannelTopic.mdx @@ -0,0 +1,34 @@ +--- +title: "$setChannelTopic" +--- + +This command allows you to change the topic (also known as the channel description) of a text channel. + +## Usage + +```cc +$setChannelTopic[channelID;topic] +``` + +**Parameters:** + +* `channelID`: The ID of the channel you want to modify. You can use `$channelID` to refer to the current channel. +* `topic`: The new topic you want to set for the channel. This is a text string. + +## Example + +Let's say you want to set the topic of the current channel to "This channel is for memes only!". You would use the following command: + +```cc +$setChannelTopic[$channelID;This channel is for memes only!] +``` + +**Explanation:** + +* `$channelID` tells the bot to use the ID of the channel where the command is executed. +* `This channel is for memes only!` is the new topic that will be applied to the channel. + +**Important Notes:** + +* Make sure the bot has the necessary permissions to manage the channel. Specifically, it needs the "Manage Channels" permission. +* The maximum length of a channel topic is limited. Very long topics will be truncated. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/slowmode.mdx b/content/docs/(functions)/Channel/slowmode.mdx new file mode 100644 index 00000000..ea4ae6a8 --- /dev/null +++ b/content/docs/(functions)/Channel/slowmode.mdx @@ -0,0 +1,30 @@ +--- +title: "$slowmode" +--- + +This command allows you to set or remove the slowmode in a specified channel. Slowmode limits how frequently users can send messages in that channel. + +## How it Works + +The `$slowmode` command takes two arguments: + +1. **`channelID`**: The ID of the channel you want to modify. You can usually right-click a channel (with developer mode enabled in Discord settings) and select "Copy ID" to get the Channel ID. +2. **`time (like 10s, 1m,..)`**: The duration of the slowmode. This is specified as a number followed by a unit of time. Examples include `10s` (10 seconds), `1m` (1 minute), `5m` (5 minutes), `1h` (1 hour), etc. To *remove* the slowmode, set this value to `0`. + +## Usage Example + +```cc +$slowmode[123456789012345678;10s] +``` + +This example sets the slowmode in the channel with ID `123456789012345678` to 10 seconds. Users will only be able to send a message every 10 seconds in that channel. + +## Removing Slowmode + +To remove slowmode from a channel, use `0` as the time argument: + +```cc +$slowmode[123456789012345678;0] +``` + +This will disable the slowmode in the channel with ID `123456789012345678`. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/transcriptChannel.mdx b/content/docs/(functions)/Channel/transcriptChannel.mdx new file mode 100644 index 00000000..3891c045 --- /dev/null +++ b/content/docs/(functions)/Channel/transcriptChannel.mdx @@ -0,0 +1,44 @@ +--- +title: "$transcriptChannel" +--- + +This function generates an HTML file containing a transcript of the latest 100 messages from a specified channel and can optionally send the generated file to another channel. + +**Functionality:** Compiles the latest messages from a channel into an HTML file. + +## Usage + +```cc +$transcriptChannel[Channel ID;Send to Channel ID;Message (optional);file name (optional);return message id or undefined.if message could not be send(yes/no default=no)] +``` + +**Parameters:** + +* **`Channel ID`**: (Required) The ID of the channel from which to retrieve the messages. + +* **`Send to Channel ID`**: (Required) The ID of the channel where the generated HTML transcript file will be sent. + +* **`Message (optional)`**: (Optional) An optional message to send along with the transcript file. If left blank, no message will be sent. + +* **`file name (optional)`**: (Optional) The desired filename for the generated HTML transcript file (without the `.html` extension). If left blank, a default filename will be used. + +* **`return message id or undefined.if message could not be send(yes/no default=no)`**: (Optional) Determines whether the function should return the ID of the message containing the sent transcript file. Defaults to `no`. If set to `yes`, the function returns the message ID. If the message could not be sent, the function returns `undefined`. If set to `no`, nothing will be returned. + +### Example + +```cc +$transcriptChannel[123456789012345678;987654321098765432;Here is the channel transcript;my_transcript;yes] +``` + +This example will: + +1. Retrieve messages from channel `123456789012345678`. +2. Send an HTML transcript file to channel `987654321098765432` with the message "Here is the channel transcript". +3. Name the generated HTML file "my\_transcript.html". +4. Return the ID of the message sent to channel `987654321098765432`. + +### Notes + +* Ensure the bot has the necessary permissions (Read Messages, View Channel, Send Messages, Attach Files) in both the source channel (`Channel ID`) and the destination channel (`Send to Channel ID`). +* The "latest messages" are determined by the bot's message history caching. The number of messages retrieved may vary depending on server settings and message activity. +* The function returns `undefined` if the bot fails to send the message with the file (e.g., due to permission issues or file size limits). \ No newline at end of file diff --git a/content/docs/(functions)/Channel/useChannel.mdx b/content/docs/(functions)/Channel/useChannel.mdx new file mode 100644 index 00000000..8edf05d4 --- /dev/null +++ b/content/docs/(functions)/Channel/useChannel.mdx @@ -0,0 +1,37 @@ +--- +title: "$useChannel" +--- + +This function allows you to specify a different channel for subsequent actions within your command. It essentially redirects where the following functions will execute. + +## Usage +```cc +$useChannel[channelID] +``` + +* `channelID`: The ID of the channel you want to use. Make sure the bot has access to this channel. + +#### Example: + +This example demonstrates how to send "Bye!" to a specific channel ID (802179504147136552) while sending "Hi!" to the channel the command was triggered in. + +
+ + + +!!exec $sendMessage[Hi!] $useChannel[802179504147136552] $sendMessage[Bye!] /* Bye! will be sent in the channel ID provided. */ + + +Hi! + + + +**Explanation:** + +1. `$sendMessage[Hi!]`: Sends the message "Hi!" to the channel where the command was executed. +2. `$useChannel[802179504147136552]`: Sets the channel to the one with the ID 802179504147136552. +3. `$sendMessage[Bye!]`: Sends the message "Bye!" to the channel specified by `$useChannel` (channel ID 802179504147136552). + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Channel/vcAfter.mdx b/content/docs/(functions)/Channel/vcAfter.mdx new file mode 100644 index 00000000..3a677954 --- /dev/null +++ b/content/docs/(functions)/Channel/vcAfter.mdx @@ -0,0 +1,15 @@ +--- +title: "$vcAfter" +--- + +Returns the ID of the voice channel a user **joined** or **switched to**. This function is triggered **after** a user changes voice channels or joins a voice channel for the first time. + +## Functionality + +This function is particularly useful in events that track voice channel activity. It provides the ID of the *new* voice channel the user is in. + +## Usage + +```markdown +$vcAfter +``` \ No newline at end of file diff --git a/content/docs/(functions)/Channel/vcBefore.mdx b/content/docs/(functions)/Channel/vcBefore.mdx new file mode 100644 index 00000000..5e039d97 --- /dev/null +++ b/content/docs/(functions)/Channel/vcBefore.mdx @@ -0,0 +1,31 @@ +--- +title: "$vcBefore" +--- + +The `$vcBefore` function returns the ID of the voice channel a user was previously in *before* a voice channel event occurred. This is particularly useful for voice channel join and leave triggers. + +**In simpler terms:** Imagine someone moves from Voice Channel A to Voice Channel B. `$vcBefore` would return the ID of Voice Channel A. If they disconnect entirely from a voice channel, `$vcBefore` would return the ID of the voice channel they left. + +## Functionality + +This function retrieves the voice channel ID associated with a "before" state in voice channel activities, such as: + +* **Voice channel switching:** When a user moves from one voice channel to another. +* **Leaving a voice channel:** When a user disconnects from a voice channel. + +## Usage + +```cc +$vcBefore +``` + +This function doesn't require any arguments. When used within the context of a voice channel join or leave event, it will automatically retrieve the appropriate voice channel ID. + +**Example Scenario:** + +Let's say you have a bot that announces when a user leaves a voice channel. You could use `$vcBefore` to get the ID of the channel they left and then retrieve the channel name to display in the announcement. + +**Important Notes:** + +* This function only works within the context of events triggered by voice channel changes (join, leave, switch). Using it outside of these events will likely result in an empty. +* The returned value is the voice channel's ID, a numerical representation of the channel. You might need to use other functions to convert this ID into a human-readable name or other information. \ No newline at end of file diff --git a/content/docs/(functions)/Channel/voiceChannelID.mdx b/content/docs/(functions)/Channel/voiceChannelID.mdx new file mode 100644 index 00000000..489ec386 --- /dev/null +++ b/content/docs/(functions)/Channel/voiceChannelID.mdx @@ -0,0 +1,30 @@ +--- +title: "$voiceChannelID" +--- + + + + + +**This function is deprecated and should no longer be used!** + +Please use `$vcBefore` and `$vcAfter` instead. These functions provide more control and flexibility. + + + +Returns the ID of the voice channel a user joined or left in a voice trigger event. If a user switches channels, this function will return the ID of the *new* channel they joined. + +## Usage + +```cc +$voiceChannelID +``` + +## Important Considerations + + + +* This function **will not work** in the `Channel Creation/Deletion` trigger. Use `$eventChannelID` for those events. +* `$voiceChannelID` is specifically designed for the `Voice Join/Leave` trigger. Using it in other triggers will not produce the desired result. For other triggers, use the more general `$channelID`. + + \ No newline at end of file diff --git a/content/docs/(functions)/Cooldown/channelCooldown.mdx b/content/docs/(functions)/Cooldown/channelCooldown.mdx new file mode 100644 index 00000000..09f79512 --- /dev/null +++ b/content/docs/(functions)/Cooldown/channelCooldown.mdx @@ -0,0 +1,68 @@ +--- +title: "$channelCooldown" +--- + +Sets a cooldown for a command in channel. + +## Usage + +```cc +$channelCooldown[time;error message] +``` +1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` +2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. + +## Example + +#### Using $channelCooldown + +As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution + + + +!!exec $channelCooldown[5m;You're on cooldown!]
+You're not on cooldown! +
+ +You're not on cooldown! + + +!!exec $channelCooldown[5m;You're on cooldown! Still %mins%m remaining!]
+You're not on cooldown! +
+ +You're on cooldown! Still 4m remaining! + +
+ +## Placeholders + +Available placeholders you can use in error message + +| Placeholder | Description | Output Example | +| ------------- | --------------------------------------------------------- | ----------------------------------------- | +| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | +| `%days%` | The number of days remaining | `1` | +| `%hrs%` | The number of hours remaining | `2` | +| `%mins%` | The number of minutes remaining | `3` | +| `%secs%` | The number of seconds remaining | `4` | +| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | +| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | + + + +Place this function above the code you want to use cooldown for. All code before this function will be executed. + + + + +You can send embeds, select menus and buttons by using the [message curl format](/CodeReferences/ref.message_curl_format). + + + + +**Related Functions:** `$cooldown` `$serverCooldown` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Cooldown/clearCoolDown.mdx b/content/docs/(functions)/Cooldown/clearCoolDown.mdx new file mode 100644 index 00000000..3d8dfe65 --- /dev/null +++ b/content/docs/(functions)/Cooldown/clearCoolDown.mdx @@ -0,0 +1,46 @@ +--- +title: "$clearCooldown" +--- + +Clears a cooldown set by cooldown function. + +**Type:** Clears or resets a pre-existing cooldown. + +## Usage + +```cc +$clearCooldown[type;id;token] +``` +1. **type** - (Optional) default value: `user`. Can be `user`, `channel` or `server`. The type of cooldown to clear. +2. **id** - (Optional) default value: `$authorID` if type is user. The ID of a user or channel to clear cooldown from. +3. **token** - (Optional) default value is the current command token, changing it means clearing another command cooldown +## Example + +#### Remove cooldown from a user + +How to remove cooldown from a user + + + +!!exec $cooldown[5m]
+$clearCooldown
+No cooldown +
+ +No cooldown + + +!!exec $cooldown[5m]
+$clearCooldown
+No cooldown 2nd try +
+ +No cooldown 2nd try + +
+ +**Related Functions:** `$getCooldownTime` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Cooldown/cooldown.mdx b/content/docs/(functions)/Cooldown/cooldown.mdx new file mode 100644 index 00000000..84d87546 --- /dev/null +++ b/content/docs/(functions)/Cooldown/cooldown.mdx @@ -0,0 +1,69 @@ +--- +title: "$cooldown" +--- + +Sets a cooldown in a command for user. + +## Usage + +```cc +$cooldown[time;error message;userID] +``` +1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` +2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. +3. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to set a cooldown to. + +## Example + +#### Using $cooldown + +As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution + + + +!!exec $cooldown[5m;You're on cooldown!]
+You're not on cooldown! +
+ +You're not on cooldown! + + +!!exec $cooldown[5m;You're on cooldown! Still %mins%m remaining!]
+You're not on cooldown! +
+ +You're on cooldown! Still 4m remaining! + +
+ +## Placeholders + +Available placeholders you can use in error message + +| Placeholder | Description | Output Example | +| ------------- | --------------------------------------------------------- | ----------------------------------------- | +| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | +| `%days%` | The number of days remaining | `1` | +| `%hrs%` | The number of hours remaining | `2` | +| `%mins%` | The number of minutes remaining | `3` | +| `%secs%` | The number of seconds remaining | `4` | +| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | +| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | + + + +Place this function above the code you want to use cooldown for. All code before this function will be executed. + + + + +You can send embeds, select menus and buttons by using the [message curl format](/CodeReferences/ref.message_curl_format). + + + + +**Related Functions:** `$channelCooldown` `$serverCooldown` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Cooldown/getCooldownTime.mdx b/content/docs/(functions)/Cooldown/getCooldownTime.mdx new file mode 100644 index 00000000..5263172f --- /dev/null +++ b/content/docs/(functions)/Cooldown/getCooldownTime.mdx @@ -0,0 +1,42 @@ +--- +title: "$getCooldownTime" +--- + +Returns remaining time of a cooldown in miliseconds. + +## Usage + +```cc +$getCooldownTime[time;type;id;token] +``` +1. **time** - (Optional) default value: (last cooldown set). The time your cooldown was set to. +2. **type** - (Optional) default value: `user`. Can be `user`, `channel` or `server`. The type of cooldown to return remaining time of. +3. **id** - (Optional) default value: `$authorID` if type is user. The ID of a user or a channel to check cooldown from. +4. **token** - (Optional) default value is the current command. It specify which command it should get the cooldown of +## Example + +#### Using $getCooldownTime + +How to use $getCooldownTime + + + +!!exec $channelCooldown[5m]
+$getCooldownTime[5m;channel;$channelID] +
+ +299937 + +
+ + + +The `time` argument in must exactly match the time in the original cooldown function used. Mismatched durations will result in incorrect cooldown checks. + + + +**Related Functions:** `$clearCooldown` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Cooldown/meta.json b/content/docs/(functions)/Cooldown/meta.json new file mode 100644 index 00000000..922a2aee --- /dev/null +++ b/content/docs/(functions)/Cooldown/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Cooldown functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Cooldown/serverCooldown.mdx b/content/docs/(functions)/Cooldown/serverCooldown.mdx new file mode 100644 index 00000000..5a732d35 --- /dev/null +++ b/content/docs/(functions)/Cooldown/serverCooldown.mdx @@ -0,0 +1,68 @@ +--- +title: "$serverCooldown" +--- + +Sets a cooldown in a command for the whole server. + +## Usage + +```cc +$serverCooldown[time;error message] +``` +1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` +2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. + +## Example + +#### Using $serverCooldown + +As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution + + + +!!exec $serverCooldown[5m;You're on cooldown!]
+You're not on cooldown! +
+ +You're not on cooldown! + + +!!exec $serverCooldown[5m;You're on cooldown! Still %mins%m remaining!]
+You're not on cooldown! +
+ +You're on cooldown! Still 4m remaining! + +
+ +## Placeholders + +Available placeholders you can use in error message + +| Placeholder | Description | Output Example | +| ------------- | --------------------------------------------------------- | ----------------------------------------- | +| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | +| `%days%` | The number of days remaining | `1` | +| `%hrs%` | The number of hours remaining | `2` | +| `%mins%` | The number of minutes remaining | `3` | +| `%secs%` | The number of seconds remaining | `4` | +| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | +| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | + + + +Place this function above the code you want to use cooldown for. All code before this function will be executed. + + + + +You can send embeds, select menus and buttons by using the [message curl format](/CodeReferences/ref.message_curl_format). + + + + +**Related Functions:** `$serverCooldown` `$cooldown` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Date/creationDate.mdx b/content/docs/(functions)/Date/creationDate.mdx new file mode 100644 index 00000000..ee7ecdc5 --- /dev/null +++ b/content/docs/(functions)/Date/creationDate.mdx @@ -0,0 +1,37 @@ +--- +title: "$creationDate" +--- + +Retrieves the creation date of a Discord entity (channel, guild, emoji, user, or role) based on its ID. + +## Usage +```cc +$creationDate[entityID;format (optional)] +``` + +**Arguments:** + +* `entityID`: The ID of the Discord entity you want to retrieve the creation date for. This can be a channel ID, guild ID, emoji ID, user ID, or role ID. +* `format` (Optional): Specifies the desired format for the output. If omitted, the default format will be used. Possible values are: + * `date`: Returns the date only. + * `ms`: Returns the creation date in milliseconds since the Unix epoch. + +**Example:** + + + +!!exec $creationDate[725721249652670555;date] + + +Thursday, June 25, 2020 02:37 PM + + + + + +Date functions default to the UTC timezone. To change this, see the [Timezone Configuration](/Date/timezone) guide. + + + +**Function Difficulty:** + diff --git a/content/docs/(functions)/Date/dateStamp.mdx b/content/docs/(functions)/Date/dateStamp.mdx new file mode 100644 index 00000000..7dd7eae8 --- /dev/null +++ b/content/docs/(functions)/Date/dateStamp.mdx @@ -0,0 +1,34 @@ +--- +title: "$dateStamp" +--- + +Returns the current Unix timestamp (the number of milliseconds that have elapsed since January 1, 1970 UTC). + +## Usage +```cc +$dateStamp[Return in Seconds (Yes/No)] +``` + +This function allows you to retrieve the current timestamp in either milliseconds or seconds. + +* **`Return in Seconds (Yes/No)`:** Specify whether you want the timestamp returned in seconds (enter `Yes`) or milliseconds (enter `No` or leave blank). + +
+ +**Example:** + + + +!!exec $dateStamp, $dateStamp[yes] + + +1630841854895, 1630841854 + + + +In this example, the first `$dateStamp` call returns the timestamp in milliseconds, while the second `$dateStamp[yes]` call returns the timestamp in seconds. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/dateToTime.mdx b/content/docs/(functions)/Date/dateToTime.mdx new file mode 100644 index 00000000..c87fec81 --- /dev/null +++ b/content/docs/(functions)/Date/dateToTime.mdx @@ -0,0 +1,39 @@ +--- +title: "$dateToTime" +--- + +Converts a human-readable date string to milliseconds since the Unix epoch (January 1, 1970, 00:00:00 UTC). You can optionally use `$timezone` to specify a custom timezone for accurate conversion. + +## Usage + +```cc +$dateToTime[Date] +``` + +**Parameters:** + +* `Date`: The date string you want to convert. The date format should be in a format that JavaScript can parse, such as `MM-DD-YYYY`, `YYYY-MM-DD`, or `Month DD, YYYY`. It's generally recommended to use `YYYY-MM-DD` for clarity. + +## Example + +This example converts the date `12-05-2000` to its corresponding timestamp in milliseconds. + + + +!!exec $dateToTime[12-05-2000] + + + +975974400000 + + + +**Explanation:** + +The command `!!exec $dateToTime[12-05-2000]` converts the date December 5th, 2000, to its equivalent timestamp: 975974400000 milliseconds since the Unix epoch. This value can then be used for further date and time calculations. + +**Important Notes:** + +* The output timestamp is in milliseconds. +* Be mindful of the date format used, as JavaScript's date parsing can be ambiguous. Using `YYYY-MM-DD` is recommended for consistent results. +* If no timezone is explicitly set using `$timezone`, the script will use the default timezone of the environment where it's running. This could lead to unexpected results if the environment's timezone differs from your intended timezone. Consider using `$timezone` to ensure consistent and accurate conversions. \ No newline at end of file diff --git a/content/docs/(functions)/Date/day.mdx b/content/docs/(functions)/Date/day.mdx new file mode 100644 index 00000000..26cd42a9 --- /dev/null +++ b/content/docs/(functions)/Date/day.mdx @@ -0,0 +1,37 @@ +--- +title: "$day" +--- + +Returns the current date. Optionally, you can also retrieve the day of the week. + +## Usage +```cc +$day[yes/no (optional)] +``` + +* **`$day`**: Returns the current date (day of the month). +* **`$day[yes]`**: Returns the current date (day of the month) followed by the day of the week. + +**Example:** + +
+ + + +!!exec $day $day[yes] + + +25 Saturday + + + + + +Date functions default to the UTC timezone. You can customize the timezone used by your bot. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/formatDate.mdx b/content/docs/(functions)/Date/formatDate.mdx new file mode 100644 index 00000000..7d9988f0 --- /dev/null +++ b/content/docs/(functions)/Date/formatDate.mdx @@ -0,0 +1,64 @@ +--- +title: "$formatDate" +--- + +Formats a date provided as milliseconds, a string, or an ISO string into a specified format. You can find a detailed explanation of the formatting syntax [here](https://momentjs.com/docs/#/parsing/string-format/). + +## Usage +```cc +$formatDate[date;format] +``` + +* **date:** The date to format. This can be: + * Milliseconds (e.g., `1678886400000`) + * A date string (e.g., `1/1/2023`) + * An ISO string (e.g., `2023-03-15T12:00:00Z`) + * Anything that JavaScript's `Date` object can understand. +* **format:** (Optional) The desired output format. If omitted, the default format is used (`Sunday, 14 March 2021`). + +**Example:** + +
+ + + +!!exec $formatDate[$dateStamp] +$formatDate[$dateStamp;LLLL] +$formatDate[$dateStamp;dddd at hour HH] + + +Sunday, March 15 2020 +March 15 2020 1:00 PM +Sunday at hour 10 + + + +#### Date Input Options: + +* `datestamp` - Example: `1615578797890` (Milliseconds since the Unix epoch) +* `ms` - Example: `315569267878790ms` +* `string date` - Example: `1/17/2021, 9:09:19 PM` +* `String in ISO` - Example: `2000-3-12T14:48:00.000Z` + +#### Format Options: + +Here are some common formatting options: + +* `Blank` (default) - Example: `Sunday, 14 March 2021` +* `LT` - Time - Example: `6:01 AM` +* `LTS` - Time with seconds - Example: `1:58:3 AM` +* `L` - Date - Example: `1/10/2021` +* `LLL` - Specified Date - Example: `March 12 2020 4:02 AM` +* `LLLL` - Specified Date with Day - Example: `Friday, March 12 2021 4:02 AM` +* `dddd` - Day - Example: `Friday` +* `HH` - Hour (24-hour format) - Example: `15` + + + +Date functions use the default UTC timezone. You can change this. [Learn More](/Date/timezone) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Date/hour.mdx b/content/docs/(functions)/Date/hour.mdx new file mode 100644 index 00000000..9d34a952 --- /dev/null +++ b/content/docs/(functions)/Date/hour.mdx @@ -0,0 +1,36 @@ +--- +title: "$hour" +--- + +This command returns the current hour (in 24-hour format). + +## Usage +```cc +$hour +``` + +**Example:** + +This example shows how to use the `$hour` command in a custom command. + +
+ + + +!!exec $hour + + +19 + + + + + +Date functions use the UTC timezone by default. You can change the timezone for your bot. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/humanizeMS.mdx b/content/docs/(functions)/Date/humanizeMS.mdx new file mode 100644 index 00000000..79691ef8 --- /dev/null +++ b/content/docs/(functions)/Date/humanizeMS.mdx @@ -0,0 +1,62 @@ +--- +title: "$humanizeMS" +--- + +Converts milliseconds into a human-readable duration string. This function is useful for displaying elapsed time or time remaining in a user-friendly format. + +## Usage +```cc +$humanizeMS[milliseconds; limit (optional); separator (optional)] +``` + +* **`milliseconds`**: The number of milliseconds to convert. This is a required argument. +* **`limit` (optional)**: The maximum number of units to display (e.g., if the limit is 2, it might show "2 years, 3 months" and omit days, hours, etc.). Defaults to showing all units if not specified. Must be a number. +* **`separator` (optional)**: The separator to use between the units (e.g., ", ", " and ", etc.). Defaults to ", " (comma and space) if not specified. + +**Example:** + +```cc +!!exec $humanizeMS[$timeStamp;4;,] +``` + +``` +52 years,5 months,26 days,and 10 hours +``` + +**Explanation:** + +In this example: + +* `$timeStamp` (assumed to be a pre-existing variable) holds the number of milliseconds representing a specific point in time. +* `4` is the limit; only the top 4 units (years, months, days, and hours) will be displayed. +* `,` is used as the separator. + +**Another Example (without limit or separator):** + +```cc +!!exec $humanizeMS[86400000] +``` + +``` +1 day +``` + +**Another Example (with a different separator):** + +```cc +!!exec $humanizeMS[31536000000;2; and ] +``` + +``` +1 year and 0 months +``` + + + +Date functions by default use the UTC timezone, but you can change it. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Date/memberJoinedCode.mdx b/content/docs/(functions)/Date/memberJoinedCode.mdx new file mode 100644 index 00000000..23f523ef --- /dev/null +++ b/content/docs/(functions)/Date/memberJoinedCode.mdx @@ -0,0 +1,29 @@ +--- +title: "$memberJoinedCode" +--- + +retrieve the invite code, which the user join from + +## Usage + +```cc +$memberJoinedCode[User ID;Info Type (default code)] +``` + +### Info Type: + +### Accepted ones are: +* `code`: return the invite code if exists, like Zbhzxf +* `code_url`: return the invite url if exists, like `https://discord.gg/Zbhzxf` +* `type`: return the invite type, one of these values (bot-invite, integration, discovery, student-hub, invite-link, invite-link-custom, manual-verification, unknown) +* `inviter`: return the inviter id if exists + +### Example: + + +!!exec You were invited by $memberJoinedCode[$userID;inviter]

+
+ +You were invited by 123456789987654 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Date/memberJoinedDate.mdx b/content/docs/(functions)/Date/memberJoinedDate.mdx new file mode 100644 index 00000000..578722da --- /dev/null +++ b/content/docs/(functions)/Date/memberJoinedDate.mdx @@ -0,0 +1,48 @@ +--- +title: "$memberJoinedDate" +--- + +Retrieves the date and time a member joined the server. You can specify a user ID or use it without any arguments to get the join date of the command executor. + +## Usage +```cc +$memberJoinedDate[userID;format(optional)] or $memberJoinedDate +``` + +* `userID`: (Optional) The ID of the member you want to retrieve the join date for. If omitted, it will use the command executor's join date. +* `format`: (Optional) Specifies whether to return the date or time. Can be either `date` or `time`. If omitted, it returns the full date and time. + +**Examples:** + +
+ + + + !!exec $memberJoinedDate[725721249652670555;date] + + + Sat Oct 31 2020 + + + +
+ + + + !!exec $memberJoinedDate[725721249652670555] + + + Sat Oct 31 2020 10:55:30 GMT+0000 (Coordinated Universal Time) + + + + + +Date functions default to UTC timezone. You can customize the timezone by following the instructions [here](/Date/timezone). + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/meta.json b/content/docs/(functions)/Date/meta.json new file mode 100644 index 00000000..43b722d6 --- /dev/null +++ b/content/docs/(functions)/Date/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Date Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Date/minute.mdx b/content/docs/(functions)/Date/minute.mdx new file mode 100644 index 00000000..6e308204 --- /dev/null +++ b/content/docs/(functions)/Date/minute.mdx @@ -0,0 +1,35 @@ +--- +title: "$minute" +--- + +Returns the current minute (0-59). + +## Usage: + +```cc +$minute +``` + +**Example:** + +This example demonstrates how to use the `$minute` function to display the current minute. + + + +!!exec $minute + + +23 + + + + + +By default, date and time functions use the UTC timezone. You can change the timezone used. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/month.mdx b/content/docs/(functions)/Date/month.mdx new file mode 100644 index 00000000..171899ff --- /dev/null +++ b/content/docs/(functions)/Date/month.mdx @@ -0,0 +1,41 @@ +--- +title: "$month" +--- + +Returns the current month's number or name. + +## Usage +```cc +$month[return name (yes/no)] +``` + +This function allows you to retrieve the current month in either its numerical representation (1-12) or its full name (e.g., January, February). + +* If you use `$month` without any parameters, it will return the month's number. +* If you use `$month[yes]`, it will return the month's name. Any value other than `yes` or no parameter will return the month's number. + +**Example:** + + + + !!exec $month, $month[yes] + + + 11, November + + + +**Explanation:** + +* The first `$month` returns the numerical representation of the current month (in this case, 11 for November). +* The second `$month[yes]` returns the name of the current month (November). + + + +Date functions default to using the UTC timezone. You can change the timezone used by the bot. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Date/parseDate.mdx b/content/docs/(functions)/Date/parseDate.mdx new file mode 100644 index 00000000..9a0f2ad9 --- /dev/null +++ b/content/docs/(functions)/Date/parseDate.mdx @@ -0,0 +1,39 @@ +--- +title: "$parseDate" +--- + +Converts milliseconds into a human-readable date or time format. + +## Usage +```cc +$parseDate[milliseconds; format] +``` + +**Arguments:** + +* `milliseconds`: The number of milliseconds to convert. +* `format`: Specifies the desired output format. Use `date` to get a formatted date or `time` to get a formatted time duration. + +
+ +**Example:** + +This example demonstrates converting 1000 milliseconds to a time duration. + + + +!!exec $parseDate[1000;time] + + +1 second + + + +**Explanation:** + +The command `$parseDate[1000;time]` converts 1000 milliseconds to a time format, resulting in the output "1 second". + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/parseTime.mdx b/content/docs/(functions)/Date/parseTime.mdx new file mode 100644 index 00000000..52d8376a --- /dev/null +++ b/content/docs/(functions)/Date/parseTime.mdx @@ -0,0 +1,73 @@ +--- +title: "$parseTime" +--- + +Convert human-readable time strings into a duration. This function accepts a single duration or multiple durations combined into one expression, and can optionally return the result in a different unit. + +## Usage + +```cc +$parseTime[time;unit?] +``` + +**Arguments:** + +* `time`: A time duration to convert. Supported units include: + + * `ms` — milliseconds + * `s` — seconds + * `m` — minutes + * `h` — hours + * `d` — days + * `w` — weeks + * `M` — months (30 days) + * `y` — years (365 days) + +* `unit` *(optional)*: The unit to return. Supported values are `ms`, `s`, `m`, `h`, `d`, `w`, `M`, `y`, or their full names (such as `seconds`, `hours`, and `days`). Defaults to `ms`. + +Multiple durations can be combined by separating them with spaces. As a convenience, compact expressions without spaces are also supported. + +## Examples + + + +!!exec $parseTime[1m] + + +60000 + + + + + +!!exec $parseTime[1h 30m] + + +5400000 + + + + + +!!exec $parseTime[1h30m] + + +5400000 + + + + + +!!exec $parseTime[1h30m;m] + + +90 + + + +**Explanation:** + +* `$parseTime[1m]` converts 1 minute into `60000` milliseconds. +* `$parseTime[1h 30m]` converts 1 hour and 30 minutes into `5400000` milliseconds. +* `$parseTime[1h30m]` is interpreted the same way as `1h 30m` for convenience. +* `$parseTime[1h30m;m]` returns the result in minutes instead of milliseconds. diff --git a/content/docs/(functions)/Date/second.mdx b/content/docs/(functions)/Date/second.mdx new file mode 100644 index 00000000..89690531 --- /dev/null +++ b/content/docs/(functions)/Date/second.mdx @@ -0,0 +1,35 @@ +--- +title: "$second" +--- + +Returns the current second (0-59). + +## Usage +```cc +$second +``` + +This function is simple! It just retrieves the current second of the minute. + +**Example:** + +
+ + + +!!exec $second + + +56 + + + + + +Date functions default to using UTC timezone. You can change this if needed. [Learn More about Timezones](/Date/timezone) + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Date/timeStamp.mdx b/content/docs/(functions)/Date/timeStamp.mdx new file mode 100644 index 00000000..0baed9f4 --- /dev/null +++ b/content/docs/(functions)/Date/timeStamp.mdx @@ -0,0 +1,41 @@ +--- +title: "$timeStamp" +--- + +Returns the current Unix timestamp (the number of milliseconds that have elapsed since January 1, 1970, 00:00:00 UTC). + +**Think of it as:** Getting a numerical representation of the current date and time. + +## Usage +```cc +$timeStamp[Return in Seconds (Yes/No)] +``` + +* **`Return in Seconds (Yes/No)`**: This is an optional argument. + * If set to `Yes`, the function will return the timestamp in seconds instead of milliseconds. + * If set to `No` (or left blank), the function will return the timestamp in milliseconds. + +**Alias:** This function is an alias for `$dateStamp`. You can use either one interchangeably. + +
+ +**Example:** + + + +!!exec $timeStamp, $timestamp[yes] + + +1630841854895, 1630841854 + + + +**Explanation of the example:** + +* The first value `1630841854895` is the current time in milliseconds. +* The second value `1630841854` is the current time in seconds because we specified `yes` in the function call. + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Date/timeToDate.mdx b/content/docs/(functions)/Date/timeToDate.mdx new file mode 100644 index 00000000..3d76cc3c --- /dev/null +++ b/content/docs/(functions)/Date/timeToDate.mdx @@ -0,0 +1,35 @@ +--- +title: "$timeToDate" +--- + +Convert a Unix timestamp (milliseconds since January 1, 1970 UTC) into a formatted date string. This function respects the timezone configured via the `$timeZone` function. + +## Usage + +```cc +$timeToDate[Timestamp;Format (optional)] +``` + +**Parameters:** + +* **Timestamp:** The Unix timestamp in milliseconds you want to convert. +* **Format (optional):** A string defining the desired date and time format. If omitted, a default format will be applied. + +### Example: + +This example converts the current timestamp (obtained using `$timeStamp`) to a `YYYY-MM-DD` format. + + + +!!exec $timeToDate[$timeStamp;%y%-%m%-%d%] + + +2022-03-12 + + + + + +For a comprehensive list of accepted time format specifiers, refer to [this reference](/CodeReferences/ref.time_format). These specifiers allow you to customize the output to display the date and time in various formats. + + \ No newline at end of file diff --git a/content/docs/(functions)/Date/timezone.mdx b/content/docs/(functions)/Date/timezone.mdx new file mode 100644 index 00000000..4ff26496 --- /dev/null +++ b/content/docs/(functions)/Date/timezone.mdx @@ -0,0 +1,48 @@ +--- +title: "$timezone" +--- + +This function sets the timezone used by subsequent date and time functions within your command. Think of it as changing the "local time" for your bot's calculations. + +**Important:** This function only affects date and time calculations *after* it's called within the command's logic. + +To find a valid timezone name, refer to the comprehensive list on [Wikipedia](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Use the values from the "TZ database name" column. + +## Usage +```cc +$timezone[Region/City] +``` + +Replace `Region/City` with the desired timezone. For example, `Europe/Zurich` or `America/Los_Angeles`. + +### Accepted Zones: +Standard Zones like Africa/Cairo [(list here)](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)\ +Or you can use `UTC+hh:mm` or `UTC-hh:mm` to specify a certain offset like `UTC+03:00`. + + +### Example:** + +This example demonstrates how `$timezone` changes the output of the `$hour` function. + + + +!!exec +UTC $hour +after Change $timezone[Europe/Zurich] +Europe/Zurich $hour + + +UTC 10 +after Change Europe/Zurich 12 + + + + +In this example: + +* First, `$hour` is called without a specified timezone, so it returns the hour in UTC (Coordinated Universal Time). +* Then, `$timezone[Europe/Zurich]` sets the timezone to Zurich. +* Finally, `$hour` is called again, now returning the hour in the Europe/Zurich timezone, which is UTC+2 (or UTC+1 during standard time). + +**Function difficulty:** + diff --git a/content/docs/(functions)/Date/upvoteTime.mdx b/content/docs/(functions)/Date/upvoteTime.mdx new file mode 100644 index 00000000..179a0fec --- /dev/null +++ b/content/docs/(functions)/Date/upvoteTime.mdx @@ -0,0 +1,15 @@ +--- +title: "$upvoteTime" +--- + +Returns the time when the current upvote was received. + +## Usage + +```cc +$upvoteTime +``` + +This function is only available in the **On Upvote** trigger. + +The returned value is a Unix timestamp in milliseconds. diff --git a/content/docs/(functions)/Date/year.mdx b/content/docs/(functions)/Date/year.mdx new file mode 100644 index 00000000..f3925fb7 --- /dev/null +++ b/content/docs/(functions)/Date/year.mdx @@ -0,0 +1,37 @@ +--- +title: "$year" +--- + +Get the current year. + +This command returns the current year based on the configured timezone (default is UTC). + +## Usage: + +```cc +$year +``` + +**Example:** + +Here's how to use the `$year` command in a Discord message: + + + +!!exec $year + + +2021 + + + + + +Date functions default to the UTC timezone. You can customize the timezone used by your commands. [Learn More](/Date/timezone) + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Events/eventCreate.mdx b/content/docs/(functions)/Events/eventCreate.mdx new file mode 100644 index 00000000..99cdc5b5 --- /dev/null +++ b/content/docs/(functions)/Events/eventCreate.mdx @@ -0,0 +1,72 @@ +--- +title: "$eventCreate" +--- + +Creates a scheduled event on your server. + +## Usage + +The `$eventCreate` function allows you to schedule events with various types, including voice, stage, and external events. Here's how to use it: + +```cc +$eventCreate[ + {name=Your event name} + {type=Your event type i.e. voice, stage, or external} + {start=Start Timestamp} + {end=End Timestamp} + {desc=The event description (optional)} + {channel=The event channel ID (required for voice/stage events)} + {location=Your event location (required for external events)} + {cover=Event Image URL (optional)} + {return_id=Whether to return the created event ID (yes/no, default: no)} + {reason=Creation reason for audit log (optional)}] +``` + +**Explanation of Parameters:** + +* **`name`**: The name of the event. Required. +* **`type`**: The type of event. Must be one of: `voice`, `stage`, or `external`. Required. +* **`start`**: The start time of the event, expressed as a Unix timestamp (in seconds). You can use `$timestamp` and time calculations to set this. Required. +* **`end`**: The end time of the event, expressed as a Unix timestamp (in seconds). You can use `$timestamp` and time calculations to set this. Required. +* **`desc`**: A description of the event. Optional. +* **`channel`**: The ID of the voice or stage channel where the event will take place. Required if `type` is `voice` or `stage`. +* **`location`**: The location of the event. Required if `type` is `external`. +* **`cover`**: A URL to an image to use as the event cover. Optional. Must be a valid URL. +* **`return_id`**: If set to `yes`, the function will return the ID of the created event. Defaults to `no` if omitted. +* **`reason`**: A reason for creating the event. This will appear in the audit log. Optional. + +## Event Types + +The `{type=...}` parameter accepts the following values: + +* `voice`: A scheduled event within a voice channel. +* `stage`: A scheduled event within a stage channel. +* `external`: An external event with a specified location. + +## Voice and Stage Events + +When creating `voice` or `stage` events, ensure you specify: + +* `{type=voice}` or `{type=stage}` +* `{channel=Voice/Stage Channel ID}` (Replace `Voice/Stage Channel ID` with the actual channel ID) + +## External Events + +When creating `external` events, ensure you specify: + +* `{type=external}` +* `{location=Your event location}` (Replace `Your event location` with the actual location) + +### Example + +This example creates a voice channel event called "Anime Watch!" in the channel "AnimeWatchVC", starting in 10 minutes and lasting for 1 day. + +```cc +$eventCreate[ + {name=Anime Watch!} + {start=$math[$timestamp+$parseTime[10m]]} + {end=$math[$timestamp+$parseTime[1d]]} + {type=voice} + {channel=AnimeWatchVC} + {desc=Today we gonna watch anime together!}] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Events/eventDelete.mdx b/content/docs/(functions)/Events/eventDelete.mdx new file mode 100644 index 00000000..b90ff6ee --- /dev/null +++ b/content/docs/(functions)/Events/eventDelete.mdx @@ -0,0 +1,33 @@ +--- +title: "$eventDelete" +--- + +Deletes an existing scheduled event. + +## Usage + +```cc +$eventDelete[event ID] +``` + +## Description + +The `$eventDelete` function deletes a scheduled event using its unique event ID. This is useful for removing events that are no longer needed or were created in error. + +**Parameters:** + +* `event ID`: The unique identifier of the event you want to delete. You can usually retrieve this ID when the event is created or by querying your event list (implementation depends on how events are being scheduled/stored). + +**Important Considerations:** + +* Ensure you have the correct `event ID` before using this function. Deleting the wrong event is permanent. +* This function will only work if the bot has the necessary permissions to manage scheduled events. +* Error handling is crucial. Implement checks to ensure the `event ID` exists and that the deletion was successful. + +**Example:** + +Let's say you have an event with the ID `1234567890`. To delete this event, you would use: + +```cc +$eventDelete[1234567890] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Events/eventEdit.mdx b/content/docs/(functions)/Events/eventEdit.mdx new file mode 100644 index 00000000..972e0424 --- /dev/null +++ b/content/docs/(functions)/Events/eventEdit.mdx @@ -0,0 +1,53 @@ +--- +title: "$eventEdit" +--- + +Edit an existing scheduled event using its ID. + +## Usage + +This function allows you to modify various aspects of a scheduled event, such as its name, type, start and end times, description, and more. + +```cc +$eventEdit[ + {event=Event ID to edit} + {name=New event name} + {type=New event type (e.g., external)} + {start=New start timestamp} + {end=New end timestamp} + {desc=New description} + {channel=New voice or stage channel ID} + {location=New location} + {cover=URL of the new event image (optional)} + {reason=Reason for editing (for audit log)} +] +``` + +**Explanation of Parameters:** + +* **`event`**: The ID of the scheduled event you want to edit. This is a required parameter. +* **`name`**: The new name for the event. +* **`type`**: The new type of event. Examples include: + * `external`: An event happening outside of Discord. +* **`start`**: The new start timestamp for the event. This should be a Unix timestamp (seconds since epoch). Use a timestamp converter to find the correct value. +* **`end`**: The new end timestamp for the event. This should be a Unix timestamp. Use a timestamp converter to find the correct value. +* **`desc`**: The new description for the event. +* **`channel`**: The ID of the voice or stage channel where the event will be held (if applicable). +* **`location`**: The new location for the event. +* **`cover`**: A URL pointing to the new image you want to use as the event's cover. This is optional. +* **`reason`**: The reason for editing the event. This will be recorded in the server's audit log. + +## Important Notes: + +* You can only modify `start`, `type`, `location`, and `channel` if the event is *not* currently active (i.e., it hasn't started yet). + +## Example: + +This example demonstrates changing the name of an event with the ID `12345` to "My event new name!". + +```cc +$eventEdit[ + {event=12345} + {name=My event new name!} +] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Events/eventEnd.mdx b/content/docs/(functions)/Events/eventEnd.mdx new file mode 100644 index 00000000..875cbc9c --- /dev/null +++ b/content/docs/(functions)/Events/eventEnd.mdx @@ -0,0 +1,31 @@ +--- +title: "$eventEnd" +--- + +Ends an active event using its unique ID. + +## Description + +The `$eventEnd` function allows you to terminate a currently running event. You must provide the specific Event ID of the event you wish to stop. + +## Usage + +```cc +$eventEnd[Event ID] +``` + +**Parameters:** + +* `Event ID`: The numerical ID of the event you want to end. You can typically find this ID when the event is created or through a list of active events. + +## Example + +To end an event with the ID `12345`, you would use: + +```cc +$eventEnd[12345] +``` + +## Important Notes + +* Ensure that the `Event ID` you provide is correct and corresponds to an active event. Ending a non-existent or already completed event may result in an error. \ No newline at end of file diff --git a/content/docs/(functions)/Events/eventExists.mdx b/content/docs/(functions)/Events/eventExists.mdx new file mode 100644 index 00000000..c97ce68c --- /dev/null +++ b/content/docs/(functions)/Events/eventExists.mdx @@ -0,0 +1,34 @@ +--- +title: "$eventExists" +--- + +Checks if an event with the specified ID exists. + +## Usage + +```cc +$eventExists[event id] +``` + +**Parameters:** + +* `event id`: The ID of the event you want to check. This is usually a string of characters representing a unique event created in your bot's system. + +## Example + +This example demonstrates using `$eventExists` to check for an event with an invalid ID. + + + +!!exec $eventExists[Invalid event id] + + +false + + + +**Explanation:** + +* The user enters the command `!!exec $eventExists[Invalid event id]`. +* The `$eventExists` function checks if an event exists with the ID `Invalid event id`. +* Since no event with that ID exists, the function returns `false`. \ No newline at end of file diff --git a/content/docs/(functions)/Events/eventStart.mdx b/content/docs/(functions)/Events/eventStart.mdx new file mode 100644 index 00000000..fc11b619 --- /dev/null +++ b/content/docs/(functions)/Events/eventStart.mdx @@ -0,0 +1,33 @@ +--- +title: "$eventStart" +--- + +Starts a scheduled event using its ID. + +## Description + +This function allows you to initiate a scheduled event immediately. You'll need to provide the specific ID of the event you wish to start. + +## Usage + +```cc +$eventStart[Event ID] +``` + +## Parameters + +* **Event ID:** The unique identifier for the scheduled event you want to start. You can find this ID in your bot's settings or from other event-related functions (if available). Make sure this ID is correct, otherwise the function will fail. + +## Example + +To start a scheduled event with the ID `my_event_123`, you would use the following: + +```cc +$eventStart[my_event_123] +``` + +## Notes + +* This function will only work if the bot has the necessary permissions to manage scheduled events. +* Make sure the Event ID is valid. +* The event will run regardless of its originally scheduled time. \ No newline at end of file diff --git a/content/docs/(functions)/Events/getEventInfo.mdx b/content/docs/(functions)/Events/getEventInfo.mdx new file mode 100644 index 00000000..3000435e --- /dev/null +++ b/content/docs/(functions)/Events/getEventInfo.mdx @@ -0,0 +1,51 @@ +--- +title: "$getEventInfo" +--- + +Retrieves information about a specific event within a guild (server). + +## Usage + +```cc +$getEventInfo[event id;info type] +``` + +**Parameters:** + +* **event id:** The unique ID of the event you want to retrieve information from. You can usually find this ID in the event's URL or through Discord's API. +* **info type:** Specifies the type of information you want to retrieve about the event. See the table below for valid options. + +## Available Info Types + +| Info Type | Description | Value | +| :------------ | :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | The event's unique identifier. | Event ID like `123456789123456789` | +| `name` | The name of the event. | Event name like `My Cool Event` | +| `owner` | The ID of the user who created the event. | User ID like `123456789123456789` | +| `creator` | Alias for `owner`. The ID of the user who created the event. | User ID like `123456789123456789` | +| `channel` | The ID of the voice channel where the event is hosted (only for voice events). | Channel ID like `123456789123456789` or `undefined` if the event isn't a voice event. | +| `desc` | The event's description. | Description like `This event is so cool!` | +| `start_time` | The timestamp (in milliseconds) when the event is scheduled to start. | Timestamp in milliseconds (e.g., `1678886400000`) | +| `end_time` | The timestamp (in milliseconds) when the event is scheduled to end. | Timestamp in milliseconds (e.g., `1678893600000`) | +| `status` | The current status of the event. | `active` (event is currently running) or `scheduled` (event is planned for the future) | +| `type` | The type of event. | `voice` (hosted in a voice channel) or `external` (hosted on an external platform). | +| `location` | The location of the event (only for external events). | (The output will vary depending on how the event was created) | +| `cover` | The URL of the event's cover image, if one is set. | Image URL or `undefined` if no cover image is set. | +| `users_count` | The number of users who have expressed interest in the event. | Number (e.g., `25`) | +| `url` | The direct URL to the event. | Link (e.g., `https://discord.com/events/123456789123456789/123456789123456789`) | +| `privacy` | The event's privacy setting. | `private` (only members of the guild can see the event) or `public` (anyone can see the event). | + +## Example + +```cc +!!exec $getEventinfo[123456789123456789;name] +``` + + + +!!exec $getEventinfo[123456789123456789;name] + + +Event Name + + diff --git a/content/docs/(functions)/Events/getEventUsers.mdx b/content/docs/(functions)/Events/getEventUsers.mdx new file mode 100644 index 00000000..b7215f51 --- /dev/null +++ b/content/docs/(functions)/Events/getEventUsers.mdx @@ -0,0 +1,33 @@ +--- +title: "$getEventUsers" +--- + +Retrieves a list of users who have expressed interest in a specific event. + +## Usage + +```cc +$getEventUsers[event id;separator (default is ', ')] +``` + +**Parameters:** + +* **`event id`**: (Required) The unique identifier of the event you want to retrieve the user list for. This is typically a numerical ID. +* **`separator`**: (Optional) The character(s) used to separate the user IDs in the output string. Defaults to `, ` (a comma followed by a space) if not specified. + +## Example + +This example demonstrates how to retrieve the users interested in an event with the ID `123456789123456789`. + + + +!!exec $getEventUsers[123456789123456789] + + +123456789, 987654321 + + + +**Explanation:** + +In this example, the command `$getEventUsers[123456789123456789]` is executed. The bot then returns a comma-separated list of user IDs (`123456789, 987654321`) who have shown interest in the event with the ID `123456789123456789`. \ No newline at end of file diff --git a/content/docs/(functions)/Events/guildEvents.mdx b/content/docs/(functions)/Events/guildEvents.mdx new file mode 100644 index 00000000..652f7203 --- /dev/null +++ b/content/docs/(functions)/Events/guildEvents.mdx @@ -0,0 +1,48 @@ +--- +title: "$guildEvents" +--- + +Retrieve a list of events happening in your Discord server. + +You can specify what information you want to retrieve about the events (`info type`) and filter the events based on their status (`filter`). + +**Info Types:** + +* `id`: Returns the IDs of the events. +* `name`: Returns the names of the events. + +**Filters:** + +* `active`: Returns only currently active events. +* `scheduled`: Returns only scheduled events. + +## Usage + +```cc +$guildEvents[info type;filter;separator] +``` + +**Parameters:** + +* `info type`: The type of information to retrieve (either `id` or `name`). +* `filter`: The filter to apply to the events (either `active` or `scheduled`). Leave blank for no filter. +* `separator`: (Optional) The separator to use between the event details in the output. Defaults to `, `. + +## Example + +This example retrieves the names of all active events in the server, separated by a forward slash `/`. + +```cc +!!exec $guildEvents[name;active;/] +``` + +**Result:** + + + +!!exec $guildEvents[name;active;/] + + +Event 1/Event 2 + + \ No newline at end of file diff --git a/content/docs/(functions)/Events/meta.json b/content/docs/(functions)/Events/meta.json new file mode 100644 index 00000000..0a3a545a --- /dev/null +++ b/content/docs/(functions)/Events/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Event Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Image/imageBorderRad.mdx b/content/docs/(functions)/Image/imageBorderRad.mdx new file mode 100644 index 00000000..40e35ea9 --- /dev/null +++ b/content/docs/(functions)/Image/imageBorderRad.mdx @@ -0,0 +1,43 @@ +--- +title: "$imageBorderRad" +--- + +Control the border radius of a filled box created with $imageFill. This allows you to round the corners of your shapes for softer, more visually appealing designs. + +## Usage + +You can specify a single radius value to apply to all corners, or provide individual values for each corner for more precise control. + +```cc +$imageBorderRad[border radius for all corners] +``` + +```cc +$imageBorderRad[top-left corner radius; top-right corner radius; bottom-right corner radius; bottom-left corner radius] +``` + +**Explanation:** + +* **`$imageBorderRad[...]`**: This is the function call. The values inside the square brackets determine the border radius. +* **Single Value:** If you provide only one number (e.g., `50`), it will be used as the radius for all four corners. +* **Four Values:** If you provide four numbers separated by semicolons (`;`), they represent the radius of the corners in this order: top-left, top-right, bottom-right, bottom-left. + +## Example: Creating a Red Circle + +This example demonstrates how to draw a red circle in the center of a 300x300 pixel image using `$imageBorderRad` in conjunction with `$imageCreate` and `$imageFill`. + + + +!!exec $imageCreate[300;300]
$imageBorderRad[50]
$imageFill[red;100;100;100;100]
$image[$imageOutput]

+
+ + + + +
+ +**Breakdown of the command:** + +1. **`$imageCreate[300;300]`**: Creates a new image with a width of 300 pixels and a height of 300 pixels. +2. **`$imageBorderRad[50]`**: Sets the border radius of the shape to 50 pixels for all corners. Because we fill a square with `$imageFill` later, this large radius effectively turns it into a circle. +3. **`$imageFill[red;100;100;100;100]`**: Fills a 100x100 pixel square with the color red, starting at the coordinates (100, 100) - which centers the square. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageCreate.mdx b/content/docs/(functions)/Image/imageCreate.mdx new file mode 100644 index 00000000..8c831853 --- /dev/null +++ b/content/docs/(functions)/Image/imageCreate.mdx @@ -0,0 +1,40 @@ +--- +title: "$imageCreate" +--- + +Creates a new, blank image with specified dimensions. + +## Usage + +```cc +$imageCreate[width;height] +``` + +**Parameters:** + +* **width:** The width of the new image in pixels. +* **height:** The height of the new image in pixels. + +**Returns:** + +This function creates a blank image and stores it for further processing with other image manipulation functions (e.g., `$imageFill`, `$image`). You can then use `$imageOutput` to display or save the resulting image. + +## Example + +This example creates a 300x300 pixel image, fills it with the color red, and then displays the image. + +```cc +!!exec $imageCreate[300;300] +$imageFill[red] +$image[$imageOutput] +``` + + + +!!exec $imageCreate[300;300]
$imageFill[red]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageCrop.mdx b/content/docs/(functions)/Image/imageCrop.mdx new file mode 100644 index 00000000..5ccfe93a --- /dev/null +++ b/content/docs/(functions)/Image/imageCrop.mdx @@ -0,0 +1,21 @@ +--- +title: "$imageCrop" +--- + +Crop a defined image from image builder + +## Usage + +```cc +$imageCrop[image name;x;y;width;height] +``` + +### Example: + + +!!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]
$imageCrop[avatar;0;0;100;100] // crop the image from position (0, 0) with size 100
$imageDraw[avatar]
$image[$imageOutput]

+
+ +[image] + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageDraw.mdx b/content/docs/(functions)/Image/imageDraw.mdx new file mode 100644 index 00000000..ae630e7a --- /dev/null +++ b/content/docs/(functions)/Image/imageDraw.mdx @@ -0,0 +1,42 @@ +--- +title: "$imageDraw" +--- + +Draws a loaded image onto the current image. This allows you to composite images together. + +## Usage + +```cc +$imageDraw[image name;x;y;width;height;opacity] +``` + +**Parameters:** + +* `image name`: The name of the image you loaded using `$imageLoad` or `$imageLoadFromURL`. This name acts as a reference to the image you want to draw. +* `x`: The x-coordinate of the top-left corner where the image will be drawn. +* `y`: The y-coordinate of the top-left corner where the image will be drawn. +* `width`: The width of the image to be drawn. If different from the original image width, the image will be scaled. +* `height`: The height of the image to be drawn. If different from the original image height, the image will be scaled. +* `opacity`: (Optional) The opacity of the image, ranging from `0` (fully transparent) to `1` (fully opaque). If not specified, the image will be drawn with full opacity (`1`). + +# Position: X & Y + +For more detailed information on how X and Y coordinates work within image manipulation, please see: [Position (X & Y)](/CodeReferences/ref.imgbuild.position) + +# Size: Width & Height + +For more detailed information on how Width and Height work within image manipulation (including scaling), please see: [Size (Width & Height)](/CodeReferences/ref.imgbuild.size) + +### Example: + +This example creates a 300x300 image, loads the author's avatar, draws it onto the created image, and then outputs the result. + + + +!!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] // Load Avatar as "avatar"
$imageDraw[avatar;0;0;300;300] // Draw "avatar" at (0,0) with width 300 and height 300
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageDrawBack.mdx b/content/docs/(functions)/Image/imageDrawBack.mdx new file mode 100644 index 00000000..d2a41c16 --- /dev/null +++ b/content/docs/(functions)/Image/imageDrawBack.mdx @@ -0,0 +1,51 @@ +--- +title: "$imageDrawBack" +--- + +Draws a loaded image behind the current image. This allows you to layer images and create more complex visuals. + +## Usage + +```cc +$imageDrawBack[image name;x;y;width;height;opacity] +``` + +**Parameters:** + +* **`image name`:** The name of the image loaded using `$imageLoad` or `$imageLoadFromURL` that you want to draw in the background. +* **`x`:** The horizontal position (X-coordinate) where the top-left corner of the background image will be placed. +* **`y`:** The vertical position (Y-coordinate) where the top-left corner of the background image will be placed. +* **`width`:** The width of the background image when drawn. You can resize the image using this parameter. +* **`height`:** The height of the background image when drawn. You can resize the image using this parameter. +* **`opacity`:** (Optional) The opacity of the background image, ranging from 0 (fully transparent) to 1 (fully opaque). If omitted, the image will be drawn with full opacity. + +# Position: X & Y + +For a more detailed explanation of X and Y coordinates, refer to this resource: [X & Y Position Reference](/CodeReferences/ref.imgbuild.position) + +# Size: Width & Height + +For a more detailed explanation of Width and Height, refer to this resource: [Width & Height Reference](/CodeReferences/ref.imgbuild.size) + +### Example: + +This example creates an image, loads a user's avatar, fills the background with gray, adds a transparent rectangle, and then draws the avatar behind it. + +```cc +!!exec $imageCreate[300;300] +$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] +$imageFill[gray] +$imageFill[transparent;100;100;100;100] +$imageDrawBack[avatar;50;50;200;200] +$image[$imageOutput] +``` + + + +!!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]
$imageFill[gray]
$imageFill[transparent;100;100;100;100]
$imageDrawBack[avatar;50;50;200;200]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageFill.mdx b/content/docs/(functions)/Image/imageFill.mdx new file mode 100644 index 00000000..ac389b71 --- /dev/null +++ b/content/docs/(functions)/Image/imageFill.mdx @@ -0,0 +1,59 @@ +--- +title: "$imageFill" +--- + +Fill a portion of an image with a specified color. + +## Usage + +```cc +$imageFill[color;x;y;width;height;opacity] +``` + +| Parameter | Description | Required | +| :-------- | :---------------------------------------------------------------------------------------------------------------------------- | :------- | +| `color` | The color to fill with. Can be a hex code (e.g., `#FF0000`) or a common color name (e.g., `gray`, `black`, `red`). | Yes | +| `x` | The x-coordinate of the top-left corner of the rectangle to fill. See [Positioning](/CodeReferences/ref.imgbuild.position) for more details. | No | +| `y` | The y-coordinate of the top-left corner of the rectangle to fill. See [Positioning](/CodeReferences/ref.imgbuild.position) for more details. | No | +| `width` | The width of the rectangle to fill. See [Sizing](/CodeReferences/ref.imgbuild.size) for more details. | No | +| `height` | The height of the rectangle to fill. See [Sizing](/CodeReferences/ref.imgbuild.size) for more details. | No | +| `opacity` | The opacity of the fill color (0-1, where 0 is fully transparent and 1 is fully opaque). Defaults to 1 if omitted. | No | + +## Examples + +### Example 1: Fill the entire image with gray. + +```cc +!!exec $imageCreate[300;300] +$imageFill[gray] +$image[$imageOutput] +``` + + + +!!exec $imageCreate[300;300]
$imageFill[gray]
$image[$imageOutput]

+
+ + + + +
+ +### Example 2: Fill a 50x50 rectangle at (100, 100) with red. + +```cc +!!exec $imageCreate[300;300] +$imageFill[gray] +$imageFill[red;100;100;50;50] +$image[$imageOutput] +``` + + + +!!exec $imageCreate[300;300]
$imageFill[gray]
$imageFill[red;100;100;50;50]
$image[$imageOutput]

+
+ + + + +
diff --git a/content/docs/(functions)/Image/imageHeight.mdx b/content/docs/(functions)/Image/imageHeight.mdx new file mode 100644 index 00000000..0704f4e4 --- /dev/null +++ b/content/docs/(functions)/Image/imageHeight.mdx @@ -0,0 +1,29 @@ +--- +title: "$imageHeight" +--- + +Retrieves the height of an image stored within the bot's memory. This function allows you to dynamically access the height of images based on their assigned name. + +## Usage + +```cc +$imageHeight[image name] +``` + +* `image name`: The name you assigned to the image when you loaded it (e.g., using `$loadImage`). If no name is provided, it defaults to the most recently loaded image. + +## Examples + +### Example 1: Get the height of the last loaded image + +```cc +$imageHeight +``` + +This will return the height of the most recently loaded image. If no image has been loaded, it will likely return an error. + +### Example 2: Get the height of an image named "avatar" + +```cc +$imageHeight[avatar] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageLineHeight.mdx b/content/docs/(functions)/Image/imageLineHeight.mdx new file mode 100644 index 00000000..7023a576 --- /dev/null +++ b/content/docs/(functions)/Image/imageLineHeight.mdx @@ -0,0 +1,43 @@ +--- +title: "$imageLineHeight" +--- + +Adjust the line height used when drawing text within the image builder. The default line height is 1.5. + +## Usage + +```cc +$imageLineHeight[New Value (optional)] +``` + +**Explanation:** + +* **`$imageLineHeight`**: This is the command to get or set the image line height. +* **`[New Value (optional)]`**: This is an optional parameter. + * If you provide a numerical value here (e.g., `1.3`), the line height will be set to that value. + * If you leave it empty, the command will return the current line height. + +## Examples + +### Setting the Line Height + +To set the line height to `1.3`, use the following command: + +```cc +$imageLineHeight[1.3] +``` + +This will change the line height used for text in future image builder commands. + +### Getting the Current Line Height + +To retrieve the current line height, use the command without any parameters: + + + +!!exec $imageLineHeight + + +1.3 + + \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageLoadEmoji.mdx b/content/docs/(functions)/Image/imageLoadEmoji.mdx new file mode 100644 index 00000000..d5e2f592 --- /dev/null +++ b/content/docs/(functions)/Image/imageLoadEmoji.mdx @@ -0,0 +1,48 @@ +--- +title: "$imageLoadEmoji" +--- + +Loads an emoji (either a standard Unicode emoji or a custom Discord emoji) for use in image drawing. This allows you to easily add emojis to your images. + +## Usage + +```cc +$imageLoadEmoji[id;Emoji] +``` + +**Parameters:** + +* `id`: A unique identifier for the loaded emoji. You'll use this ID in the `$imageDraw` function to reference the emoji. Choose something descriptive and easy to remember. +* `Emoji`: The emoji you want to load. This can be either: + * A standard Unicode emoji (e.g., `:smile:`, `:heart:`) + * A custom Discord emoji in the format `<:emoji_name:emoji_id>` (e.g., `<:custom_emoji:123456789012345678>`). You can get the custom emoji format by typing the emoji in Discord and escaping it with a backslash (`\`), like this: `\:custom_emoji:` + +## Examples + +**Example 1: Loading and drawing a standard Unicode emoji** + +This example creates a 300x300 image, loads the `:cheese:` emoji, fills a gray rectangle, and then draws the cheese emoji on top. + + + +!!exec $imageCreate[300;300]
$imageLoadEmoji[mycheese;:cheese:]
$imageBorderRad[100]
$imageFill[gray;50;50;200;200]
$imageDraw[mycheese;100;100;100;100]
$image[$imageOutput]

+
+ + + + +
+ +**Example 2: Loading and drawing both a standard and a custom emoji** + +This example creates a 600x600 image, loads both a custom Discord emoji (using its ID) and the `:cheese:` emoji, and draws them both. + + + +!!exec $imageCreate[600;600]
$imageLoadEmoji[seed;<:seed:1149808771888062605>]
$imageLoadEmoji[cheese;:cheese:]
$imageBorderRad[100]
$imageFill[gray;50;200;200;200]
$imageFill[gray;350;200;200;200]
$imageDraw[cheese;100;250;100;100]
$imageDraw[seed;400;250;100;100]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageLoadFromURL.mdx b/content/docs/(functions)/Image/imageLoadFromURL.mdx new file mode 100644 index 00000000..85ec0fea --- /dev/null +++ b/content/docs/(functions)/Image/imageLoadFromURL.mdx @@ -0,0 +1,50 @@ +--- +title: "$imageLoadFromURL" +--- + +Loads an image from a URL and saves it with a reference name for later use in other image manipulation functions. + +## Usage + +```cc +$imageLoadFromURL[name;URL] +``` + +* **`name`**: A unique name you'll use to refer to this image in other `$image...` functions. Choose a descriptive name like "avatar" or "background". +* **`URL`**: The full URL of the image you want to load. This URL must point directly to an image file (e.g., `.png`, `.jpg`, `.gif`). + +## Example + +This example creates a 300x300 image, loads the author's avatar from their profile picture, and then draws the avatar onto the newly created image. + + + +!!exec $imageCreate[300;300] // Create Image Frame
+$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] // Load the author's avatar
+$imageDraw[avatar;0;0;300;300] // Draw the avatar onto the image frame
+$image[$imageOutput] // Output the resulting image

+
+ + + + +
+ +**Explanation:** + +1. **`$imageCreate[300;300]`**: Creates a new image with dimensions 300x300 pixels. +2. **`$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]`**: + * Loads the image from the author's avatar URL (`$authorAvatar`). + * `$replaceText[$authorAvatar;webp;png]` replaces `.webp` extensions with `.png`. This is a common workaround since not all image libraries fully support `.webp` and `.png` is generally more compatible. This ensures a compatible image format. + * Saves the loaded image with the name "avatar". +3. **`$imageDraw[avatar;0;0;300;300]`**: Draws the image named "avatar" (loaded in the previous step) onto the created image. The coordinates `0;0` specify the top-left corner of where the avatar should be placed, and `300;300` defines the width and height of the drawn image (effectively stretching or shrinking the avatar to fill the entire canvas). +4. **`$image[$imageOutput]`**: Outputs the final image. `$imageOutput` is a special variable that tells the command processor to display the generated image. + +** Max file size ** +The image max size is 3MB. + +**Key takeaways:** + +* The `$imageLoadFromURL` function doesn't directly display the image. It loads it into memory for further processing with other `$image...` functions. +* You must provide a valid URL that points directly to an image file. +* Choose meaningful names for your loaded images; this will make your code easier to read and understand. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageOutput.mdx b/content/docs/(functions)/Image/imageOutput.mdx new file mode 100644 index 00000000..84a035ec --- /dev/null +++ b/content/docs/(functions)/Image/imageOutput.mdx @@ -0,0 +1,55 @@ +--- +title: "$imageOutput" +--- + +This function saves the current image being drawn into a file and returns the filename. This filename can then be used within other functions like `$image` or within the `{image:...}` tag in functions like `$sendMessage`. + +**In simpler terms:** Imagine you're drawing on a canvas using other image commands. `$imageOutput` lets you save that drawing as an actual image file (like a PNG or JPG) so you can then send it or use it elsewhere. + +## Usage + +```cc +$imageOutput[type] +``` + +**Parameters:** + +* `type`: Specifies the image file format to save as. Valid options are `png` or `jpg`. + +## Examples + +These examples assume you've already used functions like `$imageCreate` and other image manipulation commands to build the image you want to save. + +**Example 1: Sending the image directly using `$image`** + +```cc +$imageCreate[...] // Create the initial image (replace [...] with actual parameters) +// ... Building the image using other $image functions ... +$image[$imageOutput[png]] // Save as PNG and send the image using $image function +``` + +**Explanation:** + +1. `$imageCreate[...]`: This line represents the code that creates the image you want to save. You'll need to replace `[...]` with the actual parameters for `$imageCreate`. +2. `// ... Building the image using other $image functions ...`: This represents the other `$image...` functions which are used to modify the image. +3. `$imageOutput[png]`: This saves the current image as a PNG file and returns the generated filename. +4. `$image[...]`: This function takes the filename returned by `$imageOutput` and uses it to send the image. + +**Example 2: Sending the image using `{image:...}` in `$sendMessage`** + +```cc +$imageCreate[...] // Create the initial image (replace [...] with actual parameters) +// ... Building the image using other $image functions ... +$sendMessage[{image:$imageOutput[jpg]}] // Save as JPG and send the image using $sendMessage function +``` + +**Explanation:** + +1. `$imageCreate[...]`: Similar to Example 1, this creates the initial image. +2. `// ... Building the image using other $image functions ...`: This represents the other `$image...` functions which are used to modify the image. +3. `$imageOutput[jpg]`: This saves the current image as a JPG file and returns the generated filename. +4. `{image:$imageOutput[jpg]}`: This is used as parameter for `$sendMessage` to specify which image to send. + +**Important Considerations:** + +* Make sure you have created an image using `$imageCreate` or similar functions **before** calling `$imageOutput`. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imagePositionBase.mdx b/content/docs/(functions)/Image/imagePositionBase.mdx new file mode 100644 index 00000000..93a4e502 --- /dev/null +++ b/content/docs/(functions)/Image/imagePositionBase.mdx @@ -0,0 +1,43 @@ +--- +title: "$imagePositionBase" +--- + +Control the base position for drawing images or objects. By default, the base position is `topleft`. This allows you to easily position elements relative to the top-left, center, or bottom-right of your image. + +## Usage + +```cc +$imagePositionBase[Base] +``` + +**Parameter:** + +* `Base`: Specifies the base position. Must be one of the valid values listed below. + +### Base Values: + +The following values are accepted for the `Base` parameter: + +* `topleft`: Top-left corner +* `top`: Top-center +* `topright`: Top-right corner +* `centerleft`: Center-left +* `center`: Center +* `centerright`: Center-right +* `bottomleft`: Bottom-left corner +* `bottom`: Bottom-center +* `bottomright`: Bottom-right corner + +### Example: + +This example creates an image, sets the base position to `centerleft`, draws a white square, then sets the base position to `centerright` and draws a red square. + + + +!!exec $imageCreate[300;300]
$imagePositionBase[centerleft]
$imageFill[white;center;center;100;100]
$imagePositionBase[centerright]
$imageFill[red;center;center;100;100]
$image[$imageOutput]

+
+ + + + +
diff --git a/content/docs/(functions)/Image/imageSetOpacity.mdx b/content/docs/(functions)/Image/imageSetOpacity.mdx new file mode 100644 index 00000000..c17c6970 --- /dev/null +++ b/content/docs/(functions)/Image/imageSetOpacity.mdx @@ -0,0 +1,51 @@ +--- +title: "$imageSetOpacity" +--- + +Sets the global opacity for all subsequent drawing operations performed by the image builder. This allows you to control the transparency of elements added to your image. + +## Usage + +```cc +$imageSetOpacity[opacity] +``` + +## Parameters + +* **`opacity`**: A numerical value between 0 and 100 representing the desired opacity level. + + * `0`: Fully transparent (invisible). + * `100`: Fully opaque (completely visible). + * Values between 0 and 100 create varying degrees of transparency. + +## Example + +This example sets the opacity to 50%, making subsequent drawings semi-transparent. + +```cc +$imageSetOpacity[50] +``` + +## Practical Example + +This example demonstrates how to use `$imageSetOpacity` to draw two avatars with different opacities. It fetches the author's avatar, loads it into the image builder, draws it once at full opacity, then sets the opacity to 50% and draws it again. + +```cc +!!exec $let[avatar;$replaceText[$authoravatar;.webp;.png]] +$imageCreate[300;300] +$imageLoadFromURL[avatar;$avatar] +$imageDraw[avatar;100;10;100;100] +$imageSetOpacity[50] +$imageDraw[avatar;100;190;100;100] +$image[$imageOutput] +``` + + + +!!exec ?exec $let[avatar;$replaceText[$authoravatar;.webp;.png]]
$imageCreate[300;300]
$imageLoadFromURL[avatar;$avatar]
$imageDraw[avatar;100;10;100;100]
$imageSetOpacity[50]
$imageDraw[avatar;100;190;100;100]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageStroke.mdx b/content/docs/(functions)/Image/imageStroke.mdx new file mode 100644 index 00000000..de7d7106 --- /dev/null +++ b/content/docs/(functions)/Image/imageStroke.mdx @@ -0,0 +1,50 @@ +--- +title: "$imageStroke" +--- + +Draws a rectangle outline (stroke) on the canvas. + +## Usage + +```cc +$imageStroke[color;x;y;width;height;opacity] +``` + +**Parameters:** + +* `color`: The color of the stroke. Can be a named color (e.g., `red`, `blue`, `green`), a hex code (e.g., `#FF0000`), or an RGB value (e.g., `rgb(255,0,0)`). +* `x`: The x-coordinate of the top-left corner of the rectangle. Use `$imagePositionBase` to control the origin. See more details below. +* `y`: The y-coordinate of the top-left corner of the rectangle. Use `$imagePositionBase` to control the origin. See more details below. +* `width`: The width of the rectangle. See more details below. +* `height`: The height of the rectangle. See more details below. +* `opacity` (Optional): The opacity of the stroke. A value between 0 (fully transparent) and 1 (fully opaque). Defaults to 1 if not provided. + +### Stroke Width + +The thickness of the stroke is controlled by the `$imageStrokeWidth` command. + +## Position (X & Y) + +The `x` and `y` parameters define the position of the rectangle's top-left corner. You can change the reference point (origin) for these coordinates using the `$imagePositionBase` command. + +[Learn more about X and Y positioning](/CodeReferences/ref.imgbuild.position) + +## Size (Width & Height) + +The `width` and `height` parameters define the dimensions of the rectangle. + +[Learn more about Width and Height sizing](/CodeReferences/ref.imgbuild.size) + +### Example: + +This example creates a 300x300 canvas, sets the position base to `center`, sets the stroke width to 10, and then draws a red rectangle with a width and height of 50, centered on the canvas. + + + +!!exec $imageCreate[300;300]
$imagePositionBase[center]
$imageStrokeWidth[10]
$imageStroke[red;center;center;50;50]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageStrokeWidth.mdx b/content/docs/(functions)/Image/imageStrokeWidth.mdx new file mode 100644 index 00000000..fd3cfc28 --- /dev/null +++ b/content/docs/(functions)/Image/imageStrokeWidth.mdx @@ -0,0 +1,37 @@ +--- +title: "$imageStrokeWidth" +--- + +Controls the thickness of the stroke line used by the `$imageStroke` function. This allows you to customize the appearance of shapes and lines drawn on your images. + +## Usage + +```cc +$imageStrokeWidth[width] +``` + +### Parameters: + +* **`width`**: The desired thickness of the stroke line, measured in pixels. The default value is `1`. A higher number results in a thicker line. + +# Understanding Position (X & Y) + +For a deeper understanding of how to position elements using X and Y coordinates, refer to this resource: [Positioning Guide](/CodeReferences/ref.imgbuild.position) + +# Understanding Size (Width & Height) + +To learn more about defining the size of elements using Width and Height, please see this guide: [Size Guide](/CodeReferences/ref.imgbuild.size) + +### Example: + +This example demonstrates how to create a red square with a stroke thickness of 10 pixels, centered on a 300x300 canvas. + + + +!!exec $imageCreate[300;300]
$imagePositionBase[center]
$imageStrokeWidth[10]
$imageStroke[red;center;center;50;50]
$image[$imageOutput]

+
+ +
+
+
+
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextAlign.mdx b/content/docs/(functions)/Image/imageTextAlign.mdx new file mode 100644 index 00000000..8686a799 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextAlign.mdx @@ -0,0 +1,34 @@ +--- +title: "$imageTextAlign" +--- + +This command sets the text alignment for subsequent text written on an image. It affects how the `pos x` and `pos y` parameters are interpreted when using commands like `$imageText`. + +In essence, `$imageTextAlign` determines the reference point for positioning your text. + +## Usage + +```cc +$imageTextAlign[Alignment] +``` + +## Alignments + +The `Alignment` parameter accepts the following values: + +* **`left`**: Aligns the text to the left. `pos x` and `pos y` specify the coordinates of the **left edge** of the text. + +* **`center`**: Centers the text horizontally. `pos x` and `pos y` specify the coordinates of the **center** of the text. + +* **`right`**: Aligns the text to the right. `pos x` and `pos y` specify the coordinates of the **right edge** of the text. + +**Example:** + +Let's say you want to center the text "Hello World" at coordinates (100, 50) on your image. You would use the following commands: + +```cc +$imageTextAlign[center] +$imageText[100,50,Hello World] +``` + +In this example, (100, 50) would be the center point of the "Hello World" text. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextBaseline.mdx b/content/docs/(functions)/Image/imageTextBaseline.mdx new file mode 100644 index 00000000..577bd103 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextBaseline.mdx @@ -0,0 +1,27 @@ +--- +title: "$imageTextBaseline" +--- + +This function allows you to control the vertical alignment (baseline) of text within an image. By default, the text aligns to the `bottom`. + +## Usage + +```cc +$imageTextBaseline[Baseline] +``` + +Where `Baseline` is one of the supported values. + +## Baseline Values + +The following values are supported for the `Baseline` parameter: + +* `top`: Aligns the text to the top of the specified area. +* `middle`: Centers the text vertically within the specified area. +* `bottom`: Aligns the text to the bottom of the specified area (this is the default). + +## Example + +The image below demonstrates the effect of each baseline option: + +![](https://i.imgur.com/QkqAHrO.png) \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextColor.mdx b/content/docs/(functions)/Image/imageTextColor.mdx new file mode 100644 index 00000000..239f1ab9 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextColor.mdx @@ -0,0 +1,39 @@ +--- +title: "$imageTextColor" +--- + +Specifies the fill and stroke color of the text in your image. This command allows you to customize the text's appearance by setting its color. + +## How to Use + +The `$imageTextColor` command takes a single argument: the color you want to use for the text. + +```cc +$imageTextColor[Color name] +``` + +**Explanation:** + +* `$imageTextColor`: This is the command itself. +* `[Color name]`: Replace this with the name of a valid color. This could be: + * A standard color name (e.g., `red`, `blue`, `green`). + * A hexadecimal color code (e.g., `#FF0000` for red). + * An RGB color code (e.g., `rgb(255, 0, 0)` for red). + +**Example:** + +To set the text color to blue: + +```cc +$imageTextColor[blue] +``` + +To set the text color to a specific shade of green using a hexadecimal code: + +```cc +$imageTextColor[#008000] +``` + +**Important Considerations:** + +* Make sure the color name or code you provide is valid. Invalid values might result in unexpected behavior or default color being used. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextFill.mdx b/content/docs/(functions)/Image/imageTextFill.mdx new file mode 100644 index 00000000..4ce9fbd4 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextFill.mdx @@ -0,0 +1,38 @@ +--- +title: "$imageTextFill" +--- + +Add filled text to an image. + +## Usage + +```cc +$imageTextFill[Text;position x;position y;color;opacity] +``` + +**Parameters:** + +* **Text:** The text you want to write on the image. +* **position x:** The x-coordinate for the text's position. See [Position: X & Y](/CodeReferences/ref.imgbuild.position) for more details. +* **position y:** The y-coordinate for the text's position. See [Position: X & Y](/CodeReferences/ref.imgbuild.position) for more details. +* **color:** The color of the text fill (e.g., `#4461b3`, `red`, `rgba(255,0,0,0.5)`). +* **opacity:** *This parameter is deprecated and no longer functional*. Use a rgba color value instead to specify opacity. + +## Related Information: + +* **Position: X & Y:** Learn more about specifying the X and Y coordinates for text placement [here](/CodeReferences/ref.imgbuild.position). +* **Size: Width & Height:** Learn more about specifying width and height values related to images [here](/CodeReferences/ref.imgbuild.size). *Note this link may not be directly relevant to this specific function, but is included for general context*. + +### Example: + +This example creates a 300x300 image, sets the text size to 30, aligns the text to the center, and then writes "CC is Awesome" at position 150,150 with the color #4461b3. + + + +!!exec $imageCreate[300;300]
$imageTextSize[30]
$imageTextAlign[center]
$imageTextFill[CC is Awesome;150;150;#4461b3]
$image[$imageOutput]

+
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextFillColor.mdx b/content/docs/(functions)/Image/imageTextFillColor.mdx new file mode 100644 index 00000000..0e7fe6f4 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextFillColor.mdx @@ -0,0 +1,38 @@ +--- +title: "$imageTextFillColor" +--- + +Set the color used to fill text in images. + +This function allows you to control the color of the text you add to images. You can use it in conjunction with other `$image` functions like `$imageText` to create visually appealing images. + +## Syntax + +```cc +$imageTextFillColor[Color name] +``` + +**Parameters:** + +* `Color name`: The name of the color you want to use. This can be: + * A standard CSS color name (e.g., `red`, `blue`, `green`, `white`, `black`). + * A hexadecimal color code (e.g., `#FF0000` for red, `#00FF00` for green, `#0000FF` for blue). + * An RGB color code (e.g., `rgb(255, 0, 0)` for red). + +## Example + +To set the text fill color to blue: + +```cc +$imageTextFillColor[blue] +``` + +To set the text fill color to a specific shade of green using a hex code: + +```cc +$imageTextFillColor[#008000] +``` + +**Important Considerations:** + +* Make sure the `Color name` is valid. Invalid colors will result in unexpected behavior. diff --git a/content/docs/(functions)/Image/imageTextSize.mdx b/content/docs/(functions)/Image/imageTextSize.mdx new file mode 100644 index 00000000..2c460824 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextSize.mdx @@ -0,0 +1,31 @@ +--- +title: "$imageTextSize" +--- + +Specifies the font size for text rendered in images. + +This tag allows you to control the size of text used in image manipulation functions, ensuring readability and visual appeal. + +## Usage + +```cc +$imageTextSize[font size] +``` + +**Parameters:** + +* `font size`: (Required) An integer representing the desired font size. Larger numbers result in larger text. + +**Example:** + +To set the text size to 20 pixels: + +```cc +$imageTextSize[20] +``` + +**Notes:** + +* The valid range for font size depends on the font being used. Experiment to find the best size for your needs. +* If this tag is not used, a default font size will be applied. +* Using excessively large font sizes can cause text to be clipped or overflow the image boundaries. Be mindful of the overall image dimensions. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextStroke.mdx b/content/docs/(functions)/Image/imageTextStroke.mdx new file mode 100644 index 00000000..37a5f4da --- /dev/null +++ b/content/docs/(functions)/Image/imageTextStroke.mdx @@ -0,0 +1,68 @@ +--- +title: "$imageTextStroke" +--- + +Add a stroke (border) to text on an image. This effect can enhance the visibility of your text, especially when placed over complex backgrounds. + +## Usage + +```cc +$imageTextStroke[Text;position x;position y;color (optional);opacity (optional)] +``` + +**Parameters:** + +- **`Text`**: The text you want to add a stroke to. +- **`position x`**: The horizontal position of the text. See details below. +- **`position y`**: The vertical position of the text. See details below. +- **`color (optional)`**: The color of the stroke (border). You can use Hex codes (e.g., `#FFFFFF` for white) or named colors (e.g., `red`). If omitted, a default color will be used. +- **`opacity (optional)`**: The opacity of the stroke, ranging from 0 (fully transparent) to 1 (fully opaque). If omitted, the stroke will be fully opaque (1). + +## Understanding Position (X & Y) + +For a deeper understanding of how to specify the X and Y coordinates for text positioning, please refer to the detailed explanation [here](/CodeReferences/ref.imgbuild.position). + +## Related: Size (Width & Height) + +While not directly used in `$imageTextStroke`, understanding how to set image dimensions can be helpful when working with text. You can learn more about width and height settings [here](/CodeReferences/ref.imgbuild.size). + +## Example + +This example creates an image, sets the text size and alignment, and then adds stroked text to the image. + +```cc +!!exec $imageCreate[300;300] +$imageTextSize[30] +$imageTextAlign[center] +$imageTextStroke[CC is Awesome;150;150;#4461b3] +$image[$imageOutput] +``` + +**Result:** + + + + !!exec $imageCreate[300;300] +
+ $imageTextSize[30] +
+ $imageTextAlign[center] +
+ $imageTextStroke[CC is Awesome;150;150;#4461b3] +
+ $image[$imageOutput] +
+
+
+ + + +
diff --git a/content/docs/(functions)/Image/imageTextStrokeColor.mdx b/content/docs/(functions)/Image/imageTextStrokeColor.mdx new file mode 100644 index 00000000..077827d0 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextStrokeColor.mdx @@ -0,0 +1,37 @@ +--- +title: "$imageTextStrokeColor" +--- + +Sets the outline (stroke) color of the text in your image. + +## Description + +The `$imageTextStrokeColor` function allows you to define the color of the outline or stroke that appears around the text you're adding to an image. This can help the text stand out and improve readability, especially when the text and background colors are similar. + +## Usage + +```cc +$imageTextStrokeColor[Color name] +``` + +**Parameters:** + +* `Color name`: The name of the color you want to use for the text stroke. This can be a standard CSS color name (e.g., `red`, `blue`, `green`, `white`, `black`) or a hexadecimal color code (e.g., `#FF0000` for red, `#0000FF` for blue). + +**Example:** + +To set the text stroke color to blue, you would use: + +```cc +$imageTextStrokeColor[blue] +``` + +To set the text stroke color to a specific shade of green using a hex code, you would use: + +```cc +$imageTextStrokeColor[#00FF00] +``` + +**Tips:** + +* Experiment with different stroke colors to find the best contrast with your text and background. \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageTextWeight.mdx b/content/docs/(functions)/Image/imageTextWeight.mdx new file mode 100644 index 00000000..34642880 --- /dev/null +++ b/content/docs/(functions)/Image/imageTextWeight.mdx @@ -0,0 +1,33 @@ +--- +title: "$imageTextWeight" +--- + +Controls the font weight (thickness) and style of text rendered on your images. Use this variable to make your text bold, italic, or both! + +## Usage + +```cc +$imageTextWeight[Weight Type] +``` + +**Explanation:** + +* `$imageTextWeight` is the variable you'll use to set the font's weight and style. +* `[Weight Type]` is where you specify the desired font weight and style. See the "Types" section below for the available options. + +## Available Weight Types + +Here's a breakdown of the allowed values for `[Weight Type]`: + +* `regular`: Normal, standard font weight (not bold or italic). +* `bold`: Displays the text in a bold font. +* `italic`: Displays the text in an italic font. +* `bold italic`: Displays the text in a bold and italic font. + +**Example:** + +To make your image text appear in bold, you would use: + +```cc +$imageTextWeight[bold] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Image/imageUseFont.mdx b/content/docs/(functions)/Image/imageUseFont.mdx new file mode 100644 index 00000000..f8898b87 --- /dev/null +++ b/content/docs/(functions)/Image/imageUseFont.mdx @@ -0,0 +1,53 @@ +--- +title: "$imageUseFont" +--- + +Sets the font type for text rendered on images. + +## Usage + +```cc +$imageUseFont[font name] +``` + +## Available Fonts + +You can choose from the following fonts: + +* DejaVu Serif +* DejaVu Sans Mono +* DejaVu Sans +* Courier Prime +* Lato +* Montserrat +* Open Sans +* PT Mono +* Quicksand +* Raleway +* Roboto +* Roboto Mono +* Rubik +* Space Mono +* Minecraft +* Blackout +* Motorblock + +## Font Preview + +See a preview of these fonts in the image below: + +![](https://i.imgur.com/OVSrq4l.png) + +## Example + +This example creates a 300x300 image, sets the font to "Roboto", the text color to white, the text size to 30, and then writes "Hello World" at position 20x, 50y. + + + +!!exec $imageCreate[300;300]
$imageUseFont[Roboto]
$imageTextColor[white]
$imageTextSize[30]
$imageTextFill[Hello World;20;50]
$stop[\{image:$imageOutput}] +
+ + + + +
\ No newline at end of file diff --git a/content/docs/(functions)/Image/imageWidth.mdx b/content/docs/(functions)/Image/imageWidth.mdx new file mode 100644 index 00000000..d196aef6 --- /dev/null +++ b/content/docs/(functions)/Image/imageWidth.mdx @@ -0,0 +1,35 @@ +--- +title: "$imageWidth" +--- + +Retrieves the width of an image. This function allows you to dynamically get the width of an image that has been previously loaded, referenced by its assigned name. + +## Usage + +```cc +$imageWidth[image name] +``` + +* **`image name`**: (Optional) The name of the image you want to retrieve the width from. If no name is provided, it defaults to the currently loaded image. + +## Examples + +### Example 1: Get the width of the current image + +This example shows how to get the width of the currently loaded image. + +```cc +$imageWidth +``` + +This will return the width (in pixels) of the image currently being processed. + +### Example 2: Get the width of a named image + +This example shows how to get the width of an image that was loaded and assigned the name "avatar". + +```cc +$imageWidth[avatar] +``` + +This will return the width (in pixels) of the image loaded with the name "avatar". Make sure an image was previously loaded and assigned the name "avatar" for this to work correctly. \ No newline at end of file diff --git a/content/docs/(functions)/Image/meta.json b/content/docs/(functions)/Image/meta.json new file mode 100644 index 00000000..f38cecd9 --- /dev/null +++ b/content/docs/(functions)/Image/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Image Builder functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Interaction/commandName.mdx b/content/docs/(functions)/Interaction/commandName.mdx new file mode 100644 index 00000000..d9755a8d --- /dev/null +++ b/content/docs/(functions)/Interaction/commandName.mdx @@ -0,0 +1,40 @@ +--- +title: "$commandName" +--- + +Returns the name of the slash command that triggered the current execution. + + + +This function only works within the context of a [slash command](/Trigger/slash). + + + +## Usage + +```cc +$commandName +``` + +## Example + +This example demonstrates how to use `$commandName` to display the name of the command that was executed. + +### Code + +```cc +$interactionReply[:game_die: $random[1;6]] +$interactionReply[Command ran: `$commandName`] +``` + +### Result + +![Result](https://cdn.discordapp.com/attachments/957286111250624552/1091079914133934120/image.png) + +The bot will roll a dice and then reply with the result and the name of the command used. For example, if the command was `/roll`, the bot might respond with: `:game_die: 4 Command ran: \`roll\`` + +## Related Functions + +* [Slash command](/Trigger/slash): Learn how to create and trigger slash commands. +* `$interactionReply`: Send a reply to the interaction that triggered the command. +* `$getOption`: Retrieve the value of an option provided by the user in the slash command. \ No newline at end of file diff --git a/content/docs/(functions)/Interaction/getOption.mdx b/content/docs/(functions)/Interaction/getOption.mdx new file mode 100644 index 00000000..607ab98f --- /dev/null +++ b/content/docs/(functions)/Interaction/getOption.mdx @@ -0,0 +1,35 @@ +--- +title: "$getOption" +--- + +Retrieves the value of a user-provided option from an interaction, such as a slash command. This function allows you to access the specific input a user has provided for a command option. + +## Usage + +```cc +$getOption[Option name] +``` + +**Explanation:** + +* **`$getOption`**: The function call. +* **`[Option name]`**: The *name* of the option you want to retrieve the user's input for. This name is case-sensitive and must match the option name defined in your slash command. + +## Example + +Let's say you have a slash command with an option named "message". The following image shows an example of how a user might input a value for this option. + +![Example Slash Command Input](https://i.imgur.com/WmibgUO.png) + +In this case, the user has entered "Hello, world!" as the value for the "message" option. To retrieve this value, you would use `$getOption[message]`. + +## Output + +If you use `$getOption[message]` in the scenario above, the output would be: + +![Example Output](https://i.imgur.com/DOzUgk9.png) + +**Important Considerations:** + +* **Case Sensitivity:** The `Option name` is case-sensitive. Make sure it exactly matches the name you defined for the option in your slash command setup. +* **Interaction Type:** This function is primarily designed for use within interaction-based commands, like slash commands. \ No newline at end of file diff --git a/content/docs/(functions)/Interaction/interactionDelete.mdx b/content/docs/(functions)/Interaction/interactionDelete.mdx new file mode 100644 index 00000000..9396d699 --- /dev/null +++ b/content/docs/(functions)/Interaction/interactionDelete.mdx @@ -0,0 +1,39 @@ +--- +title: "$interactionDelete" +--- + +Deletes an interaction reply previously sent using `$interactionReply`. + +## Usage +```cc +$interactionDelete[message ID (optional, defaults to the previous interaction reply)] +``` + +
+ +**Explanation:** + +This function allows you to remove an interaction reply. If you don't specify a message ID, it will delete the most recent interaction reply sent within the command. + +**Parameters:** + +* `message ID` (Optional): The ID of the message you want to delete. If left blank, it defaults to deleting the last interaction reply sent by the bot in that command execution. + +**Example:** + +To delete the previous interaction reply: + +```cc +$interactionDelete +``` + +To delete a specific interaction reply by its ID: + +```cc +$interactionDelete[123456789012345678] +``` + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Interaction/interactionEdit.mdx b/content/docs/(functions)/Interaction/interactionEdit.mdx new file mode 100644 index 00000000..f21b4b99 --- /dev/null +++ b/content/docs/(functions)/Interaction/interactionEdit.mdx @@ -0,0 +1,46 @@ +--- +title: "$interactionEdit" +--- + +Edits a previously sent interaction, typically one created using `$interactionReply`. + +## Usage +```cc +$interactionEdit[New Message;message id (optional, defaults to the original interaction reply)] +``` + +
+ + + +This function only works within interaction-based triggers (e.g., slash commands, button clicks). Do not use it in `exec` or other trigger types. + + + +
+ + + + +```cc +$interactionreply[Hello world!;yes] +$wait[2s] +$interactionedit[Bye World!] +``` + +This example first sends an interaction reply ("Hello world!"). After a 2-second delay, it edits that same message to "Bye World!". + +![](https://cdn.discordapp.com/attachments/914682255346118687/937862286767435796/Screenshot_20220131210759.jpg) + + + + + + +You can send embeds using the [Message Curl Format](/CodeReferences/ref.message_curl_format). This allows for rich message formatting including titles, descriptions, fields, and more! + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Interaction/interactionId.mdx b/content/docs/(functions)/Interaction/interactionId.mdx new file mode 100644 index 00000000..7eecf001 --- /dev/null +++ b/content/docs/(functions)/Interaction/interactionId.mdx @@ -0,0 +1,31 @@ +--- +title: "$interactionId" +--- + +Retrieves the unique ID of an interaction (e.g., button press, menu selection). + +## Usage +```cc +$interactionId +``` + +This function returns the unique identifier associated with a user interaction like pressing a button or selecting an option from a menu. This ID can be useful for tracking or logging specific interactions. + + + + +```cc +$interactionReply[$interactionId;yes] /* Returns the interaction ID */ +``` + +This example demonstrates how to use `$interactionId` within the `$interactionReply` function to respond to the interaction while using the interaction ID. + +![](https://cdn.discordapp.com/attachments/914682255346118687/937866562159935518/unknown.jpeg) + + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Interaction/interactionReply.mdx b/content/docs/(functions)/Interaction/interactionReply.mdx new file mode 100644 index 00000000..a0fe60c1 --- /dev/null +++ b/content/docs/(functions)/Interaction/interactionReply.mdx @@ -0,0 +1,55 @@ +--- +title: "$interactionReply" +--- + +Sends a reply to an interaction (buttons, menus, slash commands). + +## Usage +```cc +$interactionReply[message; ephemeral(yes/no); return id(yes/no)] +``` + +**Parameters:** + +* `message`: The content of the reply message. +* `ephemeral(yes/no)` (Optional): Determines if the message should be ephemeral (only visible to the user who triggered the interaction). Defaults to `no` if not specified. Use `yes` for an ephemeral message. +* `return id(yes/no)` (Optional): Determines if the function should return the message ID. Defaults to `no` if not specified. + + + +Ephemeral messages are only visible to the user who triggered the interaction. Use them when you want to send a private response. To make a message ephemeral, set the `ephemeral` parameter to `yes`. + + + + + + + +```cc +$interactionReply[Hello World;yes] +``` + +This code sends an ephemeral message to the user who triggered the interaction, displaying "Hello World". + +![](https://cdn.discordapp.com/attachments/914682255346118687/937856596875313212/unknown.jpeg) + + + + + + + +This function **only** works within interaction-based trigger types (like button clicks, menu selections, and slash command executions). +If you want to reply to a regular message, use the `$reply` function or the `{reply:messageId}` tag instead. + + + + + +You can send embedded messages using the [Message Curl Format](/CodeReferences/ref.message_curl_format). This allows for richer message styling, images, and more. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Interaction/meta.json b/content/docs/(functions)/Interaction/meta.json new file mode 100644 index 00000000..e405870f --- /dev/null +++ b/content/docs/(functions)/Interaction/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Interaction Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Interaction/modal.mdx b/content/docs/(functions)/Interaction/modal.mdx new file mode 100644 index 00000000..0c38d1f2 --- /dev/null +++ b/content/docs/(functions)/Interaction/modal.mdx @@ -0,0 +1,142 @@ +--- +title: "$modal" +--- + +Used to send a modal, it must be used inside interaction like button/menu/slash triggers +## Usage +```cc +$modal[Input] +``` + +**Input** will accept this format: + +``` +{title=The modal title} +{id=The modal id} + +{input= + {name=Input name} + {id=Input id} + {ph=Input placeholder} + {def=Input Default Value} + {required=Is input required?} + {min=Minimum length of the input} + {max=Maximum length of the input} + {type=What is the type of input?} +} + +{input= + {name=Menu name} + {type=menu} + {id=menu id} + {subtitle=Menu subtitle (description)} + + {option=Option 1} + {value=option_1_id} + + {option=Option 2} + {value=option_2_id} +} + +{input= + {name=Attachment Input} + {type=attachment} + {id=input id} + {subtitle=Attachment subtitle (description)} + {min=Min number of attachments (1-10)} + {max=Max number of attachments (1-10)} + {required=yes/no} +} + +{input= + {name=Select Menu} + {type=user or role or mention or channel} + {id=menu id} + {subtitle=Menu subtitle (description)} + {selected=ID} // Prefilled ID for user/role/channel menus + {selected_user=ID} // Prefilled user ID for mention menus + {selected_role=ID} // Prefilled role ID for mention menus +} + +{input= + {name=Radio Group Name} + {type=radio} + {id=radio id} + {subtitle=Radio subtitle (description)} + {required=yes/no} + + {option=Option 1} + {value=option_1_id} + + {option=Option 2} + {value=option_2_id} +} + +{input= + {name=Checkbox Group Name} + {type=checkbox} + {id=checkbox id} + {subtitle=Checkbox subtitle (description)} + {required=yes/no} + {min=Minimum required choices (0-10)} + {max=Maximum allowed choices (1-10)} + + {option=Option 1} + {value=option_1_id} + + {option=Option 2} + {value=option_2_id} +} + +``` + +#### Notes on input properties: + +##### **required** + +must be `yes` or `no`, the default is `yes`
+ +##### **type** + +Specifies the input type for the input. + +* **`short` (Default):** A single-line text input field. +* **`long`:** A multi-line text area for longer responses. +* **`menu/user/role/mention/channel`:** A dropdown selection menu instead of a text field. +* **`attachment/attach`:** A file upload input field. +* **`radio`:** A multiple choice list where only **one** item can be selected (Min 2 options, Max 10). +* **`checkbox`:** A multiple choice list where **several** items can be checked (Min 1 option, Max 10). + +#### Max Amount of Inputs + +You can include multiple input fields, up to a maximum of 5 total (for example: 2 text inputs, 1 attachment input, and 2 radio/checkbox fields). + +### Example +#### Code +![](https://i.imgur.com/ByYr0UI.png) + +#### Output +![](https://i.imgur.com/LF7cnOK.png) + +### Example With Menu +#### Code +![](https://i.imgur.com/ClY5l4b.png) + +#### Output +![](https://i.imgur.com/chJsAth.png) + + + +This can only be used inside the [modal trigger](/Trigger/modal) + + + + + +Read more about the menu structure in [selectMenu](/Text/Components/selectMenu) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Interaction/modalAnswer.mdx b/content/docs/(functions)/Interaction/modalAnswer.mdx new file mode 100644 index 00000000..f809825f --- /dev/null +++ b/content/docs/(functions)/Interaction/modalAnswer.mdx @@ -0,0 +1,31 @@ +--- +title: "$modalAnswer" +--- + +Retrieves the value entered by a user in a modal. This function is used to access the data submitted through a modal triggered by the [`modal` trigger](/Trigger/modal). + +## Usage +```cc +$modalAnswer[Input Value;Seperator (optional)] +``` + +**Parameters:** + +* `Input Value`: The unique identifier (input value) assigned to the specific input field within the `$modal` function when the modal was created. This is how you tell the function which input field's value you want to retrieve. +* `Seperator`: In case a multiple answer provided in the modal like in a menu with 2 or more selected options, you can use this field to set the separator between them, by default it is ', '. + +**Example:** + +The following image illustrates how to use `$modalAnswer` inside the `modal` trigger to retrieve the value the user entered in the modal's input field: + +![](https://i.imgur.com/SZc3371.png) + + + +`$modalAnswer` can *only* be used within the context of the [`modal` trigger](/Trigger/modal). Attempting to use it elsewhere will result in an error or unexpected behavior. + + + +**Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Interaction/modalID.mdx b/content/docs/(functions)/Interaction/modalID.mdx new file mode 100644 index 00000000..233c638d --- /dev/null +++ b/content/docs/(functions)/Interaction/modalID.mdx @@ -0,0 +1,28 @@ +--- +title: "$modalID" +--- + +This variable returns the unique ID of the modal that activated the [modal trigger](/Trigger/modal). + +## Usage +```cc +$modalID +``` + + + +You can only use `$modalID` **within** the context of a [modal trigger](/Trigger/modal). It won't work anywhere else! + + + +**What does it do?** + +When a user interacts with something that opens a modal (like clicking a button linked to a specific modal), `$modalID` will hold the ID of that modal. You can then use this ID to perform actions specific to the modal that was opened. + +**Example:** + +Imagine you have two modals: "Contact Form" and "Subscription Form". When the "Contact Form" modal is triggered, `$modalID` will be set to something like `"contact-form-modal"`. When the "Subscription Form" is triggered, `$modalID` will be set to `"subscription-form-modal"`. + +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Member/authorAvatar.mdx b/content/docs/(functions)/Member/authorAvatar.mdx new file mode 100644 index 00000000..9281ade8 --- /dev/null +++ b/content/docs/(functions)/Member/authorAvatar.mdx @@ -0,0 +1,47 @@ +--- +title: "$authorAvatar" +--- + +Returns the avatar (profile picture) URL of the user who executed the command. + +## Usage + +```cc +$authorAvatar[serverAvatar] +``` +1. **serverAvatar** - (Optional) default value: `no`. Can be `yes` or `no`. Discord does have two types of avatars, global and per-server (custom avatar in each server). If no server avatar is set, the global avatar will be used. + +## Examples + +#### Sending avatar URL + +How is the avatar URL displayed when sent with text and without text + + + +!!exec With text: $authorAvatar + + +With text: https://cdn.discordapp.com/embed/avatars/0.png
+User Avatar +
+ +!!exec $authorAvatar + + +User Avatar + +
+ + + +You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. +To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). + + + +**Related Functions:** `$attachment` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/authorID.mdx b/content/docs/(functions)/Member/authorID.mdx new file mode 100644 index 00000000..87a2edb6 --- /dev/null +++ b/content/docs/(functions)/Member/authorID.mdx @@ -0,0 +1,32 @@ +--- +title: "$authorID" +--- + +Returns the ID of the user who executed the command. + +## Usage + +```cc +$authorID +``` + +## Example + +#### Using $authorID + +How to use $authorID + + + +!!exec My ID is $authorID + + +My ID is 123456789123456789 + + + +**Related Functions:** `$mention` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/ban.mdx b/content/docs/(functions)/Member/ban.mdx new file mode 100644 index 00000000..a9ecc952 --- /dev/null +++ b/content/docs/(functions)/Member/ban.mdx @@ -0,0 +1,58 @@ +--- +title: "$ban" +--- + +Bans a user from the server. + +## Usage + +```cc +$ban[userID;reason;messages to delete] +``` +1. **userID** - The ID of the user to ban. +2. **reason** - The reason for the ban. +3. **messages to delete** - The number of days to delete messages from this user. Maximum is 7 days, limited by Discord. + +## Examples + +#### Sucessful ban + +Successful ban with no response + + + +!!exec $ban[123456789123456789;Spamming;7] + + + +#### Unsucessful ban + +Unsuccessful ban with error message + + + +!!exec $ban[$ownerID;Just a test;0] + + +❌ bot is missing enough permissions at line 1 + + + + + +Make sure that the bot does have sufficient permission. The bot also needs to be higher in role hierarchy then the user. + + + + + +If any member who can execute the command with this function, they will be able to ban any member below the bot's highest role. +Do not place the bot's role above Admin or Head Moderator roles to avoid banning important member. + + + +**Related Functions:** `$kick` `$unban` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/blackListIDs.mdx b/content/docs/(functions)/Member/blackListIDs.mdx new file mode 100644 index 00000000..b03ba266 --- /dev/null +++ b/content/docs/(functions)/Member/blackListIDs.mdx @@ -0,0 +1,36 @@ +--- +title: "$blackListIDs" +--- + +Prevent users from using a command by blacklisting their IDs. + +## Usage + +The `$blackListIDs` function allows you to restrict access to a command for a specified list of users. If a blacklisted user attempts to use the command, the function will return a custom error message. + +```cc +$blackListIDs[userID;userID;...;error message] +``` +1. **userID** - This makes user not able to run this command. You can add as many userIDs as you want, separated with semicolon (`;`). +2. **error message** - (Optional) default value: (none). If a blacklisted user attempts to run this command, this message will be sent. If empty, no message will be sent. + +## Example + +#### Blacklisted User + +How to blacklist a user from the command + + + +!!exec $blackListIDs[$authorID;You are blacklisted from using this command!]
Message +
+ +You are blacklisted from using this command! + +
+ +**Related Functions:** `$blackListRoleIds` `$blackListChannelIDs` `$onlyForIDs` `$onlyForRoles` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/boostingSince.mdx b/content/docs/(functions)/Member/boostingSince.mdx new file mode 100644 index 00000000..2eb7b404 --- /dev/null +++ b/content/docs/(functions)/Member/boostingSince.mdx @@ -0,0 +1,46 @@ +--- +title: "$boostingSince" +--- + +Returns the date a user started boosting the server. + +## Usage + +```cc +$boostingSince[userID;date/ms] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of user to return boosting date +2. **date/ms** - (Optional) default value: `date`. If date, it will return text in this format: `Day(name), Month(name) Day(number), Year(YYYY) Hours(HH):Minutes(MM) PM/AM`. If ms, timestamp in miliseconds will be returned. You can later format the timestamp using `$formatDate`. + +## Example + +#### Using $boostingSince + +Multiple ways of using function $boostingSince + + + +!!exec $boostingSince + + +Wednesday, January 1, 2025 08:30 PM + + +!!exec $boostingSince[123456789123456789;ms] + + +1735763400000 + + +!!exec $formatDate[$boostingSince[123456789123456789;ms];MM-DD-YYYY] + + +01-01-2025 + + + +**Related Functions:** `$formatDate` `$timeToDate` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/changeNickname.mdx b/content/docs/(functions)/Member/changeNickname.mdx new file mode 100644 index 00000000..ee5a0b13 --- /dev/null +++ b/content/docs/(functions)/Member/changeNickname.mdx @@ -0,0 +1,56 @@ +--- +title: "$changeNickname" +--- + +Changes the nickname of a specified member in the server. The nickname can also be left empty to reset the member's nickname. + +## Usage: + +```cc +$changeNickname[userID;nickname;reason (optional)] +```` + +1. **userID** - The ID of the member whose nickname you want to change. +2. **nickname** - The new nickname you want to assign to the member. Leave this empty to reset the nickname. +3. **reason** - The reason for changing the nickname. This is optional. + +## Example + +### Changing a nickname + +Changing the nickname of the command author: + + + +!!exec $changeNickname[$authorID;Steve] + + +Hello + + + +### Resetting a nickname + +Leave the nickname argument empty to reset the member's nickname: + +```cc +$changeNickname[$authorID;;Reset nickname] +``` + + + +The bot requires the "Manage Nicknames" permission to change nicknames and can only change the nicknames of members with roles lower than the bot's highest role. + + + + + +Discord doesn't allow bots to change the owner's nickname. If you try to change the nickname of an invalid member or the server owner, an error message will be shown. + + + +**Related Functions:** `$nickname` + +**Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Member/discriminator.mdx b/content/docs/(functions)/Member/discriminator.mdx new file mode 100644 index 00000000..0c9c4193 --- /dev/null +++ b/content/docs/(functions)/Member/discriminator.mdx @@ -0,0 +1,39 @@ +--- +title: "$discriminator" +--- + +Returns the discriminator of the user who executed the command, or a specified member. + +## Usage: + +```cc +$discriminator[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of user you want to return the discriminator from. + +## Example + +#### Using $discriminator + +Returning a discriminator from user + + + +!!exec $discriminator + + +1234 + + + + + +This feature is deprecated because Discord switched to usernames. This function will return 0 as of the username update. This still works on bots. + + + +**Related Functions:** `$username` `$nickname` `$userTag` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/displayName.mdx b/content/docs/(functions)/Member/displayName.mdx new file mode 100644 index 00000000..70777939 --- /dev/null +++ b/content/docs/(functions)/Member/displayName.mdx @@ -0,0 +1,33 @@ +--- +title: "$displayName" +--- + +Returns the display name of a specified user. This is the name that's shown for the user in a specific server, which might be different from their global name. + +## Usage + +```cc +$displayName[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The user ID of the user you want to return display name from. + +## Example + +#### Using $displayName + +How to return display name from author + + + +!!exec $displayName + + +User + + + +**Related Functions:** `$nickname` `$username` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/eventNewNickname.mdx b/content/docs/(functions)/Member/eventNewNickname.mdx new file mode 100644 index 00000000..c88d8d08 --- /dev/null +++ b/content/docs/(functions)/Member/eventNewNickname.mdx @@ -0,0 +1,27 @@ +--- +title: "$eventNewNickname" +--- + +Returns the new nickname of a member when their nickname is updated. Works in `On Nickname Changes` trigger. + +## Usage + +```cc +$eventNewNickname +``` + +## Example + +#### Using $eventNewNickname + +Imagine you have a Nickname Change command that logs the new nickname to a channel + +```cc +$sendMessage[User $username changed their nickname from $eventOldNickname to $eventNewNickname!] +``` + +**Related Functions:** `$username` `$eventOldNickname` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/eventOldNickname.mdx b/content/docs/(functions)/Member/eventOldNickname.mdx new file mode 100644 index 00000000..1360b810 --- /dev/null +++ b/content/docs/(functions)/Member/eventOldNickname.mdx @@ -0,0 +1,27 @@ +--- +title: "$eventOldNickname" +--- + +Returns the old nickname of a member when their nickname is updated. Works in `On Nickname Changes` trigger. + +## Usage + +```cc +$eventOldNickname +``` + +## Example + +#### Using $eventOldNickname + +Imagine you have a Nickname Change command that logs the new nickname to a channel + +```cc +$sendMessage[User $username changed their nickname from $eventOldNickname to $eventNewNickname!] +``` + +**Related Functions:** `$username` `$eventNewNickname` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/findMember.mdx b/content/docs/(functions)/Member/findMember.mdx new file mode 100644 index 00000000..7e620a14 --- /dev/null +++ b/content/docs/(functions)/Member/findMember.mdx @@ -0,0 +1,56 @@ +--- +title: "$findMember" +--- + +Searches for a user in the current server by their nickname, ID, mention, username, or username with discriminator. Returns userID of the found user. + +## Usage: + +```cc +$findMember[query;returnCurrentUser] +``` +1. **query** - Can be userID, nickname, mention, username, username#descriminator. +2. **returnCurrentUser** - (Optional) default value: `yes`. Can be either `yes` or `no`. If this is set to yes, when user is not found, it will return $authorID. If it's no, and user is not found, it will return undefined. + +## Example + +#### Successful search + +Searching for existing user + + + +!!exec $findMember[user2;no] + + +123456789123456789 + + + +#### Unsuccessful search + +Searching for invalid user + + + +!!exec $findMember[user123;no] + + +undefined + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$userID` `$authorID` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/getUserBadges.mdx b/content/docs/(functions)/Member/getUserBadges.mdx new file mode 100644 index 00000000..cd56c5c6 --- /dev/null +++ b/content/docs/(functions)/Member/getUserBadges.mdx @@ -0,0 +1,39 @@ +--- +title: "$getUserBadges" +--- + +Returns the Discord badges from specified user. If none found, returns `none`. If found multiple, separated by `, `. + +## Usage + +```cc +$getUserBadges[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. Which user to return badges from. + +## Example + +#### Using $getUserBadges + +How to return badges from command author + + + +!!exec $getUserBadges + + +Active Developer + + + + + +Not all badges are 100% guranteed. + + + +**Related Functions:** `$userBanner` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/globalName.mdx b/content/docs/(functions)/Member/globalName.mdx new file mode 100644 index 00000000..a5c86a08 --- /dev/null +++ b/content/docs/(functions)/Member/globalName.mdx @@ -0,0 +1,33 @@ +--- +title: "$globalName" +--- + +Returns the global name of the user + +## Usage + +```cc +$globalName[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The user ID of the user you want to return global name from. + +## Example + +#### Using $globalName + +How to return the global name from author + + + +!!exec $globalName + + +User + + + +**Related Functions:** `$displayName` `$nickname` `$username` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/hasAnyPerm.mdx b/content/docs/(functions)/Member/hasAnyPerm.mdx new file mode 100644 index 00000000..3c04764f --- /dev/null +++ b/content/docs/(functions)/Member/hasAnyPerm.mdx @@ -0,0 +1,46 @@ +--- +title: "$hasAnyPerm" +--- + +Checks if a user has one of the given permissions. Returns `true` or `false`. + +## Usage + +```cc +$hasAnyPerm[userID;permission1;permission2;...] +``` +1. **userID** - (Optional) default value: `$authorID`. If not included or left empty, $authorID will be used. +2. **permission N** - You can add as many permissions as needed. The available permissions are here: [Permissions List](/CodeReferences/ref.permissions_list). + +## Example + +#### Using $hasAnyPerm + +How to use $hasAnyPerm without user argument. Keep in mind that if the user does have only one of listed permissions, true will be returned. + + + +!!exec I have managechannels OR manageroles permission: $hasAnyPerm[managechannels;manageroles] + + +I have managechannels OR manageroles permission: true + + +!!exec I have managechannels permission: $hasAnyPerm[managechannels], I have manageroles permission: $hasAnyPerm[manageroles] + + +I have managechannels permission: true, I have manageroles permission: false + + + + + +To make code stop if the user doesn't have the needed permission, you can check out `$onlyIf`. For multiple actions, check `$if`. + + + +**Related Functions:** `$hasPerms` `$hasAnyRole` `$hasRole` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/hasAnyRole.mdx b/content/docs/(functions)/Member/hasAnyRole.mdx new file mode 100644 index 00000000..d3421f2e --- /dev/null +++ b/content/docs/(functions)/Member/hasAnyRole.mdx @@ -0,0 +1,46 @@ +--- +title: "$hasAnyRole" +--- + +Checks if a user has one of the given roles. Returns `true` or `false`. + +## Usage + +```cc +$hasAnyRole[userID;roleID1;roleID2;...] +``` +1. **userID** - (Optional) default value: `$authorID`. If not included or left empty, $authorID will be used. +2. **role N** - You can add as many roles as needed. + +## Example + +#### Using $hasAnyRole + +How to use $hasAnyRole without user argument. Keep in mind that if the user does have only one of listed roles, true will be returned. + + + +!!exec I have Admin OR Manager role: $hasAnyRole[admin;manager] + + +I have Admin OR Manager role: true + + +!!exec I have Admin role: $hasAnyRole[admin], I have Manager role: $hasAnyRole[manager] + + +I have Admin role: true, I have Manager role: false + + + + + +To make code stop if the user doesn't have the needed role, you can check out `$onlyIf`. For multiple actions, check `$if`. + + + +**Related Functions:** `$hasPerms` `$hasAnyPerm` `$hasRole` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/hasPerms.mdx b/content/docs/(functions)/Member/hasPerms.mdx new file mode 100644 index 00000000..81f049cc --- /dev/null +++ b/content/docs/(functions)/Member/hasPerms.mdx @@ -0,0 +1,40 @@ +--- +title: "$hasPerms" +--- + +Checks if user has all of the given permissions. Returns `true` or `false`. + +## Usage: + +```cc +$hasPerms[userID;perm1;perm2;...] +``` +1. **userID** - User you want to check for permissions. +2. **perm N** - You can add as many permissions as needed. The available permissions are here: [Permissions List](/CodeReferences/ref.permissions_list). + +## Example + +#### Using $hasPerms + +How to use $hasPerms. Keep in mind that only if the user does have all of listed permissions, true will be returned. + + + +!!exec $hasPerms[$authorID;sendmessages] + + +true + + + + + +To make code stop if the user doesn't have the needed permission, you can check out `$onlyIf`. For multiple actions, check `$if`. + + + +**Related Functions:** `$hasAnyPerm` `$hasAnyRole` `$hasRole` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/hasRoles.mdx b/content/docs/(functions)/Member/hasRoles.mdx new file mode 100644 index 00000000..de00a417 --- /dev/null +++ b/content/docs/(functions)/Member/hasRoles.mdx @@ -0,0 +1,40 @@ +--- +title: "$hasRoles" +--- + +Checks if user has all of the given roles. Returns `true` or `false`. + +## Usage: + +```cc +$hasRoles[userID;role1;role2;...] +``` +1. **userID** - User you want to check for roles. +2. **role N** - You can add as many roles as needed. + +## Example + +#### Using $hasRoles + +How to use $hasRoles. Keep in mind that only if the user does have all of listed roles, true will be returned. + + + +!!exec $hasRoles[$authorID;123456789123456789] + + +true + + + + + +To make code stop if the user doesn't have the needed role, you can check out `$onlyIf`. For multiple actions, check `$if`. + + + +**Related Functions:** `$hasAnyPerm` `$hasPerms` `$hasAnyRole` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/hasUpvoted.mdx b/content/docs/(functions)/Member/hasUpvoted.mdx new file mode 100644 index 00000000..e7f3ab11 --- /dev/null +++ b/content/docs/(functions)/Member/hasUpvoted.mdx @@ -0,0 +1,42 @@ +--- +title: "$hasUpvoted" +--- + +Checks whether a user has upvoted the current server within the last 12 hours. + +## Usage + +```cc +$hasUpvoted[userID (optional)] +```` + +This function accepts one optional argument: + +* **userID** - The ID of the user to check. If omitted, the user who triggered the command is used. + +The function returns `true` if the user has upvoted the current server within the last 12 hours. Otherwise, it returns `false`. + +## Example + +#### Checking the command author's upvote status + + + +!!exec $hasUpvoted + + +true + + + +#### Checking a specific user + +```cc +$hasUpvoted[123456789012345678] +``` + +**Related Functions:** `$onlyForUpvoters` + +**Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Member/isBanned.mdx b/content/docs/(functions)/Member/isBanned.mdx new file mode 100644 index 00000000..ba870f75 --- /dev/null +++ b/content/docs/(functions)/Member/isBanned.mdx @@ -0,0 +1,33 @@ +--- +title: "$isBanned" +--- + +Checks if a user is banned from the guild. Returns `true` or `false`. + +## Usage + +```cc +$isBanned[userID] +``` +1. **userID** - The ID of the user to check if it's banned. + +## Example + +#### Using $isBanned + +How to use $isBanned + + + +!!exec $isBanned[123456789123456789] + + +false + + + +**Related Functions:** `$kick` `$ban` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/isUserDMEnabled.mdx b/content/docs/(functions)/Member/isUserDMEnabled.mdx new file mode 100644 index 00000000..21c336e5 --- /dev/null +++ b/content/docs/(functions)/Member/isUserDMEnabled.mdx @@ -0,0 +1,33 @@ +--- +title: "$isUserDMEnabled" +--- + +This function checks if a user has direct messages (DMs) enabled. It returns `true` if DMs are enabled, and `false` if not. + +## Usage + +```cc +$isUserDMEnabled[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of the user you want to check. + +## Example + +#### Using $isUserDMEnabled + +How to use $isUserDMEnabled + + + +!!exec $isUserDMEnabled[123456789123456789] + + +true + + + +**Related Functions:** `$dm` `$sendDM` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/kick.mdx b/content/docs/(functions)/Member/kick.mdx new file mode 100644 index 00000000..de97a21c --- /dev/null +++ b/content/docs/(functions)/Member/kick.mdx @@ -0,0 +1,58 @@ +--- +title: "$kick" +--- + +Kicks a user from the server. + +## Usage + +```cc +$kick[userID;reason] +``` +1. **userID** - The ID of the user to kick. +2. **reason** - (Optional) The reason for kick. You can see this in Audit Log. + +## Example + +#### Successful kick + +Successfull kick with no response + + + +!!exec $kick[123456789123456789;Spamming] + + + +#### Unsucessful kick + +Unsuccessful kick with error message + + + +!!exec $kick[$ownerID;Spamming] + + +❌ bot is missing enough permissions at line 1 + + + + + +The most common reason is that the bot's role is lower in the role hierarchy than the member you are trying to ban. +Discord doesn't allow members and bots from kicking members with a higher or equal highest role. Ensure the bot's highest role is above the target user. + + + + + +If any member who can execute the command with this function, they will be able to kick any member below the bot's highest role. +Do not place the bot's role above Admin or Head Moderator roles to avoid kicking important member. + + + +**Related Functions:** `$ban` `$unban` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/memberSearch.mdx b/content/docs/(functions)/Member/memberSearch.mdx new file mode 100644 index 00000000..d8c83fc5 --- /dev/null +++ b/content/docs/(functions)/Member/memberSearch.mdx @@ -0,0 +1,66 @@ +--- +title: "$memberSearch" +--- + +Search for members with username or nickname in the server and get their information + +## Usage + +```cc +$memberSearch[username/nickname;amount to return (Default is 1);separator (Default is ,);info to return (Default is id)] +``` + +### Info To Return: +By default it is `id`, but you can pick from: + +* `id`: to return the found user id\ +* `username`: to return the found user's username\ +* `nickname`: to return the found user's nickname in the server\ +* `name`: to return the found user's display name in the server +> You can also use combination of them, like `name (id)` to be replaced with `Mido (12345678901234567)` + +> You can know more information about the user with the use of `$user` + +### Amount to Return: +It determines how many users it will return if they match the query, by default it is 1 +> When multiple user returned, they will merged together with the `separator` + +### Example (Search and member is found): + + +!!exec $memberSearch[mido.dev]

+
+ +788361834360864808

+
+
+ +### Example (Search and multiple members are found): + + +!!exec $memberSearch[A;5;, ;name]

+
+ +Alpha, Alight, A living legend, A story in life

+
+
+ +### Example (Search but member is not found): + + +!!exec $memberSearch[bad.dev]

+
+ +
+
+
+ +### Example (Search and use the user id to retrieve join date): + + +!!exec $let[user_id;$memberSearch[mido.dev]]
Mido joined the server at: $memberJoinedDate[$user_id]

+
+ +Mido joined the server at: Wed Mar 09 2022 22:06:21 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Member/membersWithStatus.mdx b/content/docs/(functions)/Member/membersWithStatus.mdx new file mode 100644 index 00000000..6b999f16 --- /dev/null +++ b/content/docs/(functions)/Member/membersWithStatus.mdx @@ -0,0 +1,56 @@ +--- +title: "$membersWithStatus" +--- + +Returns a list of member IDs who have specified status within the server separated by comma. + +## Usage + +```cc +$membersWithStatus[Status1;Status2;...] +``` +1. **Status N** - You can add multiple statuses. Can be `online`, `idle`, `dnd` (Do Not Disturb), `offline` (Includes invisible users), `streaming` (only valid for activities), `mobile` (only valid for platforms), `desktop` (only valid for platforms), `web` (only valid for platforms) + +## Example + +#### Single status in $membersWithStatus + +How to use $membersWithStatus with one status specified + + + +!!exec $membersWithStatus[online] + + +123456789123456789,987654321987654321 + + + +#### Multiple statuses in $membersWithStatus + +How to use $membersWithStatus with multiple statuses specified + + + +!!exec $membersWithStatus[online;idle] + + +123456789123456789,987654321987654321,765432198765432198 + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$status` + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Member/mention.mdx b/content/docs/(functions)/Member/mention.mdx new file mode 100644 index 00000000..0f2e4739 --- /dev/null +++ b/content/docs/(functions)/Member/mention.mdx @@ -0,0 +1,35 @@ +--- +title: "$mention" +--- + +Returns a mention of a user. + +## Usage + +```cc +$mention[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of user to get mentioned. + +## Example + +#### Using $mention + +How to use $mention for author or other user + + + +!!exec Me: $mention
+Other user: $mention[123456789123456789] +
+ +Me: User
+Other user: Other User +
+
+ +**Related Functions:** `$username` `$nickname` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/meta.json b/content/docs/(functions)/Member/meta.json new file mode 100644 index 00000000..7fdfb4f0 --- /dev/null +++ b/content/docs/(functions)/Member/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Member Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Member/moveUser.mdx b/content/docs/(functions)/Member/moveUser.mdx new file mode 100644 index 00000000..53f71008 --- /dev/null +++ b/content/docs/(functions)/Member/moveUser.mdx @@ -0,0 +1,48 @@ +--- +title: "$moveUser" +--- + +Moves a user to a different voice channel, or disconnects them from their current voice channel. + +## Usage + +```cc +$moveUser[userID;channelID;reason] +``` +1. **userID** - The ID of user to be moved. +2. **channelID** - (Optional) default: disconnect user. The channel where to move the user. If none provided, the user will be disconnected. +3. **reason** - (Optional) default value: (empty). Reason for move or disconnect. You can see this in Audit Log. + +## Examples + +#### Moving user to a channel + +How to move user to another channel + + + +!!exec $moveUser[123456789123456789;123456789987654321;AFK] + + + +#### Disconnecting user from a channel + +How to diconnect user from a channel + + + +!!exec $moveUser[123456789123456789;;AFK] + + + + + +Make sure that the bot does have enough permission to move or disconnect members. The bot also needs to be higher in the role hierarchy. + + + +**Related Functions:** `$vcBefore` `$vcAfter` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/muteUser.mdx b/content/docs/(functions)/Member/muteUser.mdx new file mode 100644 index 00000000..084de81e --- /dev/null +++ b/content/docs/(functions)/Member/muteUser.mdx @@ -0,0 +1,48 @@ +--- +title: "$muteUser" +--- + +Mutes or unmutes a user in a voice channel. + +## Usage + +```cc +$muteUser[userID;mute;reason] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of user to mute +2. **mute** - Can be `yes` or `no`. Yes for mute, no for unmute. +3. **reason** - (Optional) default value: `Muted by CC command` if mute is yes, `UnMuted by CC command` if mute is no. Reason for mute/unmute. You can see this in Audit Log. + +## Example + +#### Muting a member + +How to mute a member with reason + + + +!!exec $muteUser[123456789123456789;yes;AFK] + + + +#### Unmuting a member + +How to unmute a member with reason + + + +!!exec $muteUser[123456789123456789;no;Not AFK] + + + + + +Make sure that the bot does have enough permission to mute or unmute members. The bot also needs to be higher in the role hierarchy. + + + +**Related Functions:** `$vcBefore` `$vcAfter` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/nickname.mdx b/content/docs/(functions)/Member/nickname.mdx new file mode 100644 index 00000000..cf707222 --- /dev/null +++ b/content/docs/(functions)/Member/nickname.mdx @@ -0,0 +1,33 @@ +--- +title: "$nickname" +--- + +Returns the nickname of the user or the display name if you specified the 2nd input + +## Usage + +```cc +$nickname[User ID;Return Display name if no nickname exists (yes/no, default is no)] +``` +1. **User ID** - (Optional) default value: `$authorID`. The ID of user to return nickname from. + +## Example + +#### Using $nickname + +How to use $nickname + + + +!!exec $nickname + + +ImUser + + + +**Related Functions:** `$changeNickname` `$username` `$discriminator` `$userTag` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/status.mdx b/content/docs/(functions)/Member/status.mdx new file mode 100644 index 00000000..9c823964 --- /dev/null +++ b/content/docs/(functions)/Member/status.mdx @@ -0,0 +1,41 @@ +--- +title: "$status" +--- + +
+ +Returns the status of a user. Can be `online`, `offline`, `idle` or `dnd`. + +## Usage + +```cc +$status[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of user to return the status from. + +## Example + +#### Using $status + +How to use $status + + + +!!exec $status + + +online + + + + + +This function requires the Presence Intent to be enabled. You can change that in Discord Developer Portal under your Bot settings. + + + +**Related Functions:** `$membersWithStatus` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/unban.mdx b/content/docs/(functions)/Member/unban.mdx new file mode 100644 index 00000000..7297a874 --- /dev/null +++ b/content/docs/(functions)/Member/unban.mdx @@ -0,0 +1,37 @@ +--- +title: "$unban" +--- + +Unbans a user from the server. + +## Usage + +```cc +$unban[userID/username;reason] +``` +1. **userID/username** - The ID or username of user to unban. +2. **reason** - (Optional) default value: (none). The reason for the unban. You can see this in Audit Log. + +## Example + +#### Using $unban + +How to unban user with a reason + + + +!!exec $unban[123456789123456789;Appeal successful] + + + + + +Make sure that the bot does have sufficient permission. + + + +**Related Functions:** `$kick` `$ban` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/upvoteReferralUserID.mdx b/content/docs/(functions)/Member/upvoteReferralUserID.mdx new file mode 100644 index 00000000..b2ab4013 --- /dev/null +++ b/content/docs/(functions)/Member/upvoteReferralUserID.mdx @@ -0,0 +1,21 @@ +--- +title: "$upvoteReferralUserID" +--- + +Returns the ID of the user whose referral link was used for the current upvote. + +## Usage + +```cc +$upvoteReferralUserID +``` + +This function is only available in the **On Upvote** trigger. + +If the vote was not made using a referral link, 'unknown' value is returned. + + + +This function will behave like `$clientID` if the upvote command is triggered by `!!emit upvote` + + \ No newline at end of file diff --git a/content/docs/(functions)/Member/user.mdx b/content/docs/(functions)/Member/user.mdx new file mode 100644 index 00000000..2120b6b3 --- /dev/null +++ b/content/docs/(functions)/Member/user.mdx @@ -0,0 +1,57 @@ +--- +title: "$user" +--- + +Retrieve an information about user given his user id, like his username. + +Multiple options to retrive informations from user. + +## Usage +```cc +$user[userID;option] +``` + +#### Supported Option List +| Property | Description | +|:-----------:|-------------| +| name | username | +| id | user ID | +| tag | user Tag | +| discrim | user discriminator | +| mention | user mention | +| avatar | user avatar URL | +| ms | Returns accounts creation time in miliseconds like 1735763400000 | +| isbot | user is a bot, returns true/false | +| lastmessagechannelid | Returns users last messages channel ID | +| lastmessageid | Returns users last messages ID | +| banner | return the user banner, undefined is returned if not found (user must be cached) | +| created | user account date and time of creation | +| timestamp | creation timestamp of user account | +| displayname | user display name if exists, otherwise username | +| globalname | user global name | +| clantag | user equipped clan tag if exists | +| clantagserver | Server id of the user equipped clan tag if exists | +| clantagicon | Icon URL of the user equipped clan tag if exists | + + +## Example + +#### Using $user + +How to show user account creation date + + + +!!exec $user[;created] + + +Wednesday, January 1, 2025 08:30 PM + + + + +**Related Functions:** `$nickname` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userAvatar.mdx b/content/docs/(functions)/Member/userAvatar.mdx new file mode 100644 index 00000000..7e735097 --- /dev/null +++ b/content/docs/(functions)/Member/userAvatar.mdx @@ -0,0 +1,49 @@ +--- +title: "$userAvatar" +--- + +Returns the avatar (profile picture) URL of the user who was specified. + +## Usage +```cc +$userAvatar[userID;size;dynamic;serverAvatar] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return avatar URL from. +2. **size** - (Optional) default value: `2048`. The size of user avatar to return in pixels. +3. **dynamic** - (Optional) default value: `yes`. Can be `yes` or `no`. If yes, animated avatar URL will be returned (if they have animated). If no, static image will be returned. +4. **serverAvatar** - (Optional) default value: `no`. Can be `yes` or `no`. Discord does have two types of avatars, global and per-server (custom avatar in each server). If no server avatar is set, the global avatar will be used. + +## Examples + +#### Sending avatar URL + +How is the avatar URL displayed when sent with text and without text + + + +!!exec With text: $userAvatar + + +With text: https://cdn.discordapp.com/embed/avatars/0.png
+User Avatar +
+ +!!exec $userAvatar + + +User Avatar + +
+ + + +You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. +To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). + + + +**Related Functions:** `$attachment` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userBanner.mdx b/content/docs/(functions)/Member/userBanner.mdx new file mode 100644 index 00000000..6b4df8d1 --- /dev/null +++ b/content/docs/(functions)/Member/userBanner.mdx @@ -0,0 +1,60 @@ +--- +title: "$userBanner" +--- + +Returns the banner URL of a user. + +## Usage + +```cc +$userBanner[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return banner URL from. If no banner is found, returns `undefined`. + +## Example + +#### Banner is available + +How is the banner URL displayed when sent with text and without text + + + +!!exec With text: $userBanner + + +With text: https://cdn.discordapp.com/banners/287135364127129601/a_0c1e74ef99e35d10f868bd839066e022.png
+User Banner +
+ +!!exec $userBanner + + +User Banner + +
+ +#### Banner is not available + +What shows when user does not have banner + + + +!!exec $userBanner + + +undefined + + + + + +You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. +To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). + + + +**Related Functions:** `$attachment` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userConnectedVC.mdx b/content/docs/(functions)/Member/userConnectedVC.mdx new file mode 100644 index 00000000..20110219 --- /dev/null +++ b/content/docs/(functions)/Member/userConnectedVC.mdx @@ -0,0 +1,46 @@ +--- +title: "$userConnectedVC" +--- + +Returns the ID of a voice channel the user is currently connected to. + +## Usage + +```cc +$userConnectedVC[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return voice channel they are connected to. + +## Example + +#### Is connected to a voice channel + +What happens if user is connected to a voice channel + + + +!!exec $userConnectedVC + + +123456789987654321 + + + +#### Is not connected to a voice channel + +What happens if user is not connected to a voice channel + + + +!!exec $userConnectedVC + + +undefined + + + +**Related Functions:** `$vcBefore` `$vcAfter` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userExists.mdx b/content/docs/(functions)/Member/userExists.mdx new file mode 100644 index 00000000..24931e09 --- /dev/null +++ b/content/docs/(functions)/Member/userExists.mdx @@ -0,0 +1,42 @@ +--- +title: "$userExists" +--- + +Checks if a user exists in the server. Returns `true` if the user exists, and `false` if not. + +## Usage + +```cc +$userExists[userID] +``` +1. **userID** - The ID of the user to check. If left empty, false will be returned. + +## Example + +#### Using $userExists + +How to use $userExists + + + +!!exec $userExists[$authorID] + + +true + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$findMember` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userID.mdx b/content/docs/(functions)/Member/userID.mdx new file mode 100644 index 00000000..5db0e1fc --- /dev/null +++ b/content/docs/(functions)/Member/userID.mdx @@ -0,0 +1,41 @@ +--- +title: "$userID" +--- + +Returns a user ID based on the given username. + +## Usage +```cc +$userID[username] +``` +1. **username** - (Optional) if not provided, $authorID will be returned. The username of a user you want to return ID of. + +## Example + +#### Using $userID + +How to use $userID + + + +!!exec $userID[user] + + +123456789123456789 + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$authorID` `$findMember` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userPerms.mdx b/content/docs/(functions)/Member/userPerms.mdx new file mode 100644 index 00000000..dde19f25 --- /dev/null +++ b/content/docs/(functions)/Member/userPerms.mdx @@ -0,0 +1,43 @@ +--- +title: "$userPerms" +--- + +Returns a list of permissions a user has across the server based on their roles. + +## Usage + +```cc +$userPerms[userID;separator] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return permissions from. +2. **separator** - (Optional) default value: `, `. The separator used for creating permission list. + +## Example + +#### Using $userPerms + +How to use $userPerms + + + +!!exec $userPerms[;/] + + +View Channel/Send Messages/Mention Everyone + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$rolePerms` `$hasPerms` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userReacted.mdx b/content/docs/(functions)/Member/userReacted.mdx new file mode 100644 index 00000000..a74e4b14 --- /dev/null +++ b/content/docs/(functions)/Member/userReacted.mdx @@ -0,0 +1,48 @@ +--- +title: "$userReacted" +--- + +Checks if a user has reacted to a message with the given emoji. Returns `true` or `false`. + +## Usage + +```cc +$userReacted[channelID;messageID;userID;reaction] +``` +1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to check reaction in. +2. **messageID** - (Optional) default value: `$messageID`. The ID of a message you want to check reaction on. +3. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to check from if they reacted. +4. **reaction** - The emoji you want to check if user reacted with. For custom emojis, you can use their ID, which can be found when you send it into any channel with a backslash before it. + +## Example + +#### Using $userReacted + +How to use $userReacted + + + +!!exec $wait[5s] $userReacted[;;;DogSmile] + + + + + +true + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$getMessageReactions` `$getReactionCount` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userRoleColor.mdx b/content/docs/(functions)/Member/userRoleColor.mdx new file mode 100644 index 00000000..e573105e --- /dev/null +++ b/content/docs/(functions)/Member/userRoleColor.mdx @@ -0,0 +1,42 @@ +--- +title: "$userRoleColor" +--- + +Returns the hex color code of the users highest role. + +## Usage + +```cc +$userRoleColor[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return top role color from. + +## Example + +#### Using $userRoleColor + +How to use $userRoleColor + + + +!!exec $userRoleColor + + +#d6e0ff + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$userRoles` + +**Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userRoles.mdx b/content/docs/(functions)/Member/userRoles.mdx new file mode 100644 index 00000000..6f0562f9 --- /dev/null +++ b/content/docs/(functions)/Member/userRoles.mdx @@ -0,0 +1,44 @@ +--- +title: "$userRoles" +--- + +Returns the list of roles from a user. + +## Usage + +```cc +$userRoles[userID;type;separator] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return roles from. +2. **type** - (Optional) default value: `names`. Can be `ids`, `names` or `mentions`. What format of returned roles do you want. +3. **separator** - (Optional) default value: `, `. The separator used for creating roles list. + +## Example + +#### Using $userRoles + +How to return roles from message author + + + +!!exec $userRoles[;ids;/] + + +123456789987654321/123456789123456789 + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$hasRoles` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/userTag.mdx b/content/docs/(functions)/Member/userTag.mdx new file mode 100644 index 00000000..f1e3a972 --- /dev/null +++ b/content/docs/(functions)/Member/userTag.mdx @@ -0,0 +1,39 @@ +--- +title: "$userTag" +--- + +Returns the username and tag (discriminator) of a user. + +## Usage + +```cc +$userTag[userID] +``` +1. **userID** - (Opional) default value: `$authorID`. The ID of a user you want to return username and tag from. + +## Example + +#### Using $userTag + +How to use $userTag + + + +!!exec $userTag + + +user#1234 + + + + + +This feature is deprecated because Discord switched to usernames. This function will return only username as of the username update. This still works on bots. + + + +**Related Functions:** `$nickname` `$discriminator` `$username` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/username.mdx b/content/docs/(functions)/Member/username.mdx new file mode 100644 index 00000000..29d4a27d --- /dev/null +++ b/content/docs/(functions)/Member/username.mdx @@ -0,0 +1,42 @@ +--- +title: "$username" +--- + +Returns the username of the given user. + +## Usage + +```cc +$username[userID] +``` +1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return nickname from. + +## Example + +#### Using $nickname + +How to use $nickname + + + +!!exec $nickname + + +User + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$nickname` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/usersBanned.mdx b/content/docs/(functions)/Member/usersBanned.mdx new file mode 100644 index 00000000..26f3bd26 --- /dev/null +++ b/content/docs/(functions)/Member/usersBanned.mdx @@ -0,0 +1,40 @@ +--- +title: "$usersBanned" +--- + +Returns a list of users banned from the current server. + +## Usage + +```cc +$usersBanned[type;separator] +``` +1. **type** - (Optional) default value: `username`. Can be `id`, `username` or `mention`. What format of returned users do you want. +2. **separator** - (Optional) default value: `, `. The separator used for creating the list of users. + +## Example + +#### Using $usersBanned + +How to use $usersBanned + + + +!!exec $usersBanned + + +user, user1, user2 + + + + + +Make sure that the bot does have sufficient permission. + + + +**Related Functions:** `$ban` `$unban` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/usersInChannel.mdx b/content/docs/(functions)/Member/usersInChannel.mdx new file mode 100644 index 00000000..ca9fef96 --- /dev/null +++ b/content/docs/(functions)/Member/usersInChannel.mdx @@ -0,0 +1,44 @@ +--- +title: "$usersInChannel" +--- + +Returns a list of users in given text or voice channel. + +## Usage + +```cc +$usersInChannel[channelID;type;separator] +``` +1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to return list of users from. +2. **type** - (Optional) default value: `username`. Can be `id`, `username`, `mention` or `count`. +3. **separator** - (Optional) default value: `, `. The separator used for creating list of users. + +## Example + +#### Using $usersInChannel + +How to use $usersInChannel + + + +!!exec $usersInChannel + + +user, user1, user2 + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$usersWithRole` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/usersTyping.mdx b/content/docs/(functions)/Member/usersTyping.mdx new file mode 100644 index 00000000..741668b6 --- /dev/null +++ b/content/docs/(functions)/Member/usersTyping.mdx @@ -0,0 +1,42 @@ +--- +title: "$usersTyping" +--- + +Returns a list of users currently typing in a channel. If no users are typing, returns an empty string. + +## Usage + +```cc +$usersTyping[channelID;type;separator] +``` +1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to check users typing in. +2. **type** - (Optional) default value: `username`. Can be `username`, `tag` or `mention`. +3. **separator** - (Optional) default value: `, `. The separator used for creating list with users. + +## Example + +#### Using $usersTyping + +How to use $usersTyping + + + +!!exec $usersTyping + + +user, user1, user2 + + + + + +The bot needs the "Read Messages/View Channels" permission in the given channel to be able to see who is typing. +Rate limits may apply if this function is used excessively. + + + +**Related Functions:** `$usersInChannel` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Member/usersWithRole.mdx b/content/docs/(functions)/Member/usersWithRole.mdx new file mode 100644 index 00000000..ce049bf1 --- /dev/null +++ b/content/docs/(functions)/Member/usersWithRole.mdx @@ -0,0 +1,44 @@ +--- +title: "$usersWithRole" +--- + +Returns a list of users who have the given role. + +## Usage + +```cc +$usersWithRole[roleID;separator;type] +``` +1. **roleID** - (Optional) default value: (users without any roles). The ID of a role you want to retrive users with. +2. **separator** - (Optional) default value: `#NL#` (newline). The separator used for creating user list. +3. **type** - (Optional) default value: `tag`. Can be `tag`, `username`, `id` or `mention`. + +## Example + +#### Using $usersWithRole + +How to use $usersWithRole + + + +!!exec $usersWithRole[;, ;username] + + +user, user1, user2 + + + + + +This function works on the bot's cache to find members. +If the user is not cached, the function will not find them. +User will be cached after they trigger any command from this bot, but eventually they will get deleted.
+To have all members cached, you will need Tier 5 Bot. + +
+ +**Related Functions:** `$userRoles` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/addCmdReactions.mdx b/content/docs/(functions)/Message/addCmdReactions.mdx new file mode 100644 index 00000000..0cc35857 --- /dev/null +++ b/content/docs/(functions)/Message/addCmdReactions.mdx @@ -0,0 +1,37 @@ +--- +title: "$addCmdReactions" +--- + +Reacts to the user's message with multiple emojis. + +This function allows you to add multiple reactions to the message that triggered the command. + +## Usage +```cc +$addCmdReactions[emoji1;emoji2;...] +``` + +**Parameters:** + +* `emoji1;emoji2;...`: A semicolon-separated list of emojis to add as reactions. You can use standard emojis (e.g., 😀, 🤪) or custom emojis (if the bot has access to them). + +
+ + + + +This example adds a checkmark and a cross emoji as reactions to the user's command message. + +```cc +$addCmdReactions[✅;❌] +``` + +![](https://cdn.discordapp.com/attachments/914682255346118687/940710840892551189/Screenshot_20220208174856.jpg) + + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/addMessageReactions.mdx b/content/docs/(functions)/Message/addMessageReactions.mdx new file mode 100644 index 00000000..52cce3a3 --- /dev/null +++ b/content/docs/(functions)/Message/addMessageReactions.mdx @@ -0,0 +1,33 @@ +--- +title: "$addMessageReactions" +--- + +Adds reactions (emojis) to a message by its ID. + +## Usage +```cc +$addMessageReactions[channelId;messageId;emoji;emoji;...] +``` + +* **`channelId`**: The ID of the channel where the message is located. +* **`messageId`**: The ID of the message to react to. +* **`emoji`**: The emoji(s) to add as reactions. You can specify multiple emojis separated by a semicolon (`;`). These can be standard emojis or custom emojis. + +
+ + + + +This example demonstrates adding multiple reactions to a message using its ID. + +![Example Usage](https://cdn.discordapp.com/attachments/914682255346118687/940728413315027014/Screenshot_20220208185842.jpg) + +You can use the function format `{reactions}` (formatted as `curl`) to use inside functions like `$sendMessage` to easily apply reactions. + + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/addReactions.mdx b/content/docs/(functions)/Message/addReactions.mdx new file mode 100644 index 00000000..fcdcbf91 --- /dev/null +++ b/content/docs/(functions)/Message/addReactions.mdx @@ -0,0 +1,29 @@ +--- +title: "$addReactions" +--- + +Adds reactions to the bot's response. + +## Usage +```cc +$addReactions[emoji1;emoji2;...] +``` + +
+ +This function allows you to add multiple reactions to the message the bot just sent. Simply list the emojis you want to use, separated by semicolons. + + + + +This example shows how to react to a message with specific emojis. + +![Example of $addReactions usage](https://cdn.discordapp.com/attachments/914682255346118687/940730743804551198/Screenshot_20220208190803.jpg) + + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/argsCheck.mdx b/content/docs/(functions)/Message/argsCheck.mdx new file mode 100644 index 00000000..b083351b --- /dev/null +++ b/content/docs/(functions)/Message/argsCheck.mdx @@ -0,0 +1,58 @@ +--- +title: "$argsCheck" +--- + +This function checks if the user has provided the correct number of arguments. It's useful for ensuring your commands receive the expected input. + +## How it Works + +`$argsCheck` verifies if the number of arguments provided by the user matches the required amount. You specify the expected number of arguments and an optional error message. If the user provides an incorrect number of arguments, the error message is sent (if provided) and the bot will stop executing further code in that command. + +## Syntax + +```cc +$argsCheck[(>//none)**: This specifies the type of comparison. Choose one of the following: + * `<`: Less than the specified `number`. + * `>`: Greater than the specified `number`. + * `none`: (optional - if omitted, this is the default). Equal to the specified `number`. Using no comparator means it expects *exactly* the specified number of arguments. +* **number**: A positive integer representing the expected number of arguments. +* **error message**: (Optional) The message to send to the user if the argument check fails. If omitted, no message is sent. + +## Examples + +**1. Checking for Exactly 2 Arguments:** + +```cc +$argsCheck[2;Please provide two arguments.] +``` + +This checks if the user provides exactly two arguments. If not, it sends the message "Please provide two arguments." + +**2. Checking for More Than 1 Argument:** + +```cc +$argsCheck[>1;You need to provide at least two arguments!] +``` + +This ensures the user provides more than one argument (e.g., 2, 3, 4, etc.). If the user provides only one or no arguments, it sends "You need to provide at least two arguments!". + +**3. Checking for Less Than 3 Arguments:** + +```cc +$argsCheck[<3;Please provide fewer than three arguments.] +``` + +This checks if the user provides less than three arguments (e.g., 0, 1, or 2 arguments). If the user provides three or more arguments, it sends "Please provide fewer than three arguments." + +**4. Checking for Exactly 1 Argument with No Error Message:** + +```cc +$argsCheck[1;] +``` + +This checks if the user provides exactly one argument. If not, the script will halt, but no error message will be sent to the user. \ No newline at end of file diff --git a/content/docs/(functions)/Message/argsCount.mdx b/content/docs/(functions)/Message/argsCount.mdx new file mode 100644 index 00000000..612f467c --- /dev/null +++ b/content/docs/(functions)/Message/argsCount.mdx @@ -0,0 +1,11 @@ +--- +title: "$argsCount" +--- + +This function returns the number of arguments a user has provided to your bot's command. It's useful for validating if the correct number of arguments has been given. + +## Usage + +```cc +$argsCount +``` diff --git a/content/docs/(functions)/Message/awaitMessage.mdx b/content/docs/(functions)/Message/awaitMessage.mdx new file mode 100644 index 00000000..b555422f --- /dev/null +++ b/content/docs/(functions)/Message/awaitMessage.mdx @@ -0,0 +1,55 @@ +--- +title: "$awaitMessage" +--- + +The `$awaitMessage` function allows your bot to wait for a specific user's message or any message within a channel and then retrieve the message ID or content. + +## Usage + +```cc +$awaitMessage[message;userid / everyone;timeout;return message ID instead of content] +``` + +**Parameters:** + +* **`message` (Optional):** The message the bot will send to prompt the user for input. If omitted, no message will be sent. +* **`userid / everyone` (Optional, Default: `everyone`):** Specifies who the bot should listen for. + * `userid`: A specific user's ID. The bot will only respond to messages from this user. + * `everyone`: The bot will respond to any message in the channel. +* **`timeout`:** The maximum time the bot will wait for a message (e.g., `10s`). If no message is received within the timeout period, the function will return `undefined`. +* **`return message ID instead of content`:** Determines what the function returns. Accepts `yes` or `no`. + * `yes`: Returns the message ID of the user's reply. + * `no`: Returns the content of the user's reply (default). + +**Return Value:** + +Returns the user's reply (content or ID, based on the `return message ID` parameter) or `undefined` if the timeout is reached. + +### Timeout + +The `timeout` parameter specifies how long the bot will wait for a user's message. The format is `[number][s|m|h]` (e.g., `10s` for 10 seconds, `1m` for 1 minute). + +**Important:** The maximum timeout duration is limited by the bot's tier: `60 x (bot tier + 1)` seconds. For example, a tier 3 bot has a maximum timeout of `60 * (3 + 1) = 240` seconds. + +### Example: + +This example sends the message "Are you tall?" and waits for the user who executed the command to respond. It then displays the user's answer. + +```cc +!!exec Your answer is: $awaitMessage[Are you tall?;$authorID] +``` + + + +!!exec Your answer is: $awaitMessage[Are you tall?;$authorID] + + +Are you tall? + + +YES + + +Your answer is: YES + + \ No newline at end of file diff --git a/content/docs/(functions)/Message/channelSendMessage.mdx b/content/docs/(functions)/Message/channelSendMessage.mdx new file mode 100644 index 00000000..eba7e7f9 --- /dev/null +++ b/content/docs/(functions)/Message/channelSendMessage.mdx @@ -0,0 +1,52 @@ +--- +title: "$channelSendMessage" +--- + +Sends a message to a specified channel. This function allows you to send messages to any channel your bot has access to. + +## Usage +```cc +$channelSendMessage[channelID;message;return ID (yes/no) (optional, default=no)] +``` + +| Parameter | Description | Required | Default | +|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------| +| `channelID` | The ID of the channel to send the message to. You can get this by right-clicking the channel and selecting "Copy ID" (you must have Developer Mode enabled in Discord settings). | Yes | | +| `message` | The message to send. This can be plain text, embeds, buttons, menus, or any other valid Discord message content. | Yes | | +| `return ID` | `yes` or `no`. If `yes`, the ID of the sent message will be returned. Defaults to `no`. This is useful if you need to edit or delete the message later. | No | `no` | + +
+ + +!!exec $channelSendMessage[879431439299543040;This is a fantastic message!;no] + + +This is a fantastic message! + + + +## Examples + +Here are some examples of how to use the `$channelSendMessage` function: + +### Send an Embed + +![](https://i.imgur.com/YObkPAZ.png) + +### Send a Button + +![](https://i.imgur.com/bDJ5p3a.png) + +### Send a Menu + +![](https://i.imgur.com/ApX37tb.png) + +You can send more complex messages with features like footers and fields by using the [Message Curl Format](/CodeReferences/ref.message_curl_format). This format allows for more detailed control over your messages. + + + +* `$sendMessage`: Sends a message to the channel where the command was used. + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Message/clearReaction.mdx b/content/docs/(functions)/Message/clearReaction.mdx new file mode 100644 index 00000000..b8f7fc58 --- /dev/null +++ b/content/docs/(functions)/Message/clearReaction.mdx @@ -0,0 +1,33 @@ +--- +title: "$clearReaction" +--- + +Removes a specific reaction from a message for a given user. + +## Usage +```cc +$clearReaction[channelId;messageId;userId;emoji] +``` + +**Parameters:** + +* `channelId`: The ID of the channel where the message is located. +* `messageId`: The ID of the message to remove the reaction from. +* `userId`: The ID of the user whose reaction should be removed. +* `emoji`: The emoji to remove (can be the emoji itself or the emoji ID for custom emojis). + +
+ + + + +This example shows how to remove a specific user's reaction from a message. + +![](https://cdn.discordapp.com/attachments/914682255346118687/940733866371612712/Screenshot_20220208191957.jpg) + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/clearReactions.mdx b/content/docs/(functions)/Message/clearReactions.mdx new file mode 100644 index 00000000..54e18c70 --- /dev/null +++ b/content/docs/(functions)/Message/clearReactions.mdx @@ -0,0 +1,42 @@ +--- +title: "$clearReactions" +--- + +This function allows you to clear reactions from a specific message. You can either clear all reactions or only those associated with a particular emoji. + +## Usage +```cc +$clearReactions[channelId;messageId;all/emoji] +``` + +**Arguments:** + +* `channelId`: The ID of the channel where the message is located. +* `messageId`: The ID of the message to clear reactions from. +* `all/emoji`: Specify either `all` to clear all reactions from the message, or provide the emoji itself to clear only reactions of that specific emoji. + +**Example:** + +Clearing all reactions from a message: + +```cc +$clearReactions[8372387429384729;9483749283749283;all] +``` + +Clearing only the 👍 reactions from a message: + +```cc +$clearReactions[8372387429384729;9483749283749283;👍] +``` + + + + +![](https://cdn.discordapp.com/attachments/914682255346118687/940735320889098260/Screenshot_20220208192612.jpg) + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/createWebhook.mdx b/content/docs/(functions)/Message/createWebhook.mdx new file mode 100644 index 00000000..562d861b --- /dev/null +++ b/content/docs/(functions)/Message/createWebhook.mdx @@ -0,0 +1,48 @@ +--- +title: "$createWebhook" +--- + +Creates a webhook in a specified channel. + + + +Webhooks are a simple way to send automated messages to different servers, potentially with custom user profiles. + + + + + +The bot requires the `Manage Webhooks` permission in the target channel to execute this function successfully. + + + +## Usage +```cc +$createWebhook[channelID;name;avatarURL;returnWebhookID&Token (yes/no);separator] +``` + +**Parameters:** + +* `channelID`: The ID of the channel where the webhook will be created. +* `name`: The name of the webhook. +* `avatarURL`: The URL of the avatar image for the webhook. +* `returnWebhookID&Token (yes/no)`: Specifies whether the function should return the webhook's ID and token after creation. Use `yes` to return the ID and Token, and `no` to return nothing. +* `separator`: The separator used to delimit the webhook ID and token when `returnWebhookID&Token` is set to `yes`. + +
+ + +!!exec $createWebHook[$channelid;WikiHook;https://cdn.discordapp.com/guilds/723032190719623289/users/327996784012034050/avatars/7aa9a46ad68d89c4eb8da9d39bbf7ba4.webp?size=2048;yes;/] + + +94074xx.../O_BoAW... + + + +**Example:** + +In this example, a webhook named "WikiHook" is created in the channel specified by `$channelid`. The webhook is given a specific avatar. The command then returns the webhook ID and Token, separated by `/`. + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/deleteCommand.mdx b/content/docs/(functions)/Message/deleteCommand.mdx new file mode 100644 index 00000000..17c0792d --- /dev/null +++ b/content/docs/(functions)/Message/deleteCommand.mdx @@ -0,0 +1,34 @@ +--- +title: "$deleteCommand" +--- + +deletes the user's message that triggered the command + +## Usage + +```cc +$deleteCommand[Time Delete After (optional, i.e 30s)] +``` + +### Example (Delete User Message Immediately): +```cc +$deleteCommand + + +``` + +### Example (Delete Message After Certain Time): +```cc +$deleteCommand[1m] +``` + + + +* `$deleteMessage`: Delete any message within a server. This is more flexible as it lets you target specific messages. + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/deleteIn.mdx b/content/docs/(functions)/Message/deleteIn.mdx new file mode 100644 index 00000000..56653dbe --- /dev/null +++ b/content/docs/(functions)/Message/deleteIn.mdx @@ -0,0 +1,30 @@ +--- +title: "$deleteIn" +--- + +Deletes the bot's message after a specified duration. + +## Usage +```cc +$deleteIn[time] +``` + +**Argument:** + +* `time` - The time to wait before deleting the message. This can be expressed in seconds (`s`), minutes (`m`), hours (`h`), or days (`d`). For example, `10s`, `2m`, `1h`, `1d`. + +#### Example: + +`$deleteIn[10s]` - This will delete the bot's message 10 seconds after it's sent. + + + +* `$deleteMessage`: Deletes a specific message in the server or DMs. +* `$deletecommand`: Deletes the message that triggered the command. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/deleteMessage.mdx b/content/docs/(functions)/Message/deleteMessage.mdx new file mode 100644 index 00000000..908bc0f8 --- /dev/null +++ b/content/docs/(functions)/Message/deleteMessage.mdx @@ -0,0 +1,30 @@ +--- +title: "$deleteMessage" +--- + +Deletes a specified message from a channel. + +## Usage +```cc +$deleteMessage[channelID;messageID] +``` + +* **`channelID`**: The ID of the channel where the message is located. +* **`messageID`**: The ID of the message to delete. + +#### Example: + +`$deleteMessage[$channelID;$messageID]` + +This example will delete the message with the ID specified in `$messageID` from the channel with the ID specified in `$channelID`. Make sure your bot has the necessary permissions to delete messages in the specified channel. + + + +`$deletecommand` - Use this function to delete the message that triggered the command. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/deleteWebhook.mdx b/content/docs/(functions)/Message/deleteWebhook.mdx new file mode 100644 index 00000000..a5c975d8 --- /dev/null +++ b/content/docs/(functions)/Message/deleteWebhook.mdx @@ -0,0 +1,19 @@ +--- +title: "$deleteWebhook" +--- + +Deletes a webhook using its ID and token. + +## Usage +```cc +$deleteWebhook[webhookID;webhookToken] +``` + +This function requires both the Webhook ID and Token to function correctly. Ensure you have both available before using this function. + +
+ +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/deleteWebhookMessage.mdx b/content/docs/(functions)/Message/deleteWebhookMessage.mdx new file mode 100644 index 00000000..9956c573 --- /dev/null +++ b/content/docs/(functions)/Message/deleteWebhookMessage.mdx @@ -0,0 +1,34 @@ +--- +title: "Delete Webhook Message" +--- + +This function deletes a message sent by a webhook. + +## Usage + +The `$deleteWebhookMessage` function requires the Webhook ID, Token, and the ID of the message you want to delete. Optionally, you can also specify a Thread ID if the message is within a thread. + +```markdown +$deleteWebhookMessage[Webhook ID;Webhook Token;Message ID;Thread ID (optional)] +``` + +## Parameters + +* **Webhook ID:** The ID of the webhook. +* **Webhook Token:** The token of the webhook. +* **Message ID:** The ID of the message you want to delete. +* **Thread ID (Optional):** The ID of the thread the message is in. This is only needed if the message is in a thread. If the message is not in a thread, you can omit this parameter. + +## Example + +Let's say you have a webhook with the ID `123456789012345678` and the token `abcdefghijklmnopqrstuvwxyz1234567890`, and you want to delete message with ID `987654321098765432`. The message is not in a thread. You would use the following: + +```markdown +$deleteWebhookMessage[123456789012345678;abcdefghijklmnopqrstuvwxyz1234567890;987654321098765432] +``` + +If the message *is* in a thread with the ID `555555555555555555`, you would use: + +```markdown +$deleteWebhookMessage[123456789012345678;abcdefghijklmnopqrstuvwxyz1234567890;987654321098765432;555555555555555555] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Message/disableChannelMentions.mdx b/content/docs/(functions)/Message/disableChannelMentions.mdx new file mode 100644 index 00000000..4ecfdd77 --- /dev/null +++ b/content/docs/(functions)/Message/disableChannelMentions.mdx @@ -0,0 +1,28 @@ +--- +title: "$disableChannelMentions" +--- + +This function prevents the bot from mentioning any channels within a message. This is useful for sanitizing output or preventing accidental channel spam. + +## Usage + +Simply include `$disableChannelMentions` in your code. It doesn't require any arguments. + +```cc +$disableChannelMentions +``` + +**Example:** + +Let's say you have a command that echoes back a user's input. If the user includes a channel mention (`#general`), normally the bot would ping that channel. By using `$disableChannelMentions`, the bot will send the message, but the channel mention will be rendered as plain text and *won't* send a notification. + +```cc +$disableChannelMentions +$message +``` + +**Before `$disableChannelMentions`:** + +If a user typed `#general hello!`, the bot would ping the `#general` channel. + +**After `$disableChannelMentions`:** diff --git a/content/docs/(functions)/Message/disableEveryoneMentions.mdx b/content/docs/(functions)/Message/disableEveryoneMentions.mdx new file mode 100644 index 00000000..710ed49a --- /dev/null +++ b/content/docs/(functions)/Message/disableEveryoneMentions.mdx @@ -0,0 +1,22 @@ +--- +title: "Disable @everyone Mentions" +--- + +This command disables the ability for users to mention everyone in the channel using the `@everyone` role. + +## How to Use + +Simply use the command: + +```cc +$disableEveryoneMentions +``` + +**What this does:** + +* Prevents users from using `@everyone` to ping the entire server or channel. +* Helps reduce unnecessary notifications and maintain a more focused environment. + +**Example:** + +If a user tries to type `@everyone` after this command is used, it will not send a notification to everyone. \ No newline at end of file diff --git a/content/docs/(functions)/Message/disableRoleMentions.mdx b/content/docs/(functions)/Message/disableRoleMentions.mdx new file mode 100644 index 00000000..e4c7911d --- /dev/null +++ b/content/docs/(functions)/Message/disableRoleMentions.mdx @@ -0,0 +1,28 @@ +--- +title: "$disableRoleMentions" +--- + +This function prevents the bot from mentioning any roles in its messages. This is useful for avoiding unnecessary notifications to server members. + +## How it Works + +`$disableRoleMentions` will remove the ability of the bot to ping any role in the server when sending a message. + +## Usage + +Simply include `$disableRoleMentions` in your command response or any message where you want to disable role mentions. + +```cc +$disableRoleMentions +``` + +**Example:** + +Let's say you have a command that sends a welcome message, but you don't want to mention any roles in that message: + +```cc +$disableRoleMentions +Hello and Welcome! +``` + +In this example, even if the message contained a role ID (e.g., `<@&123456789012345678>`), it would be displayed as plain text instead of pinging the role. \ No newline at end of file diff --git a/content/docs/(functions)/Message/dm.mdx b/content/docs/(functions)/Message/dm.mdx new file mode 100644 index 00000000..4a75992d --- /dev/null +++ b/content/docs/(functions)/Message/dm.mdx @@ -0,0 +1,53 @@ +--- +title: "$dm" +--- + + + +Sends the output of your code directly to the author via Discord Direct Message (DM), or to the specified user ID's DM. + +## Usage +```cc +$dm[userID (optional)] +``` + +**Explanation:** + +* The `$dm` function is used to send the result of the preceding code to a user's DM. +* If no `userID` is provided, the message will be sent to the author of the command. +* If a `userID` is provided, the message will be sent to the user with that ID. + +
+ +**Example:** + +**Command Input:** +```cc +!!exec $dm[$authorID] This is a fantastic message! +``` + + + +!!exec $dm[$authorID] This is a fantastic message! + + + +**Result (Sent to the Command Author's DM):** + + + +This is a fantastic message! + + + + + +* `$sendDM`: Send the output of the console to a DM message. (More control over the DM) +* `$channelSendMessage`: Send a message to a specific channel in the server. +* `$sendMessage`: Send a message to the channel where the command was used. + + + +**Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Message/editEmbed.mdx b/content/docs/(functions)/Message/editEmbed.mdx new file mode 100644 index 00000000..4b8822cf --- /dev/null +++ b/content/docs/(functions)/Message/editEmbed.mdx @@ -0,0 +1,78 @@ +--- +title: "$editEmbed" +--- + +Edit an existing embed within a specified message. + +## Usage + +```cc +$editEmbed[channel id (optional);message id (optional);New data (curl);Embed Number (optional, default 1)] +``` + +**Parameters:** + +* **channel id (optional):** The ID of the channel containing the message. If omitted, it defaults to the current channel. +* **message id (optional):** The ID of the message containing the embed you want to edit. If omitted, it's assumed you are editing a previous command's message. +* **New data (curl):** A string containing the modifications you want to make to the embed. This string uses a specific format (explained below) to define the changes. +* **Embed Number (optional, default 1):** The index of the embed to edit if the message contains multiple embeds. The first embed is `1`, the second is `2`, and so on. Defaults to `1`. + +## Examples + +Let's illustrate how to use `$editEmbed` with practical examples. + +#### Initial Embed (Dummy Embed) + +First, let's imagine we have a message containing the following embed: + +![Dummy Embed Example](https://i.imgur.com/WINGkjW.png) + +In this example, the message ID containing the embed is `1091071622624051300`. + +#### Editing the Title + +To modify the title of the embed, use the `{title:Your title}` format. + +![Editing Title Example](https://i.imgur.com/NRKCdS1.png) + +#### Adding a Field + +To add a new field to the embed, use the `{field:Name:Value:inline}` format. `inline` should be either `true` or `false`. + +![Adding Field Example](https://i.imgur.com/M3IVHx0.png) + +#### Editing a Field + +To edit an existing field, use the `{field:Name:Value:inline:field number to edit}` format. Remember that field numbers start at 1. + +![Editing Field Example](https://i.imgur.com/14zlrvJ.png) + +#### Editing Multiple Parts Simultaneously + +You can edit multiple aspects of the embed at once by combining the format strings: + +``` +{title:Your new title} +{description:Your new description} +``` + +![Editing Multiple Parts Example](https://i.imgur.com/VoMAg9b.png) + +## Curl Format Reference + +The `New data (curl)` parameter uses a specific format to define the modifications. Here's a comprehensive list: + +| Format | Description | +| ------------------------------ | ------------------------------------------------ | +| `{title:text}` | Edits the title of the embed. | +| `{url:link}` | Edits the URL associated with the title. | +| `{footer:text:url}` | Edits the footer text and optional icon URL. | +| `{description:text}` | Edits the description of the embed. | +| `{desc:text}` | Alias for `{description:text}`. | +| `{color:hex}` | Edits the color of the embed (using a hex code). | +| `{author:text:image url:link url}` | Edits the author name, image URL, and link URL. | +| `{thumbnail:url}` | Edits the thumbnail image URL. | +| `{field:name:value:inline}` | Adds a new field. `inline` must be `true` or `false`. | +| `{field:name:value:inline:field number}` | Edits an existing field. `field number` starts at 1. `inline` must be `true` or `false`. | +| `{timestamp:ms}` | Edits the timestamp (in milliseconds since epoch). | +| `{image:url}` | Displays a large image in the embed. | \ No newline at end of file diff --git a/content/docs/(functions)/Message/editIn.mdx b/content/docs/(functions)/Message/editIn.mdx new file mode 100644 index 00000000..16a64fcd --- /dev/null +++ b/content/docs/(functions)/Message/editIn.mdx @@ -0,0 +1,31 @@ +--- +title: "$editIn" +--- + +Edits a bot's message after a specified delay. This function allows you to update the message content after a set period of time, making it useful for creating dynamic or delayed responses. + +## Usage + +```cc +$editIn[time;new message] +``` + +**Parameters:** + +* `time`: The delay before the message is edited. This should be expressed in seconds (`s`), minutes (`m`), hours (`h`), or days (`d`). For example: `3s`, `1m`, `2h`, `1d`. +* `new message`: The new content of the message after the specified time has elapsed. This can include other functions and variables. + +## Example: + +```cc +Rolling the dice... +$editIn[3s;You got $random[1;6]] +``` + +**Explanation:** + +This example first sends the message "Rolling the dice...". After a delay of 3 seconds, the message will be edited to "You got " followed by a random number between 1 and 6. + +#### Output: + +![](https://i.imgur.com/MOQMVcZ.gif) \ No newline at end of file diff --git a/content/docs/(functions)/Message/editMessage.mdx b/content/docs/(functions)/Message/editMessage.mdx new file mode 100644 index 00000000..080f15a6 --- /dev/null +++ b/content/docs/(functions)/Message/editMessage.mdx @@ -0,0 +1,45 @@ +--- +title: "$editMessage" +--- + +Edits a message previously sent by the bot. This function allows you to modify the content of a message. + +## Usage +```cc +$editMessage[messageId;newMessage;channelId (optional)] +``` + +* **`messageId`**: The ID of the message you want to edit. +* **`newMessage`**: The new content of the message. +* **`channelId` (optional)**: The ID of the channel where the message is located. If omitted, the function assumes the message is in the same channel where the command is executed. + +## Example + +```cc +$editMessage[123456789012345678;This is the updated message content!] +``` + +In this example, the message with the ID `123456789012345678` will be edited to display "This is the updated message content!". + + + +`$messageID` - Use the `$messageID` function to retrieve the ID of the message that triggered the command. This is useful if you want to edit the same message that invoked the command. + + + + + +You can format your `newMessage` as an embed using the [Message Curl Format](/CodeReferences/ref.message_curl_format). This allows you to create rich, visually appealing messages. + + + + + +* `$deleteMessage` - The `$deleteMessage` function deletes a message from the server or in DMs. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/editWebhookMessage.mdx b/content/docs/(functions)/Message/editWebhookMessage.mdx new file mode 100644 index 00000000..6e626d85 --- /dev/null +++ b/content/docs/(functions)/Message/editWebhookMessage.mdx @@ -0,0 +1,33 @@ +--- +title: "$editWebhookMessage" +--- + +This command allows you to edit a message that was sent by a webhook. You'll need the webhook's ID, token, and the message ID of the message you want to modify. + +## Syntax + +```cc +$editWebhookMessage[Webhook ID;Webhook Token;Message ID;New Content;Thread ID (Optional)] +``` + +## Parameters + +* **`Webhook ID`**: The ID of the webhook that sent the message. This is typically a long number. +* **`Webhook Token`**: The token for the webhook. Treat this like a password! Keep it secret! +* **`Message ID`**: The ID of the specific message you want to edit. This is also typically a long number. +* **`New Content`**: The updated content you want to replace the original message with. This is the text that will be displayed in the edited message. +* **`Thread ID (Optional)`**: If the message is in a thread, you'll need to provide the thread ID for the message to be edited correctly. If the message isn't in a thread, leave this parameter blank. + +## Example + +Let's say you have a webhook with the ID `123456789012345678`, the token `abcdefg1234567890abcdefg1234567890`, and you want to edit a message with the ID `987654321098765432`. You want to change the message to "Hello, world! This message has been edited." + +```cc +$editWebhookMessage[123456789012345678;abcdefg1234567890abcdefg1234567890;987654321098765432;Hello, world! This message has been edited.] +``` + +If the message was in a thread with the ID `555555555555555555`, the command would look like this: + +```cc +$editWebhookMessage[123456789012345678;abcdefg1234567890abcdefg1234567890;987654321098765432;Hello, world! This message has been edited.;555555555555555555] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Message/emoji.mdx b/content/docs/(functions)/Message/emoji.mdx new file mode 100644 index 00000000..4b50a0ec --- /dev/null +++ b/content/docs/(functions)/Message/emoji.mdx @@ -0,0 +1,36 @@ +--- +title: "$emoji" +--- + +This function packs a punch with **11 different functionalities** related to emojis, all in a single compact command! Get ready to unlock a world of emoji information. + +## Usage + +The syntax is simple and powerful: + +```cc +$emoji[emojiID;option] +``` + +**Let's break it down:** + +* `$emoji`: This is the function itself. +* `emojiID`: This is the ID of the emoji you want to analyze. Make sure you have the correct emoji ID! +* `;`: This separates the emoji ID from the option you want to use. +* `option`: This determines what information you want to retrieve about the emoji. + +## Available Options + +Here's a list of all the options you can use with the `$emoji` function and what they return: + +* `created`: Returns the timestamp (in milliseconds since epoch) when the emoji was created. +* `emoji`: Returns the raw emoji itself (e.g., :smile:). +* `guildid`: Returns the ID of the guild where the emoji is from. +* `id`: Returns the emoji ID (same as what you put in, but useful for confirmation). +* `identifier`: Returns the emoji's identifier, usually in the format `name:ID` which is helpful when using the emoji in reactions. +* `isanimated`: Returns `true` if the emoji is animated (a GIF), and `false` otherwise. +* `isdeleted`: Returns `true` if the emoji has been deleted, and `false` otherwise. +* `ismanaged`: Returns `true` if the emoji is managed by an integration (like Twitch), and `false` otherwise. +* `name`: Returns the name of the emoji. +* `url`: Returns the URL of the emoji image. +* `authorid`: Returns the ID of the user who created the emoji. \ No newline at end of file diff --git a/content/docs/(functions)/Message/emojiID.mdx b/content/docs/(functions)/Message/emojiID.mdx new file mode 100644 index 00000000..c6376648 --- /dev/null +++ b/content/docs/(functions)/Message/emojiID.mdx @@ -0,0 +1,15 @@ +--- +title: "$emojiID" +--- + +Retrieve the ID of the emoji used in a reaction. + +This variable returns the unique ID of the emoji that a user reacted with. This is particularly useful for identifying specific emojis when handling reaction-based events or commands. + +## Usage + +Simply use `$emojiID` within your command or script where you need to access the emoji's ID. + +```cc +$emojiID +``` \ No newline at end of file diff --git a/content/docs/(functions)/Message/emojiName.mdx b/content/docs/(functions)/Message/emojiName.mdx new file mode 100644 index 00000000..8b3bc5cf --- /dev/null +++ b/content/docs/(functions)/Message/emojiName.mdx @@ -0,0 +1,13 @@ +--- +title: "$emojiName" +--- + +This function, `$emojiName`, returns the name of the emoji a user used in a reaction. It's particularly useful within reaction event triggers to understand which specific emoji prompted an action. + +## How to Use It + +The function is very straightforward. Simply use `$emojiName` within your code. + +```cc +$emojiName +``` \ No newline at end of file diff --git a/content/docs/(functions)/Message/emojiToString.mdx b/content/docs/(functions)/Message/emojiToString.mdx new file mode 100644 index 00000000..e8d816ab --- /dev/null +++ b/content/docs/(functions)/Message/emojiToString.mdx @@ -0,0 +1,33 @@ +--- +title: "$emojiToString" +--- + +This function returns the actual emoji that a user reacted with in a reaction add/remove event. This is useful for determining which specific emoji triggered the event. + +## How it Works + +`$emojiToString` takes the emoji identifier (usually from a reaction event) and converts it into the actual emoji character or unicode representation. + +## Usage + +```cc +$emojiToString +``` + +**Example:** + +Let's say a user reacts to a message with the 👍 emoji. In a reaction add event, you might use `$emojiToString` to get the actual "👍" emoji: + +```cc +$emojiToString +``` + +This would then return: + +``` +👍 +``` + +**Important Considerations:** + +* This function is primarily used within reaction add/remove events. \ No newline at end of file diff --git a/content/docs/(functions)/Message/emojisFromMessage.mdx b/content/docs/(functions)/Message/emojisFromMessage.mdx new file mode 100644 index 00000000..b3b7c537 --- /dev/null +++ b/content/docs/(functions)/Message/emojisFromMessage.mdx @@ -0,0 +1,66 @@ +--- +title: "$emojisFromMessage" +--- + +This function extracts all unicode and custom emojis from a user's message or provided text. + +## Usage + +You can use `$emojisFromMessage` in two ways: + +**1. From User Message (Default):** + +```cc +$emojisFromMessage +``` + +This will extract emojis from the message that triggered the command. + +**2. From Custom Text:** + +```cc +$emojisFromMessage[text;separator (optional)] +``` + +* **`text`**: The text you want to extract emojis from. +* **`separator`**: (Optional) The character(s) you want to use to separate the extracted emojis. If omitted, the emojis will be returned without a separator. + +## Example + +Let's say a user sends the following message: + +`Hello! 👋 This is a test message with :custom_emoji: and ❤️ some more text.` + +Then consider these usages: + +**Example 1: Extracting emojis from the user's message using the default usage.** + +```cc +$emojisFromMessage +``` + +This would return: + +`👋❤️:custom_emoji:` (Emojis returned without a separator). + +**Example 2: Extracting emojis from the user's message, separated by a comma and a space.** + +```cc +$emojisFromMessage[;, ] +``` + +This would return: + +`👋, ❤️, :custom_emoji:` (Emojis returned separated by ", "). + +**Example 3: Extracting emojis from specific text with a dash as a separator.** + +```cc +$emojisFromMessage[This has 🎉 one and 😁 two emojis; - ] +``` + +This would return: + +`🎉 - 😁` + +**Explanation:** The first example uses the default behavior and extracts all emojis from the message that triggered the command. The second example shows how to provide a separator for better readability. The third example demonstrates extracting emojis from a specific text string rather than the user's message. \ No newline at end of file diff --git a/content/docs/(functions)/Message/enableEveryoneMentions.mdx b/content/docs/(functions)/Message/enableEveryoneMentions.mdx new file mode 100644 index 00000000..403904cb --- /dev/null +++ b/content/docs/(functions)/Message/enableEveryoneMentions.mdx @@ -0,0 +1,19 @@ +--- +title: "Enable @everyone Mentions" +--- + +This command allows you to enable the use of `@everyone` mentions in your Discord server (if disabled by default). **Use with caution!** Enabling `@everyone` can be disruptive if not managed properly. + +## How to Use + +Simply run the `$enableEveryoneMentions` command. + +```cc +$enableEveryoneMentions +``` + +**Important Considerations:** + +* Think carefully about whether enabling `@everyone` is the right choice for your community. Consider the potential for abuse and spam. +* If you enable `@everyone`, ensure you have moderation tools and guidelines in place to prevent misuse. +* Disabling `@everyone` is generally a good practice for larger servers to avoid mass notifications. Only enable it if you have a specific reason and a plan to manage its use. \ No newline at end of file diff --git a/content/docs/(functions)/Message/forwardMessage.mdx b/content/docs/(functions)/Message/forwardMessage.mdx new file mode 100644 index 00000000..933a5e0e --- /dev/null +++ b/content/docs/(functions)/Message/forwardMessage.mdx @@ -0,0 +1,16 @@ +--- +title: "$forwardMessage" +--- + +forward a message to another channel + +## Usage +```cc +$forwardMessage[Source Channel ID;Source Message ID;Target Channel ID;Return the new message id (yes/no)] +``` + +#### Example +Forwarding a message with ID `1234` to another channel called `Target Channel` +```cc +$forwardMessage[$channelID;1234;Target Channel] +``` diff --git a/content/docs/(functions)/Message/getCommandOption.mdx b/content/docs/(functions)/Message/getCommandOption.mdx new file mode 100644 index 00000000..b706807d --- /dev/null +++ b/content/docs/(functions)/Message/getCommandOption.mdx @@ -0,0 +1,28 @@ +--- +title: "$getCommandOption" +--- + +Retrieves the value of a specific option from a slash command. + +## Usage +```cc +$getCommandOption[type;Option Name] +``` + +## Option Types + +This function requires you to specify the data type of the option you're trying to retrieve. Here's a list of valid option types: + +* `string`: For text-based input. +* `number`: For numerical input (integers or decimals). +* `boolean`: For true/false values. +* `channel`: For channel mentions/IDs. +* `role`: For role mentions/IDs. +* `mentionable`: For user or role mentions/IDs. +* `user`: For user mentions/IDs. + +
+ +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/getEmbed.mdx b/content/docs/(functions)/Message/getEmbed.mdx new file mode 100644 index 00000000..ccf0c788 --- /dev/null +++ b/content/docs/(functions)/Message/getEmbed.mdx @@ -0,0 +1,50 @@ +--- +title: "$getEmbed" +--- + +Retrieves information from an embed within a specific message. This function allows you to extract various details from an embed, such as its title, description, footer, and more. + +## Usage + +```cc +$getEmbed[Channel ID (optional);Message ID (optional);Info (optional, default is description);Embed Number (optional, default is 1)] +``` + +**Explanation:** + +* **Channel ID (optional):** The ID of the channel containing the message with the embed. If omitted, the current channel is used. +* **Message ID (optional):** The ID of the message containing the embed. If omitted, the last message sent in the channel is used. +* **Info (optional):** The specific piece of information you want to extract from the embed. Defaults to `description` if not provided. See the "Info Values" section below for available options. +* **Embed Number (optional):** The number of the embed to retrieve information from, if the message contains multiple embeds. Defaults to `1` (the first embed). + +## Info Values + +These are the available values you can use to specify what information to retrieve from the embed using the `Info` parameter: + +* `title`: The title of the embed. +* `footer`: The text content of the embed's footer. +* `footer_image`: The URL of the image in the embed's footer. +* `author`: The name of the embed's author. +* `author_url`: The URL associated with the embed's author. +* `author_image`: The URL of the image associated with the embed's author. +* `color`: The decimal representation of the embed's color. +* `color_hex`: The hexadecimal representation of the embed's color (e.g., `#0099ff`). +* `description`: The description of the embed. +* `field`: Gets field name by index. Example: `field;1` will get the name of the second field. (Note: Fields are numbered starting from 1). +* `field_value`: Gets field value by index. Example: `field_value;2` will get the value of the third field. (Note: Fields are numbered starting from 1). +* `field_inline`: Returns `true` or `false` if the field is inline, by index. Example: `field_inline;3` will get if the fourth field is inline or not. (Note: Fields are numbered starting from 1). +* `thumbnail`: The URL of the embed's thumbnail image. +* `timestamp`: The timestamp of the embed (in ISO 8601 format). + +### Example: + +This example retrieves the description of an embed from a message in the same channel. + + + +!!exec $getEmbed[$channelID;$messageID;description] + + +This was an embed description + + \ No newline at end of file diff --git a/content/docs/(functions)/Message/getMessage.mdx b/content/docs/(functions)/Message/getMessage.mdx new file mode 100644 index 00000000..c0ce039e --- /dev/null +++ b/content/docs/(functions)/Message/getMessage.mdx @@ -0,0 +1,49 @@ +--- +title: "$getMessage" +--- + +Retrieves information about a specific message using its ID. This function allows you to access various aspects of a message, such as its content, author, and more. + +## Syntax + +```cc +$getMessage[channelID;messageID;attribute] +``` + +## Parameters + +* `channelID`: The ID of the channel where the message is located. +* `messageID`: The ID of the message you want to retrieve information from. +* `attribute`: Specifies which piece of information you want to retrieve from the message. Available attributes are: + + * `content`: The message's text content. + * `userID/authorid`: The ID of the user who sent the message. + * `description/desc`: (Applicable for embeds only) The description of the embed associated with the message. If the message has no embed or the embed has no description, this will return an empty string. + +## Example Usage + +Let's say you have a message with the ID `123456789012345678` in channel `987654321098765432`. + +1. **Getting the message content:** + + ```cc + $getMessage[987654321098765432;123456789012345678;content] + ``` + + This would return the text content of the message. For instance, if the message said "Hello, world!", the function would return "Hello, world!". + +2. **Getting the user ID of the message sender:** + + ```cc + $getMessage[987654321098765432;123456789012345678;userID] + ``` + + This would return the user ID of the user who sent the message, such as `456789012345678901`. + +3. **Getting the embed description (if the message contains an embed):** + + ```cc + $getMessage[987654321098765432;123456789012345678;desc] + ``` + + This would return the description of the embed within the message. If there is no embed or if the embed lacks a description, an empty string will be returned. diff --git a/content/docs/(functions)/Message/getMessageReactions.mdx b/content/docs/(functions)/Message/getMessageReactions.mdx new file mode 100644 index 00000000..f2da4684 --- /dev/null +++ b/content/docs/(functions)/Message/getMessageReactions.mdx @@ -0,0 +1,55 @@ +--- +title: "$getMessageReactions" +--- + +This command retrieves the reactions present on a specified message. + +## How it Works + +The `$getMessageReactions` command allows you to list the reactions (emojis) that have been added to a particular message. It can be used to gather information about how users are responding to a message. + +## Usage + +```cc +$getMessageReactions[Channel ID (optional);Message ID (optional);Separator (optional)] +``` + +## Parameters + +* **`Channel ID` (Optional):** The ID of the channel containing the message. If not provided, the command defaults to the current channel where the command is executed. +* **`Message ID` (Optional):** The ID of the message you want to get reactions from. If not provided, the command defaults to the message ID where the command is executed (if it's responding to a message). +* **`Separator` (Optional):** The character or string used to separate the list of reactions. The default separator is a comma (`,`). + +## Examples + +* **Get reactions from the current message in the current channel (most common use):** + + ```cc + $getMessageReactions + ``` + + This will return a comma-separated list of reactions from the message the command is replying to. For example: `👍,👎,❤️` + +* **Get reactions from a specific message in the current channel:** + + ```cc + $getMessageReactions[$messageID] + ``` + + Replace `$messageID` with the actual message ID. + +* **Get reactions from a specific message in a specific channel:** + + ```cc + $getMessageReactions[123456789012345678;987654321098765432] + ``` + + Replace `123456789012345678` with the Channel ID and `987654321098765432` with the Message ID. + +* **Get reactions from a specific message in a specific channel, using a custom separator:** + + ```cc + $getMessageReactions[123456789012345678;987654321098765432; | ] + ``` + + This will separate the reactions with ` | ` instead of a comma. For example: `👍 | 👎 | ❤️` \ No newline at end of file diff --git a/content/docs/(functions)/Message/getReactionCount.mdx b/content/docs/(functions)/Message/getReactionCount.mdx new file mode 100644 index 00000000..fcf2f756 --- /dev/null +++ b/content/docs/(functions)/Message/getReactionCount.mdx @@ -0,0 +1,44 @@ +--- +title: "$getReactionCount" +--- + +Get the number of reactions for a specific emoji on a message. + +## Usage + +```cc +$getReactionCount[channelID;messageID;reaction] +``` + +**Parameters:** + +* `channelID` (optional): The ID of the channel the message is in. Defaults to the current channel if not provided. Use `$channelID` to get the current channel's ID. +* `messageID` (optional): The ID of the message to check. Defaults to the current message's ID (the message that triggered the command) if not provided. +* `reaction`: The emoji you want to count the reactions for (e.g., `👍`, `😂`, or a custom emoji ID). + +## Example + +This example shows how to use `$getReactionCount` to display how many users reacted with a thumbs-up (`👍`) to a specific message. + + + +!!exec Users agree with this decision: $getReactionCount[$channelID;12345678987654321;👍] + + +Users agree with this decision: 13 + + + +**Explanation:** + +* The command `!!exec Users agree with this decision: $getReactionCount[$channelID;12345678987654321;👍]` is executed by a user. +* `$channelID` represents the ID of the channel the command was executed in. +* `12345678987654321` is the ID of the message to check for reactions. +* `👍` is the reaction (thumbs-up emoji) to count. +* The bot replies with "Users agree with this decision: 13" because 13 users reacted to the message with the thumbs-up emoji. + +**Tips:** + +* If you're using the function in the same channel as the message you want to count reactions for, you can omit the `channelID` parameter. +* If you're using the function in the same message as the reaction you want to count, you can omit both the `channelID` and `messageID` parameters. +* Make sure the bot has access to the channel and message you're trying to get the reaction count from. \ No newline at end of file diff --git a/content/docs/(functions)/Message/getReactions.mdx b/content/docs/(functions)/Message/getReactions.mdx new file mode 100644 index 00000000..8bc8b301 --- /dev/null +++ b/content/docs/(functions)/Message/getReactions.mdx @@ -0,0 +1,51 @@ +--- +title: "$getReactions" +--- + +Retrieve a list of users who reacted with a specific emoji to a message. + +## Usage +```cc +$getReactions[channelId;messageId;emoji;mention/username/id] +``` + +**Parameters:** + +* `channelId`: The ID of the channel where the message is located. +* `messageId`: The ID of the message to retrieve reactions from. +* `emoji`: The emoji to search for. This can be the emoji itself (e.g., 👍) or its ID (if it's a custom emoji). +* `mention/username/id`: Specifies what kind of data to return for each user. Choose one of the following: + * `mention`: Returns the user's mention string (e.g., `<@123456789012345678>`). + * `username`: Returns the user's username (e.g., `ExampleUser`). + * `id`: Returns the user's ID (e.g., `123456789012345678`). + +
+ + + + +**Scenario:** You want to get a list of users who reacted with the 👍 emoji on a specific message and mention them. + +**Code:** + +```cc +$getReactions[832894131844128888;940739445487988807;👍;mention] +``` + + + + + + + +![](https://cdn.discordapp.com/attachments/914682255346118687/940739445487988807/Screenshot_20220208194229.jpg) + +Counting how many users reacted +![](https://cdn.discordapp.com/attachments/914682255346118687/940740236466618418/Screenshot_20220208194538.jpg) + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/hasEmbeds.mdx b/content/docs/(functions)/Message/hasEmbeds.mdx new file mode 100644 index 00000000..5b2a0e31 --- /dev/null +++ b/content/docs/(functions)/Message/hasEmbeds.mdx @@ -0,0 +1,30 @@ +--- +title: "$hasEmbeds" +--- + +This function checks if a specific message contains any embeds. Embeds are rich content blocks within a message, which can include things like images, links, and formatted text. + +It returns `true` if the message contains at least one embed, and `false` otherwise. This is useful for creating bots that react to messages with specific types of content. + +**Important:** Uploaded images and videos are considered embeds by this function. + +## Syntax + +```cc +$hasEmbeds[channelID;messageID] +``` + +## Parameters + +* `channelID`: The ID of the channel where the message is located. +* `messageID`: The ID of the message you want to check. + +## Example + +Let's say you want to check if a message with ID `1234567890` in channel `9876543210` has any embeds. You would use the following: + +```cc +$hasEmbeds[9876543210;1234567890] +``` + +This will return either `true` or `false`. \ No newline at end of file diff --git a/content/docs/(functions)/Message/hyperlink.mdx b/content/docs/(functions)/Message/hyperlink.mdx new file mode 100644 index 00000000..3f9e7862 --- /dev/null +++ b/content/docs/(functions)/Message/hyperlink.mdx @@ -0,0 +1,33 @@ +--- +title: "$hyperlink" +--- + +The `$hyperlink` function allows you to create hyperlinks specifically designed for use within Discord embeds. This ensures your links are properly rendered and clickable within the embedded message. + +## Usage + +```cc +$hyperlink[url;title] +``` + +* **url:** The complete URL you want the link to point to (e.g., `https://discord.com`). +* **title:** The text that will be displayed as the clickable link. + +## Example + +Let's say you want to create a Discord embed with a description that includes a link to your Discord server. You could use the following: + +```cc +$description[$hyperlink[https://discord.com;Join us on Discord!]] +``` + +In this example: + +* `https://discord.com` is the URL of your Discord server. +* `Join us on Discord!` is the text that will be displayed as the clickable link. + +## Output + +The code above will produce an embed similar to the following: + +![Example Output](https://i.imgur.com/nADyi95.png) \ No newline at end of file diff --git a/content/docs/(functions)/Message/message.mdx b/content/docs/(functions)/Message/message.mdx new file mode 100644 index 00000000..cb7fe3f2 --- /dev/null +++ b/content/docs/(functions)/Message/message.mdx @@ -0,0 +1,80 @@ +--- +title: "$message" +--- + +The `$message` function retrieves the user's message or command arguments, providing a powerful way to interact with user input. It's particularly useful for commands where you need to process the text a user has entered. + +When used in a **Forward Message** trigger, `$message` instead returns the **content of the original forwarded message**, allowing you to inspect or respond to what was forwarded rather than the forwarding action itself. + +**Key Use Cases:** + +* **Direct Message Content:** Get the entire message a user sends after a command prefix (e.g., after `!cmd`). +* **Command Arguments:** Access individual words or phrases provided as arguments to a command. +* **Forwarded Messages:** Retrieve the content of the original forwarded message when using a **Forward Message** trigger. +* **Slash Command Data:** When used within a slash command, `$message` retrieves either the value of a specific option or all the option values entered by the user. + +## Usage + +```cc +$message +$message[index] +$message[startIndex+] +``` + +* **`$message`**: Returns the entire message following the command prefix. When used in a **Forward Message** trigger, it returns the content of the forwarded message instead. +* **`$message[index]`**: Returns the argument at the specified *index* (starting from 1). +* **`$message[startIndex+]`**: Returns all arguments starting from the specified *startIndex* (including the argument at that index). + +## Examples + +Let's say a user types the following command: + +```text +!cmd Hello World, How are you? +``` + +Here's how `$message` would behave: + +* `$message` would be replaced with: `Hello World, How are you?` +* `$message[1]` would be replaced with: `Hello` +* `$message[2]` would be replaced with: `World` +* `$message[2+]` would be replaced with: `World, How are you?` + +**Explanation:** + +* `$message` captures the entire input string after the `!cmd` command. +* `$message[1]` gets the first word ("Hello"). Remember that indexing starts at **1**, not **0**. +* `$message[2]` gets the second word ("World"). +* `$message[2+]` gets all words starting from the second word ("World"), resulting in `"World, How are you?"`. + +## Forward Message Example + +If a user forwards a message containing: + +```text +Server maintenance starts in 10 minutes. +``` + +and your custom command is triggered by the **Forward Message** trigger: + +* `$message` → `Server maintenance starts in 10 minutes.` +* `$message[1]` → `Server` +* `$message[2+]` → `maintenance starts in 10 minutes.` + +This allows you to process the contents of the original forwarded message just like a normal user message. + +## Slash Command Example + +Imagine you have a slash command: + +```text +/greet user:John Doe message:Hello! +``` + +If your code uses `$message[1]`, and the slash command defines the options in the order `user` then `message`, it may return `"John Doe"`. For slash commands, it is generally more reliable to use `$getOption` to retrieve values by option name. + +**Function Difficulty:** + + +**Tags:** + diff --git a/content/docs/(functions)/Message/messageAttachment.mdx b/content/docs/(functions)/Message/messageAttachment.mdx new file mode 100644 index 00000000..55b4e80e --- /dev/null +++ b/content/docs/(functions)/Message/messageAttachment.mdx @@ -0,0 +1,36 @@ +--- +title: "$messageAttachment" +--- + +This function retrieves the URL of the first attachment found in a message. If a message has multiple attachments, only the URL of the first one will be returned. + +## Usage: + +```cc +$messageAttachment +``` + +
+ +#### Example: + +This example demonstrates how `$messageAttachment` can be used. + + + +!!exec $messageAttachment + + +https://media.discordapp.net/avatars/725721249652670555/781224f90c3b841ba5b40678e032f74a.webp + + + +**Explanation:** + +* The member sends the command `!!exec $messageAttachment`. +* The bot returns the URL of the first attachment in the member's message. If the message does not contain any attachment it will return an empty string. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/messageExists.mdx b/content/docs/(functions)/Message/messageExists.mdx new file mode 100644 index 00000000..1936e282 --- /dev/null +++ b/content/docs/(functions)/Message/messageExists.mdx @@ -0,0 +1,34 @@ +--- +title: "$messageExists" +--- + +Checks if a message exists in a specified channel and returns `true` or `false`. + +## Usage: + +`$messageExists[channelID;messageID]` + +* **channelID:** The ID of the channel where the message should be checked. +* **messageID:** The ID of the message to check for. + +
+ +**Example:** + +Let's say you want to check if a message with the ID `123456789012345678` exists in the channel with the ID `987654321098765432`. + + + +!!exec $messageExists[987654321098765432;123456789012345678] + + +true + + + +In this example, if the message exists, the bot will return `true`. If the message doesn't exist, the bot will return `false`. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/messageFlags.mdx b/content/docs/(functions)/Message/messageFlags.mdx new file mode 100644 index 00000000..bae06f2d --- /dev/null +++ b/content/docs/(functions)/Message/messageFlags.mdx @@ -0,0 +1,34 @@ +--- +title: "$messageFlags" +--- + +This function retrieves the flags associated with a message. Message flags provide additional information about the message, such as whether it's a crosspost or if it's a system message. + +## Usage +```cc +$messageFlags +``` + +
+ +Here's a simple example demonstrating how to use `$messageFlags`: + + + +!!exec Flags: $messageFlags + + +Flags: + + + +**Explanation:** + +* The user types `!!exec Flags: $messageFlags`. +* The bot executes the command and replaces `$messageFlags` with the actual flags of the triggering message. +* The bot then replies with "Flags:" followed by the flags (if any) for that message. If there are no flags, the output will simply be "Flags:". + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/messageID.mdx b/content/docs/(functions)/Message/messageID.mdx new file mode 100644 index 00000000..38f8e613 --- /dev/null +++ b/content/docs/(functions)/Message/messageID.mdx @@ -0,0 +1,35 @@ +--- +title: "$messageID" +--- + +Retrieves the ID of the message that triggered the command. + +This function returns the unique ID of the Discord message that initiated the execution of your custom command. + +## Usage +```cc +$messageID +``` + +**Example:** + +```cc +!!exec $messageID +``` + +**Explanation:** In this example, when the command `!!exec $messageID` is executed, `$messageID` will be replaced with the actual message ID of the message that contained the command. The custom command then processes and likely outputs or uses this message ID. + +**Discord Example:** + + + +!!exec $messageID + + +789089088989809890 + + + +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Message/messagePublish.mdx b/content/docs/(functions)/Message/messagePublish.mdx new file mode 100644 index 00000000..6ce9f009 --- /dev/null +++ b/content/docs/(functions)/Message/messagePublish.mdx @@ -0,0 +1,37 @@ +--- +title: "$messagePublish" +--- + +Publishes a message to an announcement channel. This command allows you to easily share a message from one channel to another, typically an announcement channel. + +## Usage: + +You can use `$messagePublish` in three ways: + +* **`$messagePublish`**: If executed in the same channel as the message you want to publish, it will publish the message that triggered the command. + +* **`$messagePublish[messageID]`**: Publishes the message with the specified `messageID` from the current channel. Replace `messageID` with the actual ID of the message you wish to publish. + +* **`$messagePublish[channelID;messageID]`**: Publishes the message with the specified `messageID` from the specified `channelID`. Replace `channelID` with the ID of the channel containing the message, and `messageID` with the ID of the message itself. + +## Examples: + +* To publish the message triggering the command: + ```cc + $messagePublish + ``` + +* To publish a message with the ID `123456789012345678` from the current channel: + ```cc + $messagePublish[123456789012345678] + ``` + +* To publish a message with the ID `123456789012345678` from the channel with the ID `987654321098765432`: + ```cc + $messagePublish[987654321098765432;123456789012345678] + ``` + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/messageSlice.mdx b/content/docs/(functions)/Message/messageSlice.mdx new file mode 100644 index 00000000..3787583e --- /dev/null +++ b/content/docs/(functions)/Message/messageSlice.mdx @@ -0,0 +1,52 @@ +--- +title: "$messageSlice" +--- + +Extracts a portion of the message arguments, from a specified start position to an optional end position. + +## Usage +```cc +$messageSlice[from;to (optional)] +``` + +* `from`: The starting index (1-based) of the argument you want to extract. +* `to`: (Optional) The ending index (1-based) of the argument you want to extract. If omitted, it slices from `from` to the end of the message. + +
+ +**Example:** + +Let's say the message sent is: `!!exec a b c d e` + + + + !!exec $messageSlice[1] + + + b c d e + + + +In this example, `$messageSlice[1]` extracts arguments from index 1 to the end, resulting in `b c d e`. Remember that arguments are separated by spaces, and the command itself (`!!exec` in this case) is not included. + +
+ +**Another Example:** + +Using the same message: `!!exec a b c d e` + + + + !!exec $messageSlice[1;2] + + + b c + + + + +Here, `$messageSlice[1;2]` extracts arguments from index 1 to index 2, resulting in `b c`. + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/messageType.mdx b/content/docs/(functions)/Message/messageType.mdx new file mode 100644 index 00000000..f9966e16 --- /dev/null +++ b/content/docs/(functions)/Message/messageType.mdx @@ -0,0 +1,36 @@ +--- +title: "$messageType" +--- + +This function returns the type of the message that triggered the command. This can be useful for creating commands that behave differently depending on how they were called. + +## Usage +```cc +$messageType +``` + +
+ +**Example:** + +Here's how `$messageType` might be used in a custom command: + + + +!!exec $messageType + + +Default + + + + + +The `$messageType` function returns a specific message type. You can find a list of possible return values [here](/CodeReferences/ref.message_types). These values represent different ways a message can be sent, such as a regular text message, a system message, or an interaction response. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/messageWebhookID.mdx b/content/docs/(functions)/Message/messageWebhookID.mdx new file mode 100644 index 00000000..364dffc8 --- /dev/null +++ b/content/docs/(functions)/Message/messageWebhookID.mdx @@ -0,0 +1,29 @@ +--- +title: "$messageWebhookID" +--- + +Retrieves the ID of the webhook that sent the message. + +## Usage: + +`$messageWebhookID` + +This function requires no arguments and simply returns the webhook ID. + +
+ + + +!!exec $messageWebhookID + + +683630053686378498 + + + +**Example:** If a webhook with the ID `683630053686378498` sent the message, the function would return `683630053686378498`. + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/meta.json b/content/docs/(functions)/Message/meta.json new file mode 100644 index 00000000..bba1e677 --- /dev/null +++ b/content/docs/(functions)/Message/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Message Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Message/modifyWebhook.mdx b/content/docs/(functions)/Message/modifyWebhook.mdx new file mode 100644 index 00000000..3b25b2e3 --- /dev/null +++ b/content/docs/(functions)/Message/modifyWebhook.mdx @@ -0,0 +1,33 @@ +--- +title: "Modify Webhook" +--- + +This function allows you to modify a webhook's name and avatar using its ID and token. + +## Usage: + +`$modifyWebhook[webhookID;webhookToken;name;avatar (optional)]` + +**Parameters:** + +* `webhookID`: The ID of the webhook you want to modify. +* `webhookToken`: The token associated with the webhook. +* `name`: The new name you want to give the webhook. +* `avatar (optional)`: The URL of the new avatar for the webhook. If you don't want to change the avatar, you can leave this blank or omit it. + +
+ + + + +Here's an example of how to use this function: + +![](https://cdn.discordapp.com/attachments/914682255346118687/940753785867870278/Screenshot_20220208203936.jpg) + + + +
+ +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Message/msg.mdx b/content/docs/(functions)/Message/msg.mdx new file mode 100644 index 00000000..af8f4bd8 --- /dev/null +++ b/content/docs/(functions)/Message/msg.mdx @@ -0,0 +1,120 @@ +--- +title: "$msg" +--- + +The `$msg` function is a powerful and compact tool that lets you extract a wide range of information from Discord messages. + +## Usage +```cc +$msg[channelid;messageid;property] +``` + +To use the `$msg` function, you need to provide the channel ID, the message ID, and the specific property you want to retrieve. Let's break it down: + +* **`channelid`**: The ID of the channel where the message is located. +* **`messageid`**: The ID of the message you want to get information from. +* **`property`**: The specific piece of information you want to retrieve from the message. + +#### Example: + +```cc +$msg[1234567890;9876543210;authorname] +``` + +This would return the author's name of the message with the ID `9876543210` located in the channel with the ID `1234567890`. + +### Supported Properties + +Here's a comprehensive list of the properties you can access with the `$msg` function: + +**Author Information:** + +* **`author`**: The message author's user ID. +* **`authormention`**: A mention of the message author (e.g., `<@1234567890>`). +* **`authortag`**: The message author's full Discord tag (e.g., `Username#1234`). +* **`authorname`**: The message author's username (e.g., `Username`). +* **`authoravatar`**: The URL of the message author's avatar. + +**Channel Information:** + +* **`channel`**: The ID of the channel where the message was sent. +* **`channelname`**: The name of the channel where the message was sent. + +**Message Content:** + +* **`cleancontent`**: The message content with mentions like `@here` and `@everyone` removed. +* **`content`**: The full message content. +* **`rawcontent`**: The message content with _all_ mentions removed. + +**Message Metadata:** + +* **`created`**: The date and time the message was created. +* **`guildid`**: The ID of the guild (server) where the message was sent. +* **`guildname`**: The name of the guild (server) where the message was sent. +* **`id`**: The message ID. +* **`url`**: A direct link to the message. +* **`reference`**: The message ID of the message this message is replying to (if it's a reply). +* **`thread`**: The thread ID of the message if it exists within a thread (otherwise undefined). +* **`pinned`**: Returns `true` if the message is pinned, `false` otherwise. + +**Attachment Information:** + +* **`allattachments`**: A newline-separated list of URLs for all attachments in the message. +* **`allattachmentsname`**: A newline-separated list of filenames for all attachments in the message. +* **`attachment`**: The URL of a specific attachment. Use `additional 1` to specify which attachment (e.g., `$msg[...;attachment additional 1]` for the first attachment). Returns `undefined` if no attachment exists or the specified attachment doesn't exist. +* **`attachmentname`**: The filename of a specific attachment. Use `additional 1` to specify which attachment (e.g., `$msg[...;attachmentname additional 1]` for the first attachment). Returns `undefined` if no attachment exists or the specified attachment doesn't exist. + +**Embed Information:** + +* **`embed`**: Returns the full embed object in JSON format. Use `additional 1` to specify which embed (e.g., `$msg[...;embed additional 1]` for the first embed). Returns an empty JSON object `{}` if no embed exists or the specified embed doesn't exist. +* **`embedtitle`**: The title of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedcolor`**: The color of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embeddesc`**: The description of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedauthortext`**: The author text of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedauthorurl`**: The author URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedauthoricon`**: The author icon URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedimage`**: The image URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedthumbnail`**: The thumbnail URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedurl`**: The URL of a specific embed's title. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedfields`**: Returns embed fields like `NAME///VALUE///INLINE//////NAME 1///VALUE 1///INLINE 2..` of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. +* **`embedfieldname`**: The name of a specific field within a specific embed. Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. +* **`embedfieldvalue`**: The value of a specific field within a specific embed. Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. +* **`embedfieldinline`**: Whether a specific field within a specific embed is displayed inline (`true` or `false`). Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. +* **`embedtimestamp`**: The timestamp of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. + +**Sticker Information:** + +* **`sticker`**: Returns a specific sticker in the message. Use `additional 1` to specify which sticker. +* **`stickers`**: Returns all the stickers in the message, separated by `, `. + +**Permission Checks:** + +* **`isdeleteable`**: Returns `true` if the command author has permission to delete the message, `false` otherwise. +* **`isdeleted`**: Returns `true` if the message has been deleted, `false` otherwise. +* **`iseditable`**: Returns `true` if the command author has permission to edit the message, `false` otherwise. +* **`ispinnable`**: Returns `true` if the command author has permission to pin the message, `false` otherwise. +* **`ispinned`**: Returns `true` if the message is pinned, `false` otherwise. + +**Components:** +* **`components`** - return all components in the message like `{button:..} {container:...}` + +**Forward Message:** +* **`isforward`** – Returns `true` if the message is a forwarded message; otherwise returns `false`. +* **`forwardsvid`** – Returns the server ID where the original forwarded message was sent. +* **`forwardmsgid`** – Returns the original message ID of the forwarded message. +* **`forwardchid`** – Returns the channel ID where the original forwarded message was posted. + + +
+ + +!!exec $msg[$channelID;79890890890809;content] + + +Old Messsage + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/noEscapingMessage.mdx b/content/docs/(functions)/Message/noEscapingMessage.mdx new file mode 100644 index 00000000..7232ba2e --- /dev/null +++ b/content/docs/(functions)/Message/noEscapingMessage.mdx @@ -0,0 +1,47 @@ +--- +title: "$noEscapingMessage" +--- + + + +This function behaves similarly to `$message`, but it **does not escape special characters**. This means characters like backticks (`) or newlines will be interpreted literally and won't be replaced with their escaped counterparts. + +## Usage +```cc +$noEscapingMessage +``` + +
+ + + +!!exec `` `$` $noEscapingMessage `` ` + + +`` `$` `` ` + + +!!exec `` `$` `` ` + + +`` `#CHAR#` `` ` + + + + + + +**ONLY use this function if you understand the implications and are comfortable handling potentially unsafe characters.** Using `$noEscapingMessage` carelessly can lead to command errors, unexpected behavior, or even security vulnerabilities. Always sanitize your inputs and be aware of the context in which this function is being used. + + + + + + +For most use cases, it's recommended to use `$message` to ensure proper character escaping and prevent unexpected issues. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/noMentionMessage.mdx b/content/docs/(functions)/Message/noMentionMessage.mdx new file mode 100644 index 00000000..77bd0229 --- /dev/null +++ b/content/docs/(functions)/Message/noMentionMessage.mdx @@ -0,0 +1,33 @@ +--- +title: "$noMentionMessage" +--- + +The `$noMentionMessage` function returns the content of the message sent by the command executor, but with all mentions removed. This is particularly useful for preventing your bot from accidentally pinging roles or users when echoing user input or using it in other command logic. + +## Usage: + +`$noMentionMessage` + +This function doesn't require any parameters. It simply returns the message content with mentions stripped out. + +#### Example: + +Let's say you want to echo the user's message in a custom command, but you don't want the bot to actually ping anyone they mentioned. + +Here's how it would look in Discord: + + + +!!exec Server Moderator testing [$noMentionMessage] ($message) + + +Server Moderator [testing] (Server Moderator testing) + + + +In this example, even though the user mentioned "Server Moderator", the bot only mentions them once and then includes "testing" (the message with mentions removed). The original message including the mention is also included. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Message/pinMessage.mdx b/content/docs/(functions)/Message/pinMessage.mdx new file mode 100644 index 00000000..f335e48d --- /dev/null +++ b/content/docs/(functions)/Message/pinMessage.mdx @@ -0,0 +1,40 @@ +--- +title: "$pinMessage" +--- + +Pins a message in a channel. This action requires the bot to have the "Manage Messages" permission in the target channel. + +## Functionality + +The `$pinMessage` function allows you to pin either the message that triggered the command or a specific message by providing its channel and message IDs. Pinned messages appear at the top of the chat for easy reference. + +## Usage + +There are two ways to use `$pinMessage`: + +**1. Pin the Command Message:** + + ```cc + $pinMessage + ``` + + This will pin the message that the command was used in. For example, if a user types `!pin This is important!` and the command includes `$pinMessage`, the message "This is important!" will be pinned. + +**2. Pin a Specific Message:** + + ```cc + $pinMessage[channelID;messageID] + ``` + + * `channelID`: The ID of the channel containing the message you want to pin. You can usually get the channel ID by right-clicking on the channel in Discord (with Developer Mode enabled) and selecting "Copy ID". + * `messageID`: The ID of the specific message you want to pin. You can usually get the message ID by right-clicking on the message in Discord (with Developer Mode enabled) and selecting "Copy ID". + + **Example:** + + To pin a message with the ID `123456789012345678` in the channel with the ID `987654321098765432`, you would use: + + ```cc + $pinMessage[987654321098765432;123456789012345678] + ``` + +**Important:** Ensure the bot has the necessary permissions ("Manage Messages") in the target channel to successfully pin messages. \ No newline at end of file diff --git a/content/docs/(functions)/Message/poll.mdx b/content/docs/(functions)/Message/poll.mdx new file mode 100644 index 00000000..556889f2 --- /dev/null +++ b/content/docs/(functions)/Message/poll.mdx @@ -0,0 +1,36 @@ +--- +title: "$poll" +--- + +retrieve information about a poll in a message + +## Usage + +```cc +$poll[Channel ID (default $channelID);Message ID (default $messageID);data] +``` + +### data options: +`name/question`: get the poll question\ +`answers`: get the poll answers count\ +`votes`: get the total votes this poll gathered\ +`answer n name`: get the nth answer name\ +`answer n emoji`: get the nth answer emoji\ +`answer n votes`: get the nth answer votes\ +`top n name`: get the nth top-ranked name\ +`top n emoji`: get the nth top-ranked answer emoji\ +`top n votes`: get the nth top-ranked answer votes\ +`multiple`: whether poll accept multiple selection (yes/no)\ +`expired`: whether poll is expired (yes/no)\ +`expiretime`: get the expiration time of the poll in ms\ +`ended`: whether poll is ended (yes/no) + +### Example: + + +!!exec Poll name: $poll[$channelID;$messageID;name]
Total votes: $poll[$channelID;$messageID;votes]
Total answers: $poll[$channelID;$messageID;answers]
1st answer name: $poll[$channelID;$messageID;answer 1 name]
2nd answer name: $poll[$channelID;$messageID;answer 2 name]
1st answer votes: $poll[$channelID;$messageID;answer 1 votes]

+
+
+ +### Output: +![](https://i.imgur.com/DRajoEQ.png) \ No newline at end of file diff --git a/content/docs/(functions)/Message/referenceChannelID.mdx b/content/docs/(functions)/Message/referenceChannelID.mdx new file mode 100644 index 00000000..93cf8d34 --- /dev/null +++ b/content/docs/(functions)/Message/referenceChannelID.mdx @@ -0,0 +1,17 @@ +--- +title: "$referenceChannelID" +--- + +Retrieves the ID of the channel containing the message a user replied to. + +This variable is useful when you need to know the channel where the original message that triggered a reply was sent. This allows you to perform actions within that channel. + +## Syntax + +```cc +$referenceChannelID +``` + +## Explanation + +`$referenceChannelID` returns the channel ID as a text. If the message isn't a reply to another message, it will return an empty text. diff --git a/content/docs/(functions)/Message/referenceMessageID.mdx b/content/docs/(functions)/Message/referenceMessageID.mdx new file mode 100644 index 00000000..b4f1aed3 --- /dev/null +++ b/content/docs/(functions)/Message/referenceMessageID.mdx @@ -0,0 +1,10 @@ +--- +title: "$referenceMessageID" +--- + +This variable holds the ID of the message that a user is replying to within a channel. + +## Explanation + +When a user replies to a specific message, the `$referenceMessageID` function is populated with the unique identifier of that original message. If the user is not replying to a specific message (i.e., they're sending a new, independent message), this function will be empty + diff --git a/content/docs/(functions)/Message/reply.mdx b/content/docs/(functions)/Message/reply.mdx new file mode 100644 index 00000000..ee447f3a --- /dev/null +++ b/content/docs/(functions)/Message/reply.mdx @@ -0,0 +1,57 @@ +--- +title: "$reply" +--- + +This command allows your bot to reply to a specific message within a channel. It's useful for referencing context or answering questions directly. + +## Usage + +```cc +$reply[messageID (optional); mention on reply (yes/no, default is no)] +``` + +**Explanation:** + +* **`$reply[...]`**: The command itself. +* **`messageID (optional)`**: The ID of the message you want the bot to reply to. If you omit this, the bot will reply to the message that triggered the command. +* **`mention on reply (yes/no, default is no)`**: Determines whether the user who sent the original message should be pinged in the reply. + * `yes`: The user will be mentioned. + * `no` (or omitting this parameter): The user will *not* be mentioned. + +## Examples + +### Example 1: Reply to User Message with Ping + +This example demonstrates how to reply to the user's message and ping them in the reply. + +```cc +Hello $username! +$reply[$messageID;yes] +``` + +**Explanation:** + +* `Hello $username!`: Greets the user (using the `$username` variable). +* `$reply[$messageID;yes]`: Replies to the message that triggered the command (because `messageID` is not explicitly specified) and mentions the user. + +**Output:** + +![](https://i.imgur.com/ekAkjX8.png) + +### Example 2: Reply to User Message without Ping + +This example shows how to reply to the user's message without mentioning them. + +```cc +Hello $username! +$reply[$messageID;no] +``` + +**Explanation:** + +* `Hello $username!`: Greets the user. +* `$reply[$messageID;no]`: Replies to the message that triggered the command and *does not* mention the user. + +**Output:** + +![](https://i.imgur.com/AAZZu4T.png) \ No newline at end of file diff --git a/content/docs/(functions)/Message/sendCrosspostingMessage.mdx b/content/docs/(functions)/Message/sendCrosspostingMessage.mdx new file mode 100644 index 00000000..72b9d0da --- /dev/null +++ b/content/docs/(functions)/Message/sendCrosspostingMessage.mdx @@ -0,0 +1,37 @@ +--- +title: "$sendCrosspostingMessage" +--- + +Send a message to multiple channels simultaneously. This function is useful for quickly broadcasting announcements or information across various channels on your server. + +## Syntax + +```cc +$sendCrosspostingMessage[message;channel1;channel2;...] +``` + +* **message:** The message content you want to send. This is the text that will be displayed in each of the specified channels. +* **channel1;channel2;...:** A semicolon-separated list of channel names or IDs where the message will be sent. Make sure the bot has permission to send messages in all specified channels. + +## Usage Notes + +* Ensure the bot has the necessary permissions (Send Messages) in each target channel. +* Channel names are case-sensitive. Using Channel IDs is more reliable to avoid any potential naming conflicts. To use a channel ID, simply replace the channel name with its numerical ID. + +## Example + +This example demonstrates sending the message "Hello World!" to the channels named `#general` and `#off-topics`. + +```cc +$sendCrosspostingMessage[Hello World!;general;off-topics] +``` + +**How to find Channel IDs:** + +To use Channel IDs instead of names, you'll need to enable Developer Mode in Discord. Go to User Settings -> Advanced, and toggle Developer Mode on. Then, right-click on the channel you want to use and select "Copy ID." You can then paste this ID into the `$sendCrosspostingMessage` function. For example: + +```cc +$sendCrosspostingMessage[Hello World!;123456789012345678;987654321098765432] +``` + +This would send "Hello World!" to the channels with IDs `123456789012345678` and `987654321098765432`. Using Channel IDs is the recommended approach for reliability. \ No newline at end of file diff --git a/content/docs/(functions)/Message/sendDM.mdx b/content/docs/(functions)/Message/sendDM.mdx new file mode 100644 index 00000000..1d8068b7 --- /dev/null +++ b/content/docs/(functions)/Message/sendDM.mdx @@ -0,0 +1,54 @@ +--- +title: "$sendDM" +--- + + + +Sends the output of the code to the message author's DMs or to the DMs of a specified user. + +## Usage +```cc +$sendDM[userID;message] +``` + +* `userID`: (Optional) The ID of the user to send the DM to. If omitted, the DM will be sent to the message author. +* `message`: The message to send in the DM. + +
+ +**Example 1: Sending a DM to the message author multiple times.** + + + +!!exec $sendDM[$authorID;I can add this multiple times in my code! This is time 1] +$sendDM[$authorID;I can add this multiple times in my code! This is time 2] + + + +
+ + + +I can add this multiple times in my code! This is time 1 + + +I can add this multiple times in my code! This is time 2 + + + + + +You can send embeds using the [Message Curl Format](/CodeReferences/ref.message_curl_format). This allows you to create richly formatted messages within the DM. + + + + + +* `$channelSendMessage`: Sends a message to a specific channel in the server. +* `$sendMessage`: Sends a message to the channel where the command was used. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/sendMessage.mdx b/content/docs/(functions)/Message/sendMessage.mdx new file mode 100644 index 00000000..a8346aec --- /dev/null +++ b/content/docs/(functions)/Message/sendMessage.mdx @@ -0,0 +1,59 @@ +--- +title: "$sendMessage" +--- + +Sends a message to the channel where the command was executed. + +## Usage +```cc +$sendMessage[message;return ID (yes/no) (optional)] +``` + +**Arguments:** + +* `message`: The content of the message to send. +* `return ID`: (Optional) Determines whether to return the ID of the sent message. Use `yes` to return the ID, `no` to not return it. Defaults to `no` if not provided. + +
+ +**Example:** + +```cc +!!exec $sendMessage[This is a fantastic message!;no] +``` + + + +!!exec $sendMessage[This is a fantastic message!;no] + + +This is a fantastic message! + + +!!exec $sendMessage[
\{description: This is a fantastic message! \}
\{color:GREEN\}
] +
+ + + +This is a fantastic message! + + + +
+ + + + +You can send more complex structures like embed titles, footers, buttons, and menus through [Message Curl Format](/CodeReferences/ref.message_curl_format). This provides greater control over the appearance and functionality of your messages. + + + + + +* `$channelSendMessage`: Send a message to a specific channel. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/sendWebhook.mdx b/content/docs/(functions)/Message/sendWebhook.mdx new file mode 100644 index 00000000..3762c982 --- /dev/null +++ b/content/docs/(functions)/Message/sendWebhook.mdx @@ -0,0 +1,49 @@ +--- +title: "$sendWebhook" +--- + +Sends a message via a Discord webhook using its ID and token. + +## Usage +```cc +$sendWebhook[webhookID;webhookToken;message;return message ID (yes/no, optional);username (optional);avatar URL (optional)] +``` + +* **webhookID:** The ID of the webhook. +* **webhookToken:** The token of the webhook. +* **message:** The message content to send. +* **return message ID (optional):** If set to `yes`, the function will return the ID of the sent message. Defaults to `no`. +* **username (optional):** The username to display for the webhook message. If not provided, the webhook's default name will be used. +* **avatar URL (optional):** The URL of the avatar to display for the webhook message. If not provided, the webhook's default avatar will be used. + +#### Example: + +```cc +!!exec $sendWebhook[98723xxxx...;K9oJxxxx...;Hello world!] +``` + +```cc +Webhook: Hello world! +``` + + + +You can customize the `username` and `avatar URL` parameters to display different names and avatars for each message. + + + + + +You can send complex messages with embeds using the [Message Curl Format](/CodeReferences/ref.message_curl_format). + + + + + +For non-premium bots, this function will behave exactly as `$sendMessage` due to rate limit avoidance mechanisms. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Message/sentMessageID.mdx b/content/docs/(functions)/Message/sentMessageID.mdx new file mode 100644 index 00000000..0f131e52 --- /dev/null +++ b/content/docs/(functions)/Message/sentMessageID.mdx @@ -0,0 +1,31 @@ +--- +title: "$sentMessageID" +--- + +Get the ID of the last sent message. + +This function allows you to retrieve the message ID of the most recently sent message within your code. This is particularly useful for subsequent actions you want to perform on that specific message, such as editing or deleting it. + +## Usage + +Simply use `$sentMessageID` in your commands to reference the last message's ID. + +```cc +$sentMessageID +``` + +### Example: Deleting a Sent Message After 3 Seconds + +This example demonstrates how to send a message, wait for 3 seconds, and then delete the message using its ID obtained with `$sentMessageID`. + +```cc +$sendMessage[Hello World] +$wait[3s] +$deleteMessage[$sentMessageID] +``` + +**Explanation:** + +1. `$sendMessage[Hello World]`: Sends the message "Hello World" to the current channel. +2. `$wait[3s]`: Pauses the script execution for 3 seconds. +3. `$deleteMessage[$sentMessageID]`: Deletes the message whose ID is stored in the `$sentMessageID` function. Since the `$sendMessage` command was executed immediately before, `$sentMessageID` contains the ID of the "Hello World" message. \ No newline at end of file diff --git a/content/docs/(functions)/Message/unpinMessage.mdx b/content/docs/(functions)/Message/unpinMessage.mdx new file mode 100644 index 00000000..7cf8c59a --- /dev/null +++ b/content/docs/(functions)/Message/unpinMessage.mdx @@ -0,0 +1,46 @@ +--- +title: "$unpinMessage" +--- + +Unpins a specific message from a channel. You can either unpin the message that triggered the command, or unpin a message in another channel by providing the channel and message IDs. + +## Syntax + +```cc +$unpinMessage +$unpinMessage[channelID;messageID] +``` + +* **`$unpinMessage`**: Unpins the message that triggered the command. Requires `Manage Messages` permission in the channel. +* **`$unpinMessage[channelID;messageID]`**: Unpins a specific message in the specified channel. Requires `Manage Messages` permission in the channel specified by `channelID`. + +## Parameters + +* **`channelID`**: (Optional) The ID of the channel where the message to unpin is located. +* **`messageID`**: (Optional) The ID of the message to unpin. + + **Note:** If `channelID` is provided, `messageID` must also be provided. + +## Examples + +**1. Unpinning the message that triggered the command:** + +This will unpin the message the user sent that triggered the command (e.g., a command like `$unpinMessage`). + +```cc +$unpinMessage +``` + +**2. Unpinning a specific message in another channel:** + +This will unpin the message with ID `987654321098765432` from the channel with ID `123456789012345678`. Replace these with the actual Channel and Message IDs you wish to unpin. + +```cc +$unpinMessage[123456789012345678;987654321098765432] +``` + +**Important Considerations:** + +* The bot requires the `Manage Messages` permission in the channel where the message is being unpinned. +* Make sure the provided `channelID` and `messageID` are valid IDs. +* If the message is already unpinned, the function will not return an error. \ No newline at end of file diff --git a/content/docs/(functions)/Message/webhookExists.mdx b/content/docs/(functions)/Message/webhookExists.mdx new file mode 100644 index 00000000..8f5d4395 --- /dev/null +++ b/content/docs/(functions)/Message/webhookExists.mdx @@ -0,0 +1,28 @@ +--- +title: "$webhookExists" +--- + +Checks if a webhook exists using its ID and token. Returns `true` if the webhook exists, and `false` otherwise. + +## Usage: + +`$webhookExists[webhookID;webhookToken]` + +* **webhookID:** The ID of the webhook to check. +* **webhookToken:** The token of the webhook to check. + +
+ + + +!!exec $webhookExists[940749xx...;Oc_BoyAWxx...] + + +true + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Random/meta.json b/content/docs/(functions)/Random/meta.json new file mode 100644 index 00000000..24e1d9b4 --- /dev/null +++ b/content/docs/(functions)/Random/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Random Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Random/random.mdx b/content/docs/(functions)/Random/random.mdx new file mode 100644 index 00000000..470ac87b --- /dev/null +++ b/content/docs/(functions)/Random/random.mdx @@ -0,0 +1,48 @@ +--- +title: "$random" +--- + +This function returns a random number within a specified range. + +## Usage: + +`$random[min;max;allowDecimals (yes/no)(optional, default=no)]` + +* **min:** The minimum value of the range (inclusive). +* **max:** The maximum value of the range. The behavior of this value depends on whether decimals are allowed: + * **If `allowDecimals` is `no` (or omitted):** `max` is *inclusive*. The random number will be between `min` and `max`, *including* `max`. + * **If `allowDecimals` is `yes`:** `max` is *exclusive*. The random number will be between `min` and `max`, *not including* `max`. +* **allowDecimals:** An optional parameter specifying whether the random number can be a decimal. Defaults to `no` (integers only). Acceptable values are `yes` or `no`. + +## Important Notes: + +* Remember that `max` is treated differently depending on whether `allowDecimals` is set to `yes` or `no`. + +
+ +**Example:** + +```cc +!!exec $random[1;6] +``` + +This command will return a random integer between 1 and 6 (inclusive). Possible outputs: 1, 2, 3, 4, 5, or 6. + + + +!!exec `$random[1;6]` + + +4 + + + +**More Examples:** + +* `$random[0;1;yes]` - Returns a random decimal number between 0 (inclusive) and 1 (exclusive), such as `0.345`. +* `$random[5;10]` - Returns a random integer between 5 and 10 (inclusive). +* `$random[-10;10;yes]` - Returns a random decimal number between -10 (inclusive) and 10 (exclusive). + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Random/randomChannelID.mdx b/content/docs/(functions)/Random/randomChannelID.mdx new file mode 100644 index 00000000..e60f49d9 --- /dev/null +++ b/content/docs/(functions)/Random/randomChannelID.mdx @@ -0,0 +1,30 @@ +--- +title: "$randomChannelID" +--- + +This function returns a random Channel ID from any channel within the server. + +## Usage: + +Simply use `$randomChannelID` in your command or custom function. + +
+ +**Example:** + +```cc +!!exec $randomChannelID +``` + +**Result:** + +```cc +37907890789087988 +``` + +This will output a random channel ID from the server where the command is executed. The actual ID returned will, of course, be different each time. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Random/randomMention.mdx b/content/docs/(functions)/Random/randomMention.mdx new file mode 100644 index 00000000..d25ec47f --- /dev/null +++ b/content/docs/(functions)/Random/randomMention.mdx @@ -0,0 +1,36 @@ +--- +title: "$randomMention" +--- + +Returns a random mention from the current server. This function is useful for things like raffles, giveaways, or randomly selecting a user. + +## Usage: + +```cc +$randomMention +``` + +
+ +**Example:** + +This example shows how to use `$randomMention` to mention a random user in a command. + + + +!!exec $randomMention + + +@Lisa + + + + + +The mentions returned by this function are pulled from the server's cached member list. This means that if all members haven't been cached yet (common in larger servers, especially those below "Tier 5" boosting), it may not include *every* member in the server. For best results, ensure your bot has access to all members. + + + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Random/randomRoleID.mdx b/content/docs/(functions)/Random/randomRoleID.mdx new file mode 100644 index 00000000..d2753f0f --- /dev/null +++ b/content/docs/(functions)/Random/randomRoleID.mdx @@ -0,0 +1,33 @@ +--- +title: "$randomRoleID" +--- + +This function returns a random Role ID from a Role present in the server. It's a simple way to pick a random role ID for various purposes in your custom commands. + +## Usage: + +```cc +$randomRoleID +``` + +
+ +**Example:** + +Here's how you can use `$randomRoleID` in a custom command: + + + +!!exec $randomRoleID + + +82907890789087988 + + + +In this example, the command `!!exec $randomRoleID` will output a random role ID from your server (e.g., `82907890789087988`). + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Random/randomString.mdx b/content/docs/(functions)/Random/randomString.mdx new file mode 100644 index 00000000..fa37211a --- /dev/null +++ b/content/docs/(functions)/Random/randomString.mdx @@ -0,0 +1,32 @@ +--- +title: "$randomString" +--- + +Generates a random string of a specified length. This function is useful for creating unique identifiers, temporary passwords, or simply adding randomness to your commands. + +## Usage: + +`$randomString[length]` + +* `length`: (Required) The desired length of the random string. This should be a positive integer. + +
+ +#### Example: + +This example demonstrates how to use `$randomString` to generate a 6-character random string. + + + +!!exec `$randomString[6]` + + +qe90bT + + + +In this example, the command `!!exec $randomString[6]` will generate a random string of 6 characters, such as `qe90bT`. The output will vary each time the command is executed. + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Random/randomText.mdx b/content/docs/(functions)/Random/randomText.mdx new file mode 100644 index 00000000..265b1928 --- /dev/null +++ b/content/docs/(functions)/Random/randomText.mdx @@ -0,0 +1,41 @@ +--- +title: "$randomText" +--- + +Returns a random text from a list of provided texts. This function is useful for creating variety in your bot's responses. + +## Usage: + +`$randomText[text1;text2;text3;...]` + +* **text1;text2;text3;...**: A semicolon-separated list of texts. The function will randomly choose one of these texts to return. + +
+ +**Example:** + +```cc +$randomText[Hello;Hi;Hey] +``` + +This example will randomly return either "Hello", "Hi", or "Hey". + +
+ + + +!!exec `$randomText[I'm sad;I'm very happy]` + + +I'm very happy + + + +**Explanation:** + +In this example, the command `!!exec $randomText[I'm sad;I'm very happy]` instructs the bot to execute the `$randomText` function with the options "I'm sad" and "I'm very happy". The bot randomly selects one of these options and returns it, in this case, "I'm very happy". + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Random/randomTextBiased.mdx b/content/docs/(functions)/Random/randomTextBiased.mdx new file mode 100644 index 00000000..edca7b54 --- /dev/null +++ b/content/docs/(functions)/Random/randomTextBiased.mdx @@ -0,0 +1,68 @@ +--- +title: "$randomTextBiased" +--- + +Similar to `$randomText`, but with weighted randomness! This allows you to influence the probability of specific text being selected. + +## Usage + +```cc +$randomTextBiased[Text1,Weight1;Text2,Weight2;Text3,Weight3] +``` + +**Explanation:** + +* `Text1`, `Text2`, `Text3`: The text options you want to randomly select from. +* `Weight1`, `Weight2`, `Weight3`: Numerical values representing the weight or probability associated with each corresponding text option. **Higher weight = Higher chance of selection.** + +**Important:** + +* Separate each `Text,Weight` pair with a semicolon (`;`). +* Weights don't need to add up to 100; they are relative to each other. + +### Note: + +The higher the weight a text option has, the more likely it is to be selected. For example, an item with a weight of 80 is much more likely to be chosen than an item with a weight of 2. + +### Example: Reward Box with Varying Rarities + +This example demonstrates a reward box system where the rarity of the reward is weighted. + +**Command:** + +```cc +!!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box +``` + +**Explanation:** + +* `Common` has a weight of `80`, making it the most likely outcome. +* `Rare` has a weight of `10`. +* `Epic` has a weight of `8`. +* `Platinum` has a weight of `2`, making it the least likely outcome. + +**Possible Outcomes:** + +Here are a couple of example scenarios demonstrating the range of possibilities: + +**Example (Unlucky guy):** + + + +!!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box

+
+ +Your reward is: Common Box

+
+
+ +**Example (Lucky guy):** + + + +!!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box

+
+ +Your reward is: Epic Box + +
\ No newline at end of file diff --git a/content/docs/(functions)/Random/randomUserID.mdx b/content/docs/(functions)/Random/randomUserID.mdx new file mode 100644 index 00000000..c795b2f1 --- /dev/null +++ b/content/docs/(functions)/Random/randomUserID.mdx @@ -0,0 +1,33 @@ +--- +title: "$randomUserID" +--- + +Retrieves a random user ID from a user within the server. + +## Usage: + +```cc +$randomUserID +``` + +
+ + + +!!exec $randomUserID + + +97907890789087988 + + + + + +The user ID is selected randomly from the server's cached members. This means the returned user ID might not always represent a currently active member, especially if all guild members are not cached (typically only guaranteed in higher server tiers). + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Random/resetRandom.mdx b/content/docs/(functions)/Random/resetRandom.mdx new file mode 100644 index 00000000..c5d38aba --- /dev/null +++ b/content/docs/(functions)/Random/resetRandom.mdx @@ -0,0 +1,28 @@ +--- +title: "$resetRandom" +--- + +The `$resetRandom` function clears the stored seed used by the `$random` function, effectively resetting the random number generator. This means that subsequent calls to `$random` will generate a new sequence of random numbers, potentially different from the previous sequence before the reset. This is useful when you want to ensure a fresh set of random numbers. + +## Usage +```cc +$resetRandom +``` + +**Explanation:** + +When you use `$random` multiple times without resetting, it might produce the same number due to how it's seeded. `$resetRandom` ensures each subsequent `$random` call behaves truly randomly by clearing that internal seed. + +**Example:** + + + !!exec Picked Number: $random[1;6]
Another Picked Number: $random[1;6]
$resetRandom
Picked Number After Reset: $random[1;6] +
+ + Picked Number: 5
Another Picked Number: 5
Picked Number After Reset: 3 +
+
+ + + +**Function difficulty:** diff --git a/content/docs/(functions)/Request/httpRequest.mdx b/content/docs/(functions)/Request/httpRequest.mdx new file mode 100644 index 00000000..8fde543a --- /dev/null +++ b/content/docs/(functions)/Request/httpRequest.mdx @@ -0,0 +1,88 @@ +--- +title: "$httpRequest" +--- + +Performs an HTTP request with the specified content and headers, then returns the response body. + +## Usage + +```cc +$httpRequest[URL;Method;Content;Header 1;Header 2;...] +``` + +## Parameters + +### Method + +Supported HTTP methods: + +* `GET` +* `POST` +* `PUT` +* `PATCH` +* `DELETE` +* `HEAD` + +If no method is provided, `GET` is used by default. + +### Content + +The request body to send. + +The format of the content should match the `Content-Type` header. For example, if you specify: + +```text +Content-Type: application/json +``` + +the content should be valid JSON. + +### Headers + +Headers should be provided in the following format: + +```text +Header-Name: Value +``` + +For example: + +```text +Content-Type: application/json +``` + +You can provide as many headers as needed. + +## Timeout + +Requests automatically timeout after **1 minute**. + +For **Tier 4 and above**, the timeout is extended to **30 minutes**. + +## Example + +### Sending a JSON request + + + +!!exec $let[response;$httpRequest[My API URL;post;\{"name":"Mido"};Content-Type: application/json]]
Response is $response
Response Status is $httpRequestStatus

+
+ +Response is \{"success":true}
Response Status is 200

+
+
+ +## Notes + +* This function **does not throw an error** when the server returns a non-success status code (such as `404` or `500`). Always check `$httpRequestStatus` to verify that the request completed successfully. +* The response body must be **smaller than 1 MB**. Requests that exceed this limit will be rejected. +* The destination URL must be **whitelisted** before it can be used. If the URL has not yet been approved, please open a ticket in our Support Server to request whitelisting. + +## Related Functions + +* `$httpRequestStatus` +* `$httpRequestHeader` + +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Request/httpRequestHeader.mdx b/content/docs/(functions)/Request/httpRequestHeader.mdx new file mode 100644 index 00000000..faf47e9c --- /dev/null +++ b/content/docs/(functions)/Request/httpRequestHeader.mdx @@ -0,0 +1,35 @@ +--- +title: "$httpRequestHeader" +--- + +Returns the value of a given header from the last request. + +## Usage + +```cc +$httpRequestHeader[header name] +``` +1. **header name** - The header name to return value from. (case-insensitive) + +## Example + +#### Using $httpRequestHeader + +How to return Content-Type from last request + + + +!!exec $httpRequest[https://api.example.com/]
+Content-Type Header: $httpRequestHeader[content-type] +
+ +\{"message": "Api response!"}
+Content-Type Header: application/json +
+
+ +**Related Functions:** `$httpRequest` `$httpRequestStatus` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Request/httpRequestStatus.mdx b/content/docs/(functions)/Request/httpRequestStatus.mdx new file mode 100644 index 00000000..494c9df7 --- /dev/null +++ b/content/docs/(functions)/Request/httpRequestStatus.mdx @@ -0,0 +1,34 @@ +--- +title: "$httpRequestStatus" +--- + +Returns the $httpRequest status code of the last request. + +## Usage + +```cc +$httpRequestStatus +``` + +## Example + +#### Using $httpRequestStatus + +How to use $httpRequestStatus to display status code of request + + + +!!exec $httpRequest[https://api.example.com/]
+Code: $httpRequestStatus +
+ +Api response!
+Code: 200 +
+
+ +**Related Functions:** `$httpRequest` `$httpRequestHeader` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Request/meta.json b/content/docs/(functions)/Request/meta.json new file mode 100644 index 00000000..5df44260 --- /dev/null +++ b/content/docs/(functions)/Request/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Http Requests functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Role/blackListRoleIDs.mdx b/content/docs/(functions)/Role/blackListRoleIDs.mdx new file mode 100644 index 00000000..c5b457bf --- /dev/null +++ b/content/docs/(functions)/Role/blackListRoleIDs.mdx @@ -0,0 +1,50 @@ +--- +title: "$blackListRoleIds" +--- + +This function prevents users with specific roles from using a command. You specify the role IDs and an error message to display when someone with a blacklisted role tries to execute the command. + +## Usage +```cc +$blackListRoleIDs[roleID;roleID;...;error message] +``` + +* **roleID:** The ID of the role you want to blacklist. Separate multiple role IDs with a semicolon (;). +* **error message:** The message the bot will send if a user with a blacklisted role tries to use the command. + +
+ +**Example:** + +Let's say you have a command `!ban` and you want to prevent users with a specific role from using it. + +```cc +$blackListRoleIds[9872xx..;You are not authorized to use this command!] +$ban[$mentioned[1]] +Successfully banned user. +``` + +**Explanation:** + +* `$blackListRoleIds[9872xx..;You are not authorized to use this command!]`: This line checks if the user executing the command has the role with the ID `9872xx..`. If they do, the bot will reply with "You are not authorized to use this command!". +* `$ban[$mentioned[1]]`: This line executes the ban command, banning the mentioned user. It only executes if the user does *not* have a blacklisted role. +* `Successfully banned user.`: This line sends a confirmation message after a successful ban. + + + +!ban @RAKE + + +You are not authorized to use this command! + + + + + +You can send an embed instead of a simple text message by using the [Message Curl Format](/CodeReferences/ref.message_curl_format) in your error message. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/colorRole.mdx b/content/docs/(functions)/Role/colorRole.mdx new file mode 100644 index 00000000..93bafd63 --- /dev/null +++ b/content/docs/(functions)/Role/colorRole.mdx @@ -0,0 +1,24 @@ +--- +title: "$colorRole" +--- + +Changes the color of given role ID + +## Usage +```cc +$colorRole[Role ID;Primary Color (i.e hex or int);Second Color (optional);Third Color (optional)] +``` + +### Example (Primary Color) +```cc +$colorRole[Role name;green] +``` + +### Example (Gradient) +```cc +$colorRole[Role name;green;red] +``` + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/createRole.mdx b/content/docs/(functions)/Role/createRole.mdx new file mode 100644 index 00000000..e046d7a9 --- /dev/null +++ b/content/docs/(functions)/Role/createRole.mdx @@ -0,0 +1,41 @@ +--- +title: "$createRole" +--- + +Creates a role in the server + +## Usage: +`$createRole[name;color (optional);mentionable (optional);hoisted (optional);position (optional);permission;permission;...;return role id (yes/no, default no, optional)]` + +#### Parameters: +* **name:** The name of the role to create. +* **color (optional):** The color of the role in hexadecimal format (e.g., `#ffa500` for orange). +* **mentionable (optional):** Whether the role can be mentioned (true/false). Defaults to `false`. +* **hoisted (optional):** Whether the role is displayed separately in the member list (true/false). Defaults to `false`. +* **position (optional):** The position of the role in the role hierarchy. Lower numbers appear higher in the list. +* **permission;permission;...:** A list of permissions to grant to the role. Refer to the [Permission List](/CodeReferences/ref.permissions_list) for valid permission names. +* **return role id (yes/no, optional):** Specifies whether to return the ID of the newly created role. Defaults to `no`. If set to `yes`, the function will return the role ID. + +#### Example: +`$createRole[Orange;#ffa500]` +This will create a role with the name "Orange" and the color orange. + +`$createRole[Moderator;#00ff00;true;true;;managemessages;kick;yes]` +This will create a role named "Moderator" with a green color, set as mentionable and hoisted and give it the manage messages and kick user permission. The ID of the created role is returned by the function. + + + +For a comprehensive list of available permissions, please see the [Permission List](/CodeReferences/ref.permissions_list). + + + + + + +`$createChannel`, creates a channel + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/deleteRoles.mdx b/content/docs/(functions)/Role/deleteRoles.mdx new file mode 100644 index 00000000..83c73ad0 --- /dev/null +++ b/content/docs/(functions)/Role/deleteRoles.mdx @@ -0,0 +1,39 @@ +--- +title: "$deleteRoles" +--- + +Deletes one or more roles from the server. + +## Usage: + +`$deleteRoles[roleID1;roleID2;roleID3;...]` + +**Parameters:** + +* `roleID1;roleID2;roleID3;...`: A semicolon-separated list of role IDs to delete. You can specify multiple role IDs to delete several roles at once. + +#### Example: + +`$deleteRoles[879889890890890]` + +This will delete the role with the ID `879889890890890`. + +**Example with multiple roles:** + +`$deleteRoles[879889890890890;987654321098765]` + +This will delete the role with the ID `879889890890890` and the role with the ID `987654321098765`. + + + + +* `$deleteChannels`: Deletes one or more channels. +* `$deleteThreads`: Deletes one or more threads. + + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/findRole.mdx b/content/docs/(functions)/Role/findRole.mdx new file mode 100644 index 00000000..757e7275 --- /dev/null +++ b/content/docs/(functions)/Role/findRole.mdx @@ -0,0 +1,54 @@ +--- +title: "$findRole" +--- + +Searches for a role by its ID, mention, or name. This function allows you to retrieve a role's ID based on the provided search query. + +## Usage: + +`$findRole[ID/mention/name;return current channelID, (yes/no) (Optional, default=yes)]` + +**Parameters:** + +* **`ID/mention/name`**: The ID, mention, or name of the role you want to find. +* **`return current channelID, (yes/no)`** (Optional): Determines whether to return the current channel's ID if the role is found. + * `yes` (Default): Returns the current channel ID along with the role ID (e.g., `869243919697846379,123456789012345678` where the first number is the Role ID and the second one is the Channel ID). + * `no`: Returns only the role ID. + +**Example:** + +Finding a role named "Mika#6359" and not returning the current channel ID: + +
+ + +!!exec $findRole[Mika#6359;no] + + +869243919697846379 + + + +**Example (Role Not Found):** + +If the role is not found, the function will return `undefined`. + +
+ + +!!exec $findRole[mika#6359;no] + + +undefined + + + + + +* `$roleID`: Returns the role ID based on the role's name. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/getRoleColor.mdx b/content/docs/(functions)/Role/getRoleColor.mdx new file mode 100644 index 00000000..7d2f6623 --- /dev/null +++ b/content/docs/(functions)/Role/getRoleColor.mdx @@ -0,0 +1,32 @@ +--- +title: "$getRoleColor" +--- + +Retrieves the hexadecimal color code of a role. + +## Usage +```cc +$getRoleColor[roleID] +``` + +**Arguments:** + +* `roleID`: The ID of the role whose color you want to retrieve. This can be obtained using functions like `$mentioned[1]` or `$findRole[roleName]`. + +
+ +**Example:** + +Let's say you want to get the color of the role with the ID `123456789012345678`. You would use: + +```cc +$getRoleColor[123456789012345678] +``` + +This would return the hex color code of the role, such as `#FF0000` (red). + +
+ +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Role/giveRoles.mdx b/content/docs/(functions)/Role/giveRoles.mdx new file mode 100644 index 00000000..f1b93554 --- /dev/null +++ b/content/docs/(functions)/Role/giveRoles.mdx @@ -0,0 +1,44 @@ +--- +title: "$giveRoles" +--- + +Grants one or more roles to a specified user. + +## Usage: + +`$giveRoles[userID;roleID 1;roleID 2;roleID 3;...]` + +* **userID:** The ID of the user you want to give roles to. +* **roleID 1;roleID 2;roleID 3;...:** A semicolon-separated list of role IDs to grant to the user. + +
+ +**Example:** + +This example grants the "Muted" role to the command executor. + + + +!!exec $giveRoles[$authorID;$roleID[Muted]] + + + + + +* ``$roleID``: Retrieves a role's ID based on its name. +* ``$authorID``: Returns the ID of the command executor (the user who ran the command). + + + + + +* ``$toggleRoles``: Toggles a user's roles (adds if they don't have it, removes if they do). +* ``$takeRoles``: Removes roles from a user. +* ``$setRoles``: Removes all roles from a user and then grants only the specified roles. + + + +**Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/guildRoles.mdx b/content/docs/(functions)/Role/guildRoles.mdx new file mode 100644 index 00000000..cb4a588a --- /dev/null +++ b/content/docs/(functions)/Role/guildRoles.mdx @@ -0,0 +1,45 @@ +--- +title: "$guildRoles" +--- + +Returns a list of all roles in the guild, displaying their names, IDs, or mentions. + +You can specify the type of information you want (ID, name, or mention) and limit the number of roles returned. + +## Usage: + +`$guildRoles[type;amount;separator]` + +**Parameters:** + +* `type` (Optional): Determines what information to return for each role. Possible values are: + * `id`: Returns the role's ID. + * `name`: Returns the role's name. (Default) + * `mention`: Returns the role's mention. +* `amount` (Optional): The maximum number of roles to return. If omitted, all roles will be returned. +* `separator` (Optional): The separator between the returned list, default is ', ' + +
+ +**Example:** + +This example shows how to retrieve the IDs of all roles in the guild. + + + +!!exec $guildRoles[id] + + +869243918787686431, 869243918817058856, 869243918489878654, 869250889813213244, 871289098231513098, 869251802556678154, 869243918489878650, 878284024232165407, 869249016213422150, 869250128136003614, 869243918787686434, 869248264426356736, 869243918787686436, 869243918489878657, 869243918489878653, 869250129272651787, 869250127347453992, 869250888106115092, 869243918787686430, 869243918787686432, 869243918817058857, 869249218169147422, 869243918489878652, 869244293959794720, 869250129901813820 + + + + + +* `$roleID`: Retrieves a role ID by its name. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/hasRole.mdx b/content/docs/(functions)/Role/hasRole.mdx new file mode 100644 index 00000000..a3601562 --- /dev/null +++ b/content/docs/(functions)/Role/hasRole.mdx @@ -0,0 +1,35 @@ +--- +title: "$hasRole" +--- + +Determines if a user possesses a specific role within the server. Returns `true` if the user has the role, and `false` otherwise. + +## Usage +```cc +$hasRole[userID;roleID] +``` + +* **userID:** The ID of the user you want to check. You can use `$authorID` to check the message author. +* **roleID:** The ID of the role you want to check for. + +
+ +**Example:** + +Checks if the message author has the role with the ID `99871..xx`. + + + +!!exec $hasRole[$authorid;99871..xx] + + +false + + + +
+ +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/highestRole.mdx b/content/docs/(functions)/Role/highestRole.mdx new file mode 100644 index 00000000..17025c3d --- /dev/null +++ b/content/docs/(functions)/Role/highestRole.mdx @@ -0,0 +1,43 @@ +--- +title: "$highestRole" +--- + +Retrieves the highest role (in terms of hierarchy) a user has in the current guild. + +## Usage: + +`$highestRole[userID]` - Returns the highest role of the user with the specified `userID`. + +`$highestRole` - Returns the highest role of the command executor (the user who triggered the command). + +
+ +**Example:** + +This example shows how to use `$highestRole` with `$roleName` to output the role's name. + +```cc +!!exec $roleName[$highestRole] +``` + +**Result:** + +(Assuming the user's highest role is "Admin") + +```cc +Admin +``` + + + +!!exec $roleName[$highestRole] + + +Admin + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/highestServerRole.mdx b/content/docs/(functions)/Role/highestServerRole.mdx new file mode 100644 index 00000000..5ce8a247 --- /dev/null +++ b/content/docs/(functions)/Role/highestServerRole.mdx @@ -0,0 +1,18 @@ +--- +title: "$highestServerRole" +--- + +Retrieves the ID of the server's highest role. This is the role with the highest position in the server's role hierarchy. + +## Usage +```cc +$highestServerRole +``` + +This function is very simple to use and requires no arguments. It will simply return the ID of the highest role on the server where the command is executed. + +
+ +**Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/lowestRole.mdx b/content/docs/(functions)/Role/lowestRole.mdx new file mode 100644 index 00000000..71e76ced --- /dev/null +++ b/content/docs/(functions)/Role/lowestRole.mdx @@ -0,0 +1,39 @@ +--- +title: "$lowestRole" +--- + +Returns the user's lowest role in the current guild. You can specify a user ID, or if omitted, it will use the command executor (the user who ran the command). "Lowest" refers to the role with the lowest position in the server's role hierarchy (typically, the role created first). + +## Usage: + +* `$lowestRole[userID]` - Returns the lowest role for the user with the specified `userID`. +* `$lowestRole` - Returns the lowest role for the user who executed the command. + +
+ +**Example:** + +This example retrieves the role ID of the user's lowest role and displays it. + +```cc +!!exec $roleName[$lowestRole] +``` + +**Explanation:** + +* `!!exec` is used to execute a custom command. +* `$lowestRole` retrieves the lowest role of the command executor. +* `$roleName` retrieves the ID of the role obtained from `$lowestRole`. + +**Discord Output:** + +```cc +Member +``` + +(The bot will output the role ID of the user's lowest role. This example only provides a placeholder "Member".) + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/lowestServerRole.mdx b/content/docs/(functions)/Role/lowestServerRole.mdx new file mode 100644 index 00000000..a8400bcd --- /dev/null +++ b/content/docs/(functions)/Role/lowestServerRole.mdx @@ -0,0 +1,17 @@ +--- +title: "$lowestServerRole" +--- + +Retrieves the ID of the server's lowest role (the role with the highest position in the role hierarchy). + +## Usage +```cc +$lowestServerRole +``` + +This function returns the ID of the role that's at the bottom of your server's role list. Think of it as the highest role in terms of permissions and precedence. + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/mentionRole.mdx b/content/docs/(functions)/Role/mentionRole.mdx new file mode 100644 index 00000000..75d7994e --- /dev/null +++ b/content/docs/(functions)/Role/mentionRole.mdx @@ -0,0 +1,23 @@ +--- +title: "$mentionRole" +--- + +mention a role by name or id + +## Usage + +```cc +$mentionRole[Name/ID] +``` + +### Example: +```cc +$mentionRole[Member] + + +``` + +### Example: +```cc +$mentionRole[1234567898765431] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Role/meta.json b/content/docs/(functions)/Role/meta.json new file mode 100644 index 00000000..2e3cc6e0 --- /dev/null +++ b/content/docs/(functions)/Role/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Role Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Role/modifyRole.mdx b/content/docs/(functions)/Role/modifyRole.mdx new file mode 100644 index 00000000..4bbe15f1 --- /dev/null +++ b/content/docs/(functions)/Role/modifyRole.mdx @@ -0,0 +1,71 @@ +--- +title: "$modifyRole" +--- + +Modifies the properties of a role, such as its name, color, mentionability, hoisted status, and position. + +## Usage: + +`$modifyRole[roleID;name (optional);color (optional);mentionable (yes/no, optional);hoisted (yes/no, optional);position (optional)]` + +#### Parameters: + +* `roleID`: The ID of the role you want to modify. +* `name` (Optional): The new name for the role. If omitted, the role's name will remain unchanged. +* `color` (Optional): The new hexadecimal color code for the role (e.g., `#666666`). If omitted, the role's color will remain unchanged. +* `mentionable` (Optional): Whether the role can be mentioned. Use `yes` to make it mentionable and `no` to prevent it from being mentioned. If omitted, the role's mentionability will remain unchanged. +* `hoisted` (Optional): Whether the role should be displayed separately in the member list. Use `yes` to hoist the role and `no` to prevent it from being hoisted. If omitted, the role's hoisted status will remain unchanged. +* `position` (Optional): The new position of the role in the role hierarchy (an integer). If omitted, the role's position will remain unchanged. Lower numbers are higher in the hierarchy. Use with caution. + +#### Example: + +`$modifyRole[$roleID[moderators];New Moderator Name;#666666;yes;yes;1]` + +This example will: + +* Find the role named "moderators" using `$roleID[moderators]`. +* Change the role's name to "New Moderator Name". +* Set the role's color to `#666666` (a gray color). +* Make the role mentionable. +* Hoist the role. +* Set the role's position to 1 (highest position). + +**Example Without All Parameters:** + +`$modifyRole[$roleID[moderators];;;#666666;yes;yes]` + +This example will: + +* Find the role named "moderators" using `$roleID[moderators]`. +* Set the role's color to `#666666` (a gray color). +* Make the role mentionable. +* Hoist the role. +* Leave the name and position as they are. + + + + +* You can omit parameters by leaving them blank (e.g., `;;` to skip the name and color). +* Use caution when modifying role positions, as incorrect positions can affect permissions. +* The color parameter must be a valid hexadecimal color code. + + + + + + +* `$roleID`D by its name. + + + + + + +* `$editChannel`: Modifies the name or category of a channel. +* `$modifyRolePerms`: Modifies the permissions of a role. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/modifyRolePerms.mdx b/content/docs/(functions)/Role/modifyRolePerms.mdx new file mode 100644 index 00000000..ef869c69 --- /dev/null +++ b/content/docs/(functions)/Role/modifyRolePerms.mdx @@ -0,0 +1,56 @@ +--- +title: "$modifyRolePerms" +--- + +Modifies the permissions of a specified role. + +## Usage: + +`$modifyRolePerms[roleID;+perm1;-perm2;/perm3;+perm4;...]` + +#### Parameters: + +* **`roleID`:** The ID of the role to modify. +* **`+perm1;-perm2;/perm3;+perm4;...`:** A semicolon-separated list of permission modifications. + + * Use `+` to **grant** a permission. + * Use `-` to **deny** a permission. + * Use `/` to **reset** a permission to its default value. + +#### Example: + +`$modifyRolePerms[$roleID[muted];-sendmessages;]` + +This example modifies the permissions of the role named "muted" so that members with this role will not be able to send messages in the server. + + + +Refer to this [list](/CodeReferences/ref.permissions_list) for a complete overview of available permission names. + + + + + +* **`$roleID`:** Returns a role ID based on its name. + + + + + +* **`$modifyChannelPerms`:** Modifies the permissions of a channel. +* **`$modifyRole`:** Edits a role's name or color. + + + + + +* Use a `+` sign to grant a specific permission. +* Use a `-` sign to deny a specific permission. +* Use a `/` sign to reset a permission to its default state (neither granted nor denied). + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/modifyUserRoles.mdx b/content/docs/(functions)/Role/modifyUserRoles.mdx new file mode 100644 index 00000000..2c5c8732 --- /dev/null +++ b/content/docs/(functions)/Role/modifyUserRoles.mdx @@ -0,0 +1,36 @@ +--- +title: "$modifyUserRoles" +--- + +This function allows you to modify a user's roles by adding, removing, or toggling them. You can perform multiple operations in a single function call. + +**Operations (op):** + +* `+`: **Add** the specified role. +* `-`: **Remove** the specified role. +* `~`: **Toggle** the role (add if the user doesn't have it, remove if they do). + +## Usage + +```cc +$modifyUserRoles[User ID;[op]Role 1;[op]Role 2;...] +``` + +**Parameters:** + +* **`User ID`**: The ID of the user whose roles you want to modify. +* **`[op]Role N`**: A series of role modifications. Each modification consists of an *operation* (`+`, `-`, or `~`) followed by the *role name or ID*. Separate each role modification with a semicolon (`;`). + +## Example + +Let's say you want to add the "VIP" role and remove the "Newbie" role from a user. Here's how you would do it: + +```cc +$modifyUserRoles[$authorID;+VIP;-Newbie] +``` + +In this example: + +* `$authorID` represents the ID of the message author (the user whose roles you want to modify). +* `+VIP` adds the "VIP" role to the user. +* `-Newbie` removes the "Newbie" role from the user. \ No newline at end of file diff --git a/content/docs/(functions)/Role/role.mdx b/content/docs/(functions)/Role/role.mdx new file mode 100644 index 00000000..1c9eb1a4 --- /dev/null +++ b/content/docs/(functions)/Role/role.mdx @@ -0,0 +1,62 @@ +--- +title: "$role" +--- + +A powerful and compact function to retrieve various properties of a Discord role! + +## Usage +```cc +$role[roleid;property] +```` + +This function takes two arguments: + +* `roleid`: The ID of the role you want to get information from. +* `property`: The specific piece of information you want to retrieve. + +#### Supported Properties: + +Here's a list of the available properties you can use with the `$role` function: + +* `name`: The role's name (e.g., "Moderator"). +* `mention`: The role's mention string (e.g., `<@&1234567890>`). +* `id`: The role's ID (e.g., `1234567890`). +* `hex`: The role's color in hexadecimal format (e.g., `FF0000` for red). +* `color`: The role's primary color as a 10-base number. +* `primaryColor`: Same as `color`. +* `secondColor`: The role's secondary color as a 10-base number, if it has a gradient color. +* `thirdColor`: The role's third color as a 10-base number, if it has a third color. +* `primaryHex`: The role's primary color in hexadecimal format. +* `secondHex`: The role's secondary color in hexadecimal format, or `undefined` if no secondary color is set. +* `thirdHex`: The role's third color in hexadecimal format, or `undefined` if no third color is set. +* `created`: The date and time when the role was created. +* `position`: The role's position in the role hierarchy. Lower numbers mean higher priority. +* `rawposition`: The role's raw position in the role list. +* `guildid`: The ID of the guild (server) where the role exists. +* `guildname`: The name of the guild (server) where the role exists. +* `timestamp`: The creation timestamp of the role. +* `ismentionable`: Returns `true` if the role can be mentioned, `false` otherwise. +* `iseditable`: Returns `true` if the bot can edit the role, `false` otherwise. +* `ismanaged`: Returns `true` if the role is managed by an integration (like a bot), `false` otherwise. +* `ishoisted`: Returns `true` if the role is hoisted (displayed separately in the member list), `false` otherwise. +* `usercount`: The number of users who have this role. (Note: This value is cached and might not be perfectly up-to-date.) +* `icon`: Returns the role's icon URL if it exists. Returns `undefined` if the role has no icon. + +
+ +#### Example: + + + +!!exec $role[798789079070970;position] + + +2 + + + +This example retrieves the position of the role with the ID `798789079070970`. The bot responds with `2`, indicating the role's position in the role hierarchy. + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/roleCount.mdx b/content/docs/(functions)/Role/roleCount.mdx new file mode 100644 index 00000000..99a0cad7 --- /dev/null +++ b/content/docs/(functions)/Role/roleCount.mdx @@ -0,0 +1,38 @@ +--- +title: "$roleCount" +--- + +The `$roleCount` function returns the total number of roles present in your Discord server (guild). + +## Usage +```cc +$roleCount +``` + +This function is straightforward to use. Simply include it in your command response to display the role count. + +
+ +**Example:** + +Let's create a custom command that announces the total number of roles in the server. + + + +!!exec There are `$roleCount` roles in the server! + + +There are `23` roles in the server + + + +In this example: + +* The user triggers the custom command with `!!exec`. +* The command uses `$roleCount` to retrieve the role count. +* The bot responds with a message stating, "There are `23` roles in the server" (the number will reflect the actual role count of the server). + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/roleExists.mdx b/content/docs/(functions)/Role/roleExists.mdx new file mode 100644 index 00000000..c0853fe8 --- /dev/null +++ b/content/docs/(functions)/Role/roleExists.mdx @@ -0,0 +1,46 @@ +--- +title: "$roleExists" +--- + +Checks if a role exists within the server and returns a boolean value (true or false). + +## Usage: + +`$roleExists[Role Name/ID]` + +**Parameters:** + +* `Role Name or ID`: The Name/ID of the role you want to check. + +
+ +**Example:** + + + !!exec $roleExists[Muted] + + + true + + + +**Explanation:** + +This example checks if a role with the name "muted" exists on the server. First, `$roleID[muted]` resolves to the role ID of the role named "muted" (if it exists). Then, `$roleExists` checks if a role with that ID exists. The command returns `true` if the role exists and `false` if it doesn't. + + + +* `$roleID`: Retrieves a role's ID by its name. + + + + + +* `$findRole`: Finds roles by name or mention. + + + +**Function Difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/roleID.mdx b/content/docs/(functions)/Role/roleID.mdx new file mode 100644 index 00000000..af23e642 --- /dev/null +++ b/content/docs/(functions)/Role/roleID.mdx @@ -0,0 +1,40 @@ +--- +title: "$roleID" +--- + +Retrieves the ID of a specified role. + +## Usage: + +`$roleID[ROLE NAME]` + +**Argument:** + +* `ROLE NAME`: The name of the role you want to get the ID for. This is case-sensitive. + +
+ +**Example:** + +Let's say you have a role named "muted" in your server. The following example demonstrates how to retrieve its ID. + + + +!!exec $roleID[muted] + + +772053356378062889 + + + +In this example, the command returns `772053356378062889`, which is the ID of the "muted" role. + + + +* `$findRole`: Use this function to find a role by its name or mention if you are unsure of the exact name. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Role/roleIcon.mdx b/content/docs/(functions)/Role/roleIcon.mdx new file mode 100644 index 00000000..cfb2b5b1 --- /dev/null +++ b/content/docs/(functions)/Role/roleIcon.mdx @@ -0,0 +1,53 @@ +--- +title: "$roleIcon" +--- + +This function allows you to either retrieve or set the icon of a role within a guild (server). + +## Usage + +```cc +$roleIcon[role; icon (optional)] +``` + +**Parameters:** + +* **`role`**: (Required) This can be the name or ID of the role you want to interact with. +* **`icon`**: (Optional) If provided, this will set the role's icon. If omitted, the function will return the role's current icon URL. This can be a direct image URL or a custom emoji. + +## Examples + +### Example 1: Getting a Role's Icon + +This example demonstrates how to retrieve the icon of a role named "Support". + +```cc +$roleIcon[Support] +``` + +**Output:** + +![](https://i.imgur.com/d0PfOjB.png) + +### Example 2: Setting a Role's Icon with an Image URL + +This example sets the icon of a role named "Member" using an image URL. + +```cc +$roleIcon[Member;https://cdn-icons-png.flaticon.com/512/6080/6080057.png] +``` + +**Important:** The bot needs the necessary permissions to modify roles in the server for this to work. + +### Example 3: Setting a Role's Icon with a Custom Emoji + +This example sets the icon of a role named "Member" using a custom emoji. + +```cc +$roleIcon[Member;<:happy:862641528890851328>] +``` + +**Note:** + +* Make sure the bot has access to the custom emoji you are using (i.e., it's from a server the bot is in). +* Again, the bot requires the necessary permissions to modify roles in the guild. The bot needs "Manage Roles" permissions. \ No newline at end of file diff --git a/content/docs/(functions)/Role/roleMembersCount.mdx b/content/docs/(functions)/Role/roleMembersCount.mdx new file mode 100644 index 00000000..e1633ee2 --- /dev/null +++ b/content/docs/(functions)/Role/roleMembersCount.mdx @@ -0,0 +1,30 @@ +--- +title: "$roleMembersCount" +--- + +This function returns the number of members in a Discord server that have a specific role. + + + +The data used by this function comes from the bot's cache, not the Discord API directly. This means the count might not be 100% accurate *unless* all members of the server are cached by the bot. Full caching is generally only achieved in Tier 5 servers due to the sheer volume of members. + + + +## Usage +```cc +$roleMembersCount[roleId] +``` + +* `roleId`: The ID of the Discord role you want to count members for. You can get this ID by right-clicking the role in your server settings (make sure you have Developer Mode enabled in Discord settings). + +**Example:** + +If you have a role with the ID `123456789012345678`, the function would look like this: + +`$roleMembersCount[123456789012345678]` + +This would return the number of members who currently have that role. + +**Function Difficulty:** + +**Tags:** \ No newline at end of file diff --git a/content/docs/(functions)/Role/roleName.mdx b/content/docs/(functions)/Role/roleName.mdx new file mode 100644 index 00000000..8e4e850b --- /dev/null +++ b/content/docs/(functions)/Role/roleName.mdx @@ -0,0 +1,31 @@ +--- +title: "$roleName" +--- + +Retrieves the name of a role using its ID. + +## Usage: + +`$roleName[roleID]` + +Replace `roleID` with the actual ID of the role you want to find. + +
+ +#### Example: + +This example shows how to use the `$roleName` function to find the name of the role with the ID `869243918787686439`. + + + +!!exec $roleName[869243918787686439] + + +Custom Command + + + +**Function difficulty:** + + +**Tags:** diff --git a/content/docs/(functions)/Role/rolePerms.mdx b/content/docs/(functions)/Role/rolePerms.mdx new file mode 100644 index 00000000..24bd687b --- /dev/null +++ b/content/docs/(functions)/Role/rolePerms.mdx @@ -0,0 +1,41 @@ +--- +title: "$rolePerms" +--- + +Returns the permissions a role has. + +## Usage: + +`$rolePerms[roleID;separator (optional)]` + +* `roleID`: The ID of the role to check. +* `separator`: (Optional) The separator to use when listing the permissions. Defaults to no separator. + +
+ +**Example:** + + + +!!exec $rolePerms[$roleID[muted]; | ] + + +View Channel | Read Message History + + + + + +For a comprehensive list of all permission names, refer to the [Permissions List](/CodeReferences/ref.permissions_list). This list includes all the permissions a role can have. + + + + + + +* `$userPerms`: Returns a member's permissions. + + + +**Function difficulty:** + diff --git a/content/docs/(functions)/Role/rolePosition.mdx b/content/docs/(functions)/Role/rolePosition.mdx new file mode 100644 index 00000000..83a6dcfd --- /dev/null +++ b/content/docs/(functions)/Role/rolePosition.mdx @@ -0,0 +1,42 @@ +--- +title: "$rolePosition" +--- + +Returns the position of a role in the server's role hierarchy. Roles with higher positions appear higher in the server's role list. + +## Usage: + +`$rolePosition[role ID]` + +**Example:** + +`$rolePosition[827482937492837492]` + +* Replace `827482937492837492` with the actual role ID. + +
+ +**Example Scenario:** + +Let's say you have a custom command that checks the position of the "Muted" role. + + + +!!exec $rolePosition[$roleID[muted]] + + +2 + + + +**Explanation:** + +* `!!exec $rolePosition[$roleID[muted]]`: This command attempts to execute the `$rolePosition` function using the role ID of the role named "muted" (obtained via `$roleID`). +* `2`: The bot responds with `2`, indicating that the "muted" role is in the 2nd position in the server's role hierarchy (higher numbers are generally higher positions, although some systems may number from 0). + +**Important Notes:** + +* Role positions are relative to other roles within the server. +* The role ID can be obtained by enabling Developer Mode in Discord (Settings > Advanced) and right-clicking on a role to copy its ID. + +**Function difficulty:** diff --git a/content/docs/(functions)/Role/setRoles.mdx b/content/docs/(functions)/Role/setRoles.mdx new file mode 100644 index 00000000..7b08035e --- /dev/null +++ b/content/docs/(functions)/Role/setRoles.mdx @@ -0,0 +1,64 @@ +--- +title: "$setRoles" +--- + +Gives a user specific roles, removing all other roles. This is useful for setting a user's roles to a specific configuration, like assigning a "Muted" role and removing all other roles. + +## Usage: + +```cc +$setRoles[userID;roleID 1;roleID 2;roleID 3;...] +``` + +* **`userID`**: The ID of the user you want to modify roles for. +* **`roleID 1;roleID 2;roleID 3;...`**: A semicolon-separated list of role IDs that the user should have. All other roles will be removed. + +
+ +**Example:** + +Sets the command executor's roles to only the "Muted" role. + +```cc +!!exec $setRoles[$authorID;$roleID[Muted]] +``` + +
+ +**Explanation:** + +* `!!exec`: Executes the command. Replace with your bot's command prefix. +* `$setRoles`: The function being used. +* `$authorID`: Gets the ID of the user who executed the command (using the `$authorID` function). +* `$roleID[Muted]`: Gets the ID of the role named "Muted" (using the `$roleID` function). + + + + +* The bot needs the **Manage Roles** permission to use this function. +* The bot can only manage roles that are below its highest role in the server's role hierarchy. +* Invalid role IDs or user IDs will cause the function to fail. + + + + + + + +* `$roleID[roleName]`: Returns the ID of a role, given its name. [See RoleID Documentation](/Role/roleID) +* `$authorID`: Returns the ID of the command executor. [See AuthorID Documentation](/Member/authorID) + + + + + + + +* `$giveRoles[userID;roleID 1;roleID 2;...]`: Gives roles to a user without removing existing roles. [See GiveRoles Documentation](/Role/giveRoles) +* `$takeRoles[userID;roleID 1;roleID 2;...]`: Removes roles from a user. [See TakeRoles Documentation](/Role/takeRoles) +* `$toggleRoles[userID;roleID 1;roleID 2;...]`: Toggles the specified roles on a user. [See ToggleRoles Documentation](/Role/toggleRoles) + + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Role/takeRoles.mdx b/content/docs/(functions)/Role/takeRoles.mdx new file mode 100644 index 00000000..e177c230 --- /dev/null +++ b/content/docs/(functions)/Role/takeRoles.mdx @@ -0,0 +1,46 @@ +--- +title: "$takeRoles" +--- + +Takes away a role from a user. + +## Usage: + +`$takeRoles[userID;roleID 1;roleID 2;roleID 3;...]` + +* **userID:** The ID of the user to take the roles from. +* **roleID 1;roleID 2;roleID 3;...:** A semicolon-separated list of role IDs to remove from the user. + +
+ + + +!!exec $takeRoles[$authorID;$roleID[Muted]] + + + +**Example Breakdown:** + +This example takes the "Muted" role from the user who executed the command. + +* `!!exec`: Executes the custom command function. +* `$takeRoles[...]`: The function that removes roles. +* `$authorID`: Gets the ID of the command executor. (See [here](/Member/authorID) for more info) +* `$roleID[Muted]`: Gets the ID of the role named "Muted". (See [here](/Role/roleID) for more info) + + + +* `$roleID`: Returns a role ID based on the role's name. +* `$authorID`: Returns the ID of the command executor. + + + + + +* `$giveRoles`: Gives roles to a user. +* `$setRoles`: Removes all roles from a user and then gives them the specified roles. +* `$toggleRoles`: Toggles roles on a user (adds if they don't have it, removes if they do). + + + +**Function Difficulty:** diff --git a/content/docs/(functions)/Role/toggleRoles.mdx b/content/docs/(functions)/Role/toggleRoles.mdx new file mode 100644 index 00000000..0f0d5454 --- /dev/null +++ b/content/docs/(functions)/Role/toggleRoles.mdx @@ -0,0 +1,42 @@ +--- +title: "$toggleRoles" +--- + +Toggles roles on a user. This means it removes specified roles if the user already has them, and adds them if they don't. + +## Usage: + +`$toggleRoles[userID;roleID 1;roleID 2;roleID 3;...]` + +* **userID:** The ID of the user to toggle the roles on. +* **roleID 1;roleID 2;roleID 3;...:** A list of role IDs to toggle, separated by semicolons. + +
+ + + +!!exec $toggleRoles[$authorID;$roleID[Member +]] + + + +**Example:** + +This example toggles the "Member +" role on the command executor. If the user has the role it will be removed, if they don't have it, it will be added. + + + +`$roleID`, to get the ID of a role by name. This is used to dynamically find the role ID based on its name. + + + + + + +* `$giveRoles`: Gives roles to a user. +* `$takeRoles`: Removes roles from a user. +* `$setRoles`: Removes all existing roles from a user and then adds the specified roles. + + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/addEmoji.mdx b/content/docs/(functions)/Server/addEmoji.mdx new file mode 100644 index 00000000..714fe241 --- /dev/null +++ b/content/docs/(functions)/Server/addEmoji.mdx @@ -0,0 +1,39 @@ +--- +title: "$addEmoji" +--- + +Adds an emoji to the current Discord server (guild). You can optionally restrict the emoji's use to specific roles. + +## Usage +```cc +$addEmoji[url;name;returnEmoji (yes/no)(optional);roleID1;roleID2;...] +``` + +**Parameters:** + +* `url`: The URL of the image to use for the emoji. Must be a direct link to the image file (e.g., `.png`, `.jpg`, `.gif`). +* `name`: The name you want to give the emoji. This will be used to reference the emoji in chat (e.g., `:CustomCommandSupport:`). +* `returnEmoji (yes/no) (optional)`: Determines whether the function returns the new emoji's ID. If set to `yes`, the function will return the emoji ID. If `no` (or omitted), it won't return anything. +* `roleID1;roleID2;... (optional)`: A semicolon-separated list of role IDs. If provided, only users with one or more of these roles will be able to use the emoji. Leave blank for no role restrictions. + +
+ +**Example:** + + + +!!exec $addEmoji[https://media.discordapp.net/avatars/725721249652670555/781224f90c3b841ba5b40678e032f74a.webp;CustomCommandSupport;no] + + + +**Explanation:** + +This example will add an emoji to the server named "CustomCommandSupport" using the image from the provided URL. The emoji will be available to all members of the server as `CustomCommandSupport`. The function will not return the ID of the new emoji. + +**Permissions:** + +This function requires the bot to have the following permissions: + +* **Manage Emojis** + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/allMembersCount.mdx b/content/docs/(functions)/Server/allMembersCount.mdx new file mode 100644 index 00000000..9dc1463c --- /dev/null +++ b/content/docs/(functions)/Server/allMembersCount.mdx @@ -0,0 +1,22 @@ +--- +title: "$allMembersCount" +--- + +Returns the total number of users the bot is currently serving across all servers it's in. + +## Usage +```cc +$allMembersCount +``` + +
+ + +!!exec <@$clientID> serves $allMembersCount users in total! + + +Custom Command serves 6852280 users in total! + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/createAutomodKeyword.mdx b/content/docs/(functions)/Server/createAutomodKeyword.mdx new file mode 100644 index 00000000..17478d79 --- /dev/null +++ b/content/docs/(functions)/Server/createAutomodKeyword.mdx @@ -0,0 +1,80 @@ +--- +title: "$createAutomodKeyword" +--- + +Creates a new auto-moderation rule based on keywords within the server. This allows you to automatically take actions when specific words or phrases are used. + +## Usage + +```cc +$createAutomodKeyword[ + {name=Rule name} + {keyword=Keyword to trigger on} + {allow_keyword=Exempt this keyword from triggering} + {regex=Regex expression to trigger on} + {action= + {type=block} + {message=Block message displayed to the user} + } + {action= + {type=alert} + {channel=Channel ID to send an alert message to} + } + {action= + {type=timeout} + {duration=Timeout duration for the user (e.g., 10m, 1h, 1d)} + } + {exempt_role=Role ID to exempt from the rule} + {exempt_channel=Channel ID to exempt from the rule} + {disabled=yes/no (default: no)} + {return_id=yes/no (default: no)} +] +``` + +### Parameters Explained + +* **`name`**: The name of the auto-moderation rule. This should be descriptive. +* **`keyword`**: The keyword or phrase that will trigger the rule. Up to 1000 keywords can be defined. +* **`allow_keyword`**: Keywords that are whitelisted; if these appear, the rule will *not* trigger, even if another keyword matches. Up to 100 allowed keywords can be defined. +* **`regex`**: A regular expression to match. For advanced filtering. Up to 10 regex expressions can be defined. +* **`action`**: Defines the action(s) to be taken when the rule is triggered. Multiple actions can be specified. + * **`type`**: The type of action. Possible values: + * `block`: Blocks the message containing the triggering keyword. + * `alert`: Sends an alert message to a specified channel. + * `timeout`: Times out the user for a specified duration. + * **`message`**: (Only for `block` action) The message displayed to the user when their message is blocked. + * **`channel`**: (Only for `alert` action) The ID of the channel to send the alert message to. + * **`duration`**: (Only for `timeout` action) The duration of the timeout. Examples: `10m` (10 minutes), `1h` (1 hour), `1d` (1 day). +* **`exempt_role`**: The ID of a role that is exempt from this rule. Users with this role will not be affected by the rule. Up to 20 exempt roles can be defined. +* **`exempt_channel`**: The ID of a channel that is exempt from this rule. Messages in this channel will not be checked by the rule. Up to 50 exempt channels can be defined. +* **`disabled`**: Whether the rule is disabled or not. Defaults to `no` (enabled). Set to `yes` to disable the rule. +* **`return_id`**: Whether to return the ID of the created rule. Defaults to `no`. Set to `yes` to return the rule ID. + +### Notes: + +* The bot requires the **Manage Server** (`manageserver`) [permission](/CodeReferences/ref.permissions_list) to create automod rules. +* The following inputs can be repeated: + * `{keyword}`: Up to 1000. + * `{allow_keyword}`: Up to 100. + * `{regex}`: Up to 10. + * `{exempt_role}`: Up to 20. + * `{exempt_channel}`: Up to 50. + * `{action}`: As many as you like (within reason). + +### Example: + +```cc +$createAutomodKeyword[ + {name=Block Fatty Words} + {keyword=fat} + {keyword=obese} + {action= + {type=block} + {message=Hey! Stop fat-shaming.} + } + {action= + {type=timeout} + {duration=1h} + } +] +``` diff --git a/content/docs/(functions)/Server/deleteAutomod.mdx b/content/docs/(functions)/Server/deleteAutomod.mdx new file mode 100644 index 00000000..2c2e9955 --- /dev/null +++ b/content/docs/(functions)/Server/deleteAutomod.mdx @@ -0,0 +1,21 @@ +--- +title: "$deleteAutomod" +--- + +Deletes an automod rule from the server. + +## Usage + +```cc +$deleteAutomod[Rule ID] +``` + +* **Rule ID:** The ID of the automod rule you want to delete. You can usually find this ID through the Discord interface or another Custom Command that retrieves automod rule information. + +## Example + +```cc +$deleteAutomod[123456789] +``` + +This command will attempt to delete the automod rule with the ID `123456789`. \ No newline at end of file diff --git a/content/docs/(functions)/Server/deleteEmojis.mdx b/content/docs/(functions)/Server/deleteEmojis.mdx new file mode 100644 index 00000000..7fcb9858 --- /dev/null +++ b/content/docs/(functions)/Server/deleteEmojis.mdx @@ -0,0 +1,27 @@ +--- +title: "$deleteEmojis" +--- + +Delete a custom emoji(s) from the server. + +## Usage + +```cc +$deleteEmojis[emoji1;emoji2;...] +``` + +This function allows you to delete one or more custom emojis from your Discord server. You must have the `Manage Emojis` permission to use this function. + +**Parameters:** + +* `emoji1;emoji2;...`: A semi-colon separated list of the emojis to delete. You can use the emoji name, ID, or the emoji itself. + +**Example:** + +```cc +$deleteEmojis[customEmoji1;customEmoji2] +``` + +This example will delete the custom emojis named `customEmoji1` and `customEmoji2` from the server. + + diff --git a/content/docs/(functions)/Server/editAutomodKeyword.mdx b/content/docs/(functions)/Server/editAutomodKeyword.mdx new file mode 100644 index 00000000..32c5e0d6 --- /dev/null +++ b/content/docs/(functions)/Server/editAutomodKeyword.mdx @@ -0,0 +1,90 @@ +--- +title: "$editAutomodKeyword" +--- + +Modify an AutoMod rule of type "keywords" in the server. This function allows you to modify various aspects of an existing keyword AutoMod rule, such as adding or removing keywords, regex expressions, actions, and exemptions. + +## Usage + +```cc +$editAutomodKeyword[ + {id=Rule ID} + {name=Rule name} + {keyword=add keyword to trigger on} + {remove_keyword=keyword to remove} + {allow_keyword=add exempt keyword} + {remove_allow_keyword=remove exempt keyword} + {regex=add regex expression} + {remove_regex=remove regex expression} + {action= + {type=block} + {message=block message appear for user} + } + {action= + {type=alert} + {channel=channel to alert for} + } + {action= + {type=timeout} + {duration=timeout duration of user i.e 10m} + } + {remove_action=action type like block} + {exempt_role=add Exempt role} + {remove_exempt_role=remove Exempt role} + {exempt_channel=add Exempt channel} + {remove_exempt_channel=remove Exempt channel} + {disabled=yes/no} +] +``` + +### Parameters: + +* **`id`**: The ID of the AutoMod rule you want to modify. This is *required*. +* **`name`**: (Optional) A new name for the rule. +* **`keyword`**: (Optional) A keyword to add to the trigger list. The bot needs the `manageserver` permission. +* **`remove_keyword`**: (Optional) A keyword to remove from the trigger list. The bot needs the `manageserver` permission. +* **`allow_keyword`**: (Optional) A keyword that will be exempt from triggering the rule. The bot needs the `manageserver` permission. +* **`remove_allow_keyword`**: (Optional) A keyword to remove from the exemption list. The bot needs the `manageserver` permission. +* **`regex`**: (Optional) A regular expression to add to the rule. The bot needs the `manageserver` permission. +* **`remove_regex`**: (Optional) A regular expression to remove from the rule. The bot needs the `manageserver` permission. +* **`action`**: (Optional) Defines an action to take when the rule is triggered. Can be one of the following types: + * **`type=block`**: Blocks the message. `manageserver` permission needed. + * **`message`**: (Required if `type=block`) The message to display to the user when their message is blocked. + * **`type=alert`**: Sends an alert to a specified channel. `manageserver` permission needed. + * **`channel`**: (Required if `type=alert`) The channel ID to send the alert to. + * **`type=timeout`**: Times out the user. `manageserver` permission needed. + * **`duration`**: (Required if `type=timeout`) The timeout duration (e.g., `10m`, `1h`, `1d`). +* **`remove_action`**: (Optional) Removes a specific action from the rule. Specify the `type` of action to remove (e.g., `block`, `alert`, `timeout`). Requires `manageserver` permission. +* **`exempt_role`**: (Optional) A role ID that will be exempt from the rule. The bot needs the `manageserver` permission. +* **`remove_exempt_role`**: (Optional) A role ID to remove from the exemption list. The bot needs the `manageserver` permission. +* **`exempt_channel`**: (Optional) A channel ID that will be exempt from the rule. The bot needs the `manageserver` permission. +* **`remove_exempt_channel`**: (Optional) A channel ID to remove from the exemption list. The bot needs the `manageserver` permission. +* **`disabled`**: (Optional) Whether the rule is disabled. Set to `yes` to disable, or `no` to enable. + +### Notes: +* The following inputs can be repeated: + + * `keyword` + * `remove_keyword` + * `allow_keyword` + * `remove_allow_keyword` + * `regex` + * `remove_regex` + * `exempt_role` + * `remove_exempt_role` + * `exempt_channel` + * `remove_exempt_channel` + * `action` + * `remove_action` + +### Example: + +```cc +$editAutomodKeyword[ + {id=1234567} + {name=Block Fatty Words Improved} + {keyword=fat2} + {keyword=obese2} + {disabled=no} +] +``` diff --git a/content/docs/(functions)/Server/emojiCount.mdx b/content/docs/(functions)/Server/emojiCount.mdx new file mode 100644 index 00000000..a40d3e80 --- /dev/null +++ b/content/docs/(functions)/Server/emojiCount.mdx @@ -0,0 +1,12 @@ +--- +title: "$emojiCount" +--- + +Returns the amount of emojis in this server + +## Usage + +```cc +$emojiCount +``` + diff --git a/content/docs/(functions)/Server/emojiExists.mdx b/content/docs/(functions)/Server/emojiExists.mdx new file mode 100644 index 00000000..5c34f648 --- /dev/null +++ b/content/docs/(functions)/Server/emojiExists.mdx @@ -0,0 +1,23 @@ +--- +title: "$emojiExists" +--- + +Checks if a given emoji ID is available to the bot. + +## Usage + +```cc +$emojiExists[emojiID] +``` + +## Arguments + +* `emojiID` - The ID of the emoji to check. + +## Example + +```cc +$emojiExists[123456789012345678] +``` + +This would return `true` if an emoji with the ID `123456789012345678` exists and is accessible by the bot, and `false` otherwise. \ No newline at end of file diff --git a/content/docs/(functions)/Server/getInviteInfo.mdx b/content/docs/(functions)/Server/getInviteInfo.mdx new file mode 100644 index 00000000..e0f40e48 --- /dev/null +++ b/content/docs/(functions)/Server/getInviteInfo.mdx @@ -0,0 +1,61 @@ +--- +title: "$getInviteInfo" +--- + +Gets invite info from a given invite code. + +## Usage + +```cc +$getInviteInfo[code/url;Property] +``` + +**Parameters:** + +* `code/url`: The invite code or full invite URL to retrieve information from. +* `Property`: The specific property you want to extract. Leave empty to get all properties in JSON format. + +### Available Properties + +These properties are available for **all** invites: + +* `guildid`, `serverid`: The ID of the server. +* `servername`: The name of the server. +* `servericon`: The URL of the server icon. +* `serversplash`: The URL of the server splash image. +* `serverdesc`: The description of the server. +* `memberscount`: The total number of members in the server. +* `membersonlinecount`: The number of members currently online in the server. +* `code`: The invite code itself. +* `userid`: The ID of the user who created the invite. +* `expiresat`: The expiration date of the invite (if applicable). +* `url`: The full invite URL. +* `channelid`: The ID of the channel the invite is for. +* `channelname`: The name of the channel the invite is for. + +These properties are available **only for invites from the current server**: + +* `uses`: The number of times the invite has been used. +* `maxuses`: The maximum number of times the invite can be used. +* `ownerid`: The ID of the user who created the invite. +* `istemporary`: Whether the invite is temporary (grants temporary membership). +* `createdat`: The date and time the invite was created. + +### Getting All Properties + +If you leave the `Property` parameter empty (e.g., `$getInviteInfo[ZFQNZA4Ekz]`), the function will return a JSON string containing all available properties. You can then parse this JSON using `$objectCreate` and `$objectGet` to access individual values. This is useful when you need to retrieve multiple pieces of information about an invite. + +### Example + +```cc +!!exec $getInviteInfo[ZFQNZA4Ekz;servername] +``` + + + +!!exec $getInviteInfo[ZFQNZA4Ekz;servername] + + +Custom Command + + diff --git a/content/docs/(functions)/Server/getServerInvite.mdx b/content/docs/(functions)/Server/getServerInvite.mdx new file mode 100644 index 00000000..2afcb00a --- /dev/null +++ b/content/docs/(functions)/Server/getServerInvite.mdx @@ -0,0 +1,21 @@ +--- +title: "$getServerInvite" +--- + +Creates an invite link to the current server. + +## Usage + +```cc +$getServerInvite +``` + +### Example: + + +!!exec My server invite is: $getServerInvite

+
+ +My server invite is: https://discord.gg/midoworkshopsv + +
\ No newline at end of file diff --git a/content/docs/(functions)/Server/guild.mdx b/content/docs/(functions)/Server/guild.mdx new file mode 100644 index 00000000..cbd55f8a --- /dev/null +++ b/content/docs/(functions)/Server/guild.mdx @@ -0,0 +1,47 @@ +--- +title: "$guild" +--- + +A versatile function packed with information about the current server! + +## Usage +```cc +$guild[property] +``` + +This function allows you to retrieve various details about the server where the command is executed. Simply specify the desired property within the square brackets. + +#### Supported Properties: + +* `name` - The name of the server. +* `id` - The unique ID of the server. +* `acronym` - The acronym of the server's name. +* `afkchannelid` - The ID of the server's AFK voice channel. +* `boostcount` - The number of boosts the server has. +* `boostlevel` - The server's boost level. +* `created` - The date and time the server was created. +* `description` - The server's description (if any). +* `emojicount` - The total number of emojis in the server. +* `ispartnered` - Returns `true` if the server is partnered, `false` otherwise. +* `isverified` - Returns `true` if the server is verified, `false` otherwise. +* `membercount` - The total number of members in the server. +* `ruleschannel` - The ID of the server's rules channel. +* `systemchannelid` - The ID of the server's system channel. +* `timestamp` - The creation timestamp of the server. +* `updateschannel` - The ID of the server's moderator news channel. +* `verificationlvl` - The server's verification level. + +
+ +#### Example: + + + +!!exec This Server has $guild[boostcount] boosts! + + +This Server has 2 boosts! + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/membersCount.mdx b/content/docs/(functions)/Server/membersCount.mdx new file mode 100644 index 00000000..4adfa303 --- /dev/null +++ b/content/docs/(functions)/Server/membersCount.mdx @@ -0,0 +1,27 @@ +--- +title: "$membersCount" +--- + +Returns the amount of users in your server/guild! + +## Usage +```cc +$membersCount +``` + +```cc +!!exec There are `$membersCount` members in the server! +``` + +**Example:** + + + +!!exec There are `$membersCount` members in the server! + + +There are `599` members in the server + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/meta.json b/content/docs/(functions)/Server/meta.json new file mode 100644 index 00000000..4dd29917 --- /dev/null +++ b/content/docs/(functions)/Server/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Server Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Server/ownerID.mdx b/content/docs/(functions)/Server/ownerID.mdx new file mode 100644 index 00000000..2094e7aa --- /dev/null +++ b/content/docs/(functions)/Server/ownerID.mdx @@ -0,0 +1,24 @@ +--- +title: "$ownerID" +--- + +Returns the guild's owner ID. + +## Usage +```cc +$ownerID +``` + +
+ + +!!exec $ownerID + + +683630053686378498 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/resolveEmojiID.mdx b/content/docs/(functions)/Server/resolveEmojiID.mdx new file mode 100644 index 00000000..d25cee9c --- /dev/null +++ b/content/docs/(functions)/Server/resolveEmojiID.mdx @@ -0,0 +1,29 @@ +--- +title: "$resolveEmojiID" +--- + +Resolves a full emoji, emoji name, or emoji ID into its ID. This function is useful for extracting the ID from an emoji, regardless of its format. + +## Usage + +```cc +$resolveEmojiID[emoji string/name/id] +``` + +## Arguments + +* `emoji string/name/id` - The emoji, emoji name, or ID of the emoji to resolve. This can be a standard emoji (e.g., :smile:), a custom emoji name (e.g., my_custom_emoji), or an emoji ID. + +## Example + +Let's say you have a custom emoji named `cool_emoji` in your server. + +```cc +$resolveEmojiID[cool_emoji] +``` + +This would return the unique ID associated with the `cool_emoji` emoji. + +```cc +$resolveEmojiID[<:cool_emoji:123456789012345678>] +``` diff --git a/content/docs/(functions)/Server/securityPause.mdx b/content/docs/(functions)/Server/securityPause.mdx new file mode 100644 index 00000000..60ef5e89 --- /dev/null +++ b/content/docs/(functions)/Server/securityPause.mdx @@ -0,0 +1,29 @@ +--- +title: "$securityPause" +--- + +a beta feature, where discord allow you to pause invites and DMs for a period of time + +## Usage + +```cc +$securityPause[Duration of Pause (i.e 2h);Pause Invite (Yes/No);Pause DM (Yes/No)] +``` + +### Duration of Pause: +The value determines how much time a pause should be applied, maximum allowed duration is `24h` + +### Example (Pause invites for 24 hours): +```cc +$securityPause[24h;yes;no] +``` + +### Example (Pause DMs for 12 hours): +```cc +$securityPause[12h;no;yes] +``` + +### Example (Pause invites and DMs for 24 hours): +```cc +$securityPause[24h;yes;yes] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Server/serverBanner.mdx b/content/docs/(functions)/Server/serverBanner.mdx new file mode 100644 index 00000000..de4ba587 --- /dev/null +++ b/content/docs/(functions)/Server/serverBanner.mdx @@ -0,0 +1,30 @@ +--- +title: "$serverBanner" +--- + +Returns the current server banner + +## Usage +```cc +$serverBanner[size (optional);dynamic (yes/no)(optional)] +``` + +**Description:** + +This function retrieves the server's banner image URL. You can optionally specify the size and whether the image should be dynamic (e.g., animated GIF). + +**Parameters:** + +* `size` (optional): The desired size of the image. This should be a number representing the width/height (e.g., `1024`). +* `dynamic` (optional): Specifies whether to use the dynamic (animated) version of the banner, if available. Use `yes` to try to get the animated version, or `no` to force the static version. + +**Example:** + +* `$serverBanner`: Returns the default-sized server banner URL. +* `$serverBanner[512]`: Returns the server banner URL with a size of 512x512. +* `$serverBanner[;yes]`: Returns the server banner URL, attempting to use the dynamic (animated) version. +* `$serverBanner[1024;no]`: Returns the server banner URL with a size of 1024x1024, forcing the static version. + +Learn more about server banners: https://support.discord.com/hc/en-us/articles/360028716472-Server-Banner-Background-Invite-Banner-Image + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/serverBoostCount.mdx b/content/docs/(functions)/Server/serverBoostCount.mdx new file mode 100644 index 00000000..0ac7fab8 --- /dev/null +++ b/content/docs/(functions)/Server/serverBoostCount.mdx @@ -0,0 +1,24 @@ +--- +title: "$serverBoostCount" +--- + +Returns the number of boosts this server has. + +## Usage +```cc +$serverBoostCount +``` + +
+ + +!!exec $serverBoostCount + + +6 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverBoostLevel.mdx b/content/docs/(functions)/Server/serverBoostLevel.mdx new file mode 100644 index 00000000..bd75250c --- /dev/null +++ b/content/docs/(functions)/Server/serverBoostLevel.mdx @@ -0,0 +1,24 @@ +--- +title: "$serverBoostLevel" +--- + +Returns the boost level of the server. + +## Usage +```cc +$serverBoostLevel +``` + +This command retrieves the current boost level of the Discord server. Boost levels range from 0 (no boosts) to 3 (highest level). + +
+ + +!!exec $serverBoostLevel + + +1 + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/serverContentFilter.mdx b/content/docs/(functions)/Server/serverContentFilter.mdx new file mode 100644 index 00000000..1b7181be --- /dev/null +++ b/content/docs/(functions)/Server/serverContentFilter.mdx @@ -0,0 +1,24 @@ +--- +title: "$serverContentFilter" +--- + +Returns the content filter level of this guild. This determines the level of explicit content filtering applied to media content within the server. + +## Usage +```cc +$serverContentFilter +``` + +
+ + +!!exec $serverContentFilter + + +All Members + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverDescription.mdx b/content/docs/(functions)/Server/serverDescription.mdx new file mode 100644 index 00000000..d7419715 --- /dev/null +++ b/content/docs/(functions)/Server/serverDescription.mdx @@ -0,0 +1,44 @@ +--- +title: "$serverDescription" +--- + +Returns the current server description + +## Usage +```cc +$serverDescription +``` +
+ + +!!exec $serverDescription + + +Custom Command Support Server + + + +**Function difficulty:** + +**Tags:** # serverDescription + + +Returns the current server description. This command retrieves the description set for the Discord server. + +## Usage +```cc +$serverDescription +``` + +
+ + + +!!exec $serverDescription + + +Custom Command Support Server + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/serverEmojis.mdx b/content/docs/(functions)/Server/serverEmojis.mdx new file mode 100644 index 00000000..d797c944 --- /dev/null +++ b/content/docs/(functions)/Server/serverEmojis.mdx @@ -0,0 +1,24 @@ +--- +title: "serverEmojis" +--- + +Returns the server emojis. + +## Usage +```cc +$serverEmojis +``` + +
+ + + +!!exec $serverEmojis + + +:cc: , :blob: + + + +**Function difficulty:** + diff --git a/content/docs/(functions)/Server/serverFeatures.mdx b/content/docs/(functions)/Server/serverFeatures.mdx new file mode 100644 index 00000000..ec055b10 --- /dev/null +++ b/content/docs/(functions)/Server/serverFeatures.mdx @@ -0,0 +1,22 @@ +--- +title: "serverFeatures" +--- + +Returns the server features. This function returns a comma-separated list of features enabled on the server. + +## Usage +```cc +$serverFeatures +``` + +
+ + +!!exec $serverFeatures + + +Preview Enabled, Threads Enabled, Member Verification Gate Enabled, New Thread Permissions, News, Community, Welcome Screen Enabled + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Server/serverIcon.mdx b/content/docs/(functions)/Server/serverIcon.mdx new file mode 100644 index 00000000..07439e13 --- /dev/null +++ b/content/docs/(functions)/Server/serverIcon.mdx @@ -0,0 +1,25 @@ +--- +title: "$serverIcon" +--- + +Returns the current server's icon. + +## Usage +```cc +$serverIcon +``` + +
+ + + +!!exec $serverIcon + + + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverName.mdx b/content/docs/(functions)/Server/serverName.mdx new file mode 100644 index 00000000..03b1c1d6 --- /dev/null +++ b/content/docs/(functions)/Server/serverName.mdx @@ -0,0 +1,28 @@ +--- +title: "$serverName" +--- + +Returns the name of the current server. + +## Usage +```cc +$serverName +``` + +
+ + + +!!exec $serverName + + +Custom Command + + +My server's name is: Your Server Name + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverRegion.mdx b/content/docs/(functions)/Server/serverRegion.mdx new file mode 100644 index 00000000..ab448623 --- /dev/null +++ b/content/docs/(functions)/Server/serverRegion.mdx @@ -0,0 +1,25 @@ +--- +title: "$serverRegion" +--- + +Returns the current server region or `undefined` if not available. + +## Usage +```cc +$serverRegion +``` + +
+ + + +!!exec $serverRegion + + +Europe + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverSplash.mdx b/content/docs/(functions)/Server/serverSplash.mdx new file mode 100644 index 00000000..6f0fddda --- /dev/null +++ b/content/docs/(functions)/Server/serverSplash.mdx @@ -0,0 +1,16 @@ +--- +title: "$serverSplash" +--- + +Returns the current server invite splash + +## Usage +```cc +$serverSplash[size (optional)] +``` + +Learn more about it: https://support.discord.com/hc/en-us/articles/360028716472-Server-Banner-Background-Invite-Splash-Image + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/serverVerificationLevel.mdx b/content/docs/(functions)/Server/serverVerificationLevel.mdx new file mode 100644 index 00000000..93505f6d --- /dev/null +++ b/content/docs/(functions)/Server/serverVerificationLevel.mdx @@ -0,0 +1,23 @@ +--- +title: "$serverVerificationLevel" +--- + +Returns the verification level of the server + +## Usage +```cc +$serverVerificationLevel +``` +
+ + +!!exec $serverVerificationLevel + + +Medium + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/setGuildIcon.mdx b/content/docs/(functions)/Server/setGuildIcon.mdx new file mode 100644 index 00000000..8db69823 --- /dev/null +++ b/content/docs/(functions)/Server/setGuildIcon.mdx @@ -0,0 +1,21 @@ +--- +title: "$setGuildIcon" +--- + +Sets a new Icon for the server + +## Usage +```cc +$setGuildIcon[URL] +``` + + + +`$setGuildName`, to set a server's name + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/setGuildName.mdx b/content/docs/(functions)/Server/setGuildName.mdx new file mode 100644 index 00000000..13c40921 --- /dev/null +++ b/content/docs/(functions)/Server/setGuildName.mdx @@ -0,0 +1,21 @@ +--- +title: "$setGuildName" +--- + +Sets the name of your server to something, you have put in. + +## Usage +```cc +$setGuildName[name] +``` + + + +`$setGuildIcon`, to set a server's logo/ icon + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Server/systemChannelID.mdx b/content/docs/(functions)/Server/systemChannelID.mdx new file mode 100644 index 00000000..7fe6ef42 --- /dev/null +++ b/content/docs/(functions)/Server/systemChannelID.mdx @@ -0,0 +1,26 @@ +--- +title: "$systemChannelID" +--- + + + +Returns the system channel ID of this server (if any) + +## Usage +```cc +$systemChannelID +``` +
+ + +!!exec $systemChannelID + + + + + +This function is currently not functioning as expected! + + + +**Function difficulty:** diff --git a/content/docs/(functions)/Stickers/createSticker.mdx b/content/docs/(functions)/Stickers/createSticker.mdx new file mode 100644 index 00000000..7c8cf02c --- /dev/null +++ b/content/docs/(functions)/Stickers/createSticker.mdx @@ -0,0 +1,29 @@ +--- +title: "$createSticker" +--- + +create a new sticker in the server + +## Usage + +```cc +$createSticker[name;image url;emoji;description (optional);return sticker id (yes/no)] +``` + +### Example: +```cc +$createSticker[Happy Earth;https://media.discordapp.net/attachments/951590503370063872/1028690645222690867/happy_earth.png;😄;I'm happy when earth is happy] +``` + +### Output +![](https://i.imgur.com/RnZdfeL.png) + + +## Notes +> sticker name should be within 2-30 characters\ + +> image url should be from trusted source like discord attachment or imgur.com\ + +> image size should be less than 512KB\ + +> accepted image extensions are .png or .apng \ No newline at end of file diff --git a/content/docs/(functions)/Stickers/deleteSticker.mdx b/content/docs/(functions)/Stickers/deleteSticker.mdx new file mode 100644 index 00000000..eee7e819 --- /dev/null +++ b/content/docs/(functions)/Stickers/deleteSticker.mdx @@ -0,0 +1,12 @@ +--- +title: "$deleteSticker" +--- + +To delete a sticker inside the server + +## Usage + +```cc +$deleteSticker[Sticker ID] +``` + diff --git a/content/docs/(functions)/Stickers/editSticker.mdx b/content/docs/(functions)/Stickers/editSticker.mdx new file mode 100644 index 00000000..e541c3af --- /dev/null +++ b/content/docs/(functions)/Stickers/editSticker.mdx @@ -0,0 +1,17 @@ +--- +title: "$editSticker" +--- + +To edit a sticker inside the server\ +**Info** can be: name,desc,emoji + +## Usage + +```cc +$editSticker[Sticker ID;Info;New Value] +``` + +### Example: +```cc +$editSticker[992974663099629588;name;MyNewSmily] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Stickers/messageStickers.mdx b/content/docs/(functions)/Stickers/messageStickers.mdx new file mode 100644 index 00000000..2284ab08 --- /dev/null +++ b/content/docs/(functions)/Stickers/messageStickers.mdx @@ -0,0 +1,22 @@ +--- +title: "$messageStickers" +--- + +To return the user message stickers (id)\ +**Index**: starts with 1, leaving it empty return all stickers ids separated by `, ` + +## Usage + +```cc +$messageStickers[Index] +``` + +### Example: + + +!!exec $messageStickers[1]

+
+ +992970796031017080 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Stickers/meta.json b/content/docs/(functions)/Stickers/meta.json new file mode 100644 index 00000000..73da383a --- /dev/null +++ b/content/docs/(functions)/Stickers/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Sticker Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Stickers/serverStickers.mdx b/content/docs/(functions)/Stickers/serverStickers.mdx new file mode 100644 index 00000000..b4238dbe --- /dev/null +++ b/content/docs/(functions)/Stickers/serverStickers.mdx @@ -0,0 +1,16 @@ +--- +title: "$serverStickers" +--- + +To return all server stickers's id + +## Usage + +```cc +$serverStickers[Separator] +Example: +$serverStickers[, ] +``` + +### Output: + 992974663099629588, 992970796031017080 \ No newline at end of file diff --git a/content/docs/(functions)/Stickers/sticker.mdx b/content/docs/(functions)/Stickers/sticker.mdx new file mode 100644 index 00000000..216c07f9 --- /dev/null +++ b/content/docs/(functions)/Stickers/sticker.mdx @@ -0,0 +1,22 @@ +--- +title: "$sticker" +--- + +To return an information about a sticker using ID\ +**Info** can be: name,desc,url,tags,time + +## Usage + +```cc +$sticker[Sticker ID;name;Info] +``` + +### Example: + + +!!exec $sticker[992974663099629588;name]

+
+ +Smiley + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayClear.mdx b/content/docs/(functions)/Text/Array/arrayClear.mdx new file mode 100644 index 00000000..cd6e20db --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayClear.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayClear" +--- + +Deletes an array. + +## Usage + +```cc +$arrayClear[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Hello World; ]
Before=$arrayJoin[, ]
$arrayClear
After=$arrayJoin[, ]

+
+ +Before=Hello, World
After= +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayConcat.mdx b/content/docs/(functions)/Text/Array/arrayConcat.mdx new file mode 100644 index 00000000..4caadbf7 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayConcat.mdx @@ -0,0 +1,24 @@ +--- +title: "$arrayConcat" +--- + +Merge new array with the current array + +## Usage + +```cc +$arrayConcat[List;separator;array name (optional)] +``` + +### Example: + + +!!exec $arrayCreate[Mido/Rake;/]
$arrayConcat[Azz/Finkz;/]
$arrayJoin[, ]

+
+ +Mido, Rake, Azz, Finkz

+
+
+ +### Note on Separator: +You can use regex as separator i.e `/separator/` \ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayCount.mdx b/content/docs/(functions)/Text/Array/arrayCount.mdx new file mode 100644 index 00000000..2e109fde --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayCount.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayCount" +--- + +An alias for `$arrayLength`. + +## Usage + +```cc +$arrayCount[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
$arrayCount

+
+ +3 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayCreate.mdx b/content/docs/(functions)/Text/Array/arrayCreate.mdx new file mode 100644 index 00000000..651034aa --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayCreate.mdx @@ -0,0 +1,24 @@ +--- +title: "$arrayCreate" +--- + +Creates an array from a list. + +## Usage + +```cc +$arrayCreate[List;separator;array name (optional)] +``` + +### Example: + + +!!exec $arrayCreate[Mido/Rake/Azz;/]
1 is $arrayGet[1]
2 is $arrayGet[2]
3 is $arrayGet[3]

+
+ +1 is Mido
2 is Rake
3 is Azz +
+
+ +### Note on Separator: +You can use regex as separator i.e `/separator/` \ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayElementCount.mdx b/content/docs/(functions)/Text/Array/arrayElementCount.mdx new file mode 100644 index 00000000..4ecbeaaa --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayElementCount.mdx @@ -0,0 +1,22 @@ +--- +title: "$arrayElementCount" +--- + +This function is used to count the number of times a specific element appears in an array.\ + It takes three parameters: the element to count, whether or not to trim whitespace before comparing elements, and the name of the array to search + +## Usage + +```cc +$arrayElementCount[Element To Count;Trim before compare (yes/no);array name] +``` + +### Example: + + +!!exec $arrayCreate[Mido/Rake/Mido/Rake/Rake/Azz/Faj;/]
Rake repeated $arrayElementCount[Rake] times
Mido repeated $arrayElementCount[Mido] times
Azz repeated $arrayElementCount[Azz] times
Faj repeated $arrayElementCount[Faj] times

+
+ +Rake repeated 3 times
Mido repeated 2 times
Azz repeated 1 times
Faj repeated 1 times +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayFilter.mdx b/content/docs/(functions)/Text/Array/arrayFilter.mdx new file mode 100644 index 00000000..c1bfd270 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayFilter.mdx @@ -0,0 +1,38 @@ +--- +title: "$arrayFilter" +--- + +Iterates through each element in an array. If the code returns `false`, the element will be removed from the array. + + +Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. +
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. + +If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. + +
+ +## Usage +```cc +$arrayFilter[Element Value;Element Index;array name]{ +CODE... +} +``` +## Loop Limits +Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. +| Tier | Limit | +| :------- | :--- | +| 0 (Free) | 50 | +| 3 (Freemium) | 50 | +| 4 (Pro) | 100 | +| 5 (Ultra) | 150 | + +### Example (Remove Hello): + + +!!exec $textSplit[Hello/World;/]
$arrayFilter[value]\{
$if[$value==Hello]\{
false
}
}
$arrayJoin[/] +
+ +World + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayGet.mdx b/content/docs/(functions)/Text/Array/arrayGet.mdx new file mode 100644 index 00000000..1f3e4416 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayGet.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayGet" +--- + +Returns the value of an element at the specified index in an array. + +## Usage + +```cc +$arrayGet[index;array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
First is $arrayGet[1]
Second is $arrayGet[2]
Third is $arrayGet[3]

+
+ +First is Mido
Second is Rake
Third is Azz +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayInclude.mdx b/content/docs/(functions)/Text/Array/arrayInclude.mdx new file mode 100644 index 00000000..349fafcb --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayInclude.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayInclude" +--- + +To check if a value exists in the array. Returns `true` if the value exists, otherwise returns `false`. + +## Usage + +```cc +$arrayInclude[Value;array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
$arrayInclude[Rake]

+
+ +true + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayJoin.mdx b/content/docs/(functions)/Text/Array/arrayJoin.mdx new file mode 100644 index 00000000..e08ccc75 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayJoin.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayJoin" +--- + +Joins an array created using `$textSplit` with a specific separator. + +## Usage + +```cc +$arrayJoin[Separator (optional);array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Rake/Mido/Azz;/]
$arrayJoin[, ]

+
+ +Rake, Mido, Azz + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayLength.mdx b/content/docs/(functions)/Text/Array/arrayLength.mdx new file mode 100644 index 00000000..569d14b1 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayLength.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayLength" +--- + +Returns the number of elements in an array. + +## Usage + +```cc +$arrayLength[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
$arrayLength

+
+ +3 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayLoop.mdx b/content/docs/(functions)/Text/Array/arrayLoop.mdx new file mode 100644 index 00000000..5dff9c8b --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayLoop.mdx @@ -0,0 +1,38 @@ +--- +title: "$arrayLoop" +--- + +To loop functions in an array. + + +Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. +
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. + +If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. + +
+ +## Usage +```cc +$arrayLoop[varName;index;array name (optional)]{ +CODE... +} +``` +## Loop Limits +Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. +| Tier | Limit | +| :------- | :--- | +| 0 (Free) | 50 | +| 3 (Freemium) | 50 | +| 4 (Pro) | 100 | +| 5 (Ultra) | 150 | + +## Example: + + +!!exec $textSplit[15,18,21;,]
$arrayLoop[age]\{
age is $age
} +
+ +age is 15
age is 18
age is 21 +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayMap.mdx b/content/docs/(functions)/Text/Array/arrayMap.mdx new file mode 100644 index 00000000..cdc4b728 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayMap.mdx @@ -0,0 +1,38 @@ +--- +title: "$arrayMap" +--- + +To replace array values with another value. + + +Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. +
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. + +If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. + +
+ +## Usage +```cc +$arrayMap[Element Value;Element Index;array name (optional)]{ +CODE +} +``` +## Loop Limits +Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. +| Tier | Limit | +| :------- | :--- | +| 0 (Free) | 50 | +| 3 (Freemium) | 50 | +| 4 (Pro) | 100 | +| 5 (Ultra) | 150 | + +### Example: + + +!!exec $textSplit[15,18,21;,]
$arrayMap[age]\{
age is $age
}
$arrayJoin[, ]

+
+ +age is 15, age is 18, age is 21 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayPop.mdx b/content/docs/(functions)/Text/Array/arrayPop.mdx new file mode 100644 index 00000000..4fb2a7df --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayPop.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayPop" +--- + +Removes, and returns the last element in an array. + +## Usage + +```cc +$arrayPop[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
last one is $arrayPop
before it is $arrayPop
before it is $arrayPop

+
+ +last one is Azz
before it is Rake
before it is Mido +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayPush.mdx b/content/docs/(functions)/Text/Array/arrayPush.mdx new file mode 100644 index 00000000..ac80c6fd --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayPush.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayPush" +--- + +Adds an element to the end of an array. + +## Usage + +```cc +$arrayPush[Value;array name (optional)] +``` + +### Example: + + +!!exec $arrayPush[Mido]
$arrayPush[Rake]
$arrayPush[Azz]
$arrayJoin[/]

+
+ +Mido/Rake/Azz + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayRemove.mdx b/content/docs/(functions)/Text/Array/arrayRemove.mdx new file mode 100644 index 00000000..825c2fe8 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayRemove.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayRemove" +--- + +Removes something from an array, using the index, and returns nothing. + +## Usage + +```cc +$arrayRemove[Index;Index... (optional);array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Hello World, how are you?; ]
$arrayRemove[1;2;3]
$arrayGet[1]

+
+ +are + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayReverse.mdx b/content/docs/(functions)/Text/Array/arrayReverse.mdx new file mode 100644 index 00000000..493dc9cf --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayReverse.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayReverse" +--- + +Reverses an array. + +## Usage + +```cc +$arrayReverse[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Number 1/Number 2/Number 3;/]
$arrayReverse
$arrayJoin[/]

+
+ +Number 3/Number 2/Number 1 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arraySearch.mdx b/content/docs/(functions)/Text/Array/arraySearch.mdx new file mode 100644 index 00000000..025bd3b0 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arraySearch.mdx @@ -0,0 +1,21 @@ +--- +title: "$arraySearch" +--- + +To search for a value in an array. If it exists, it will return the position of the value. If not, `-1` is returned. + +## Usage + +```cc +$arraySearch[Value to search;array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
Mido is in position: $arraySearch[Mido]
Azz is in position: $arraySearch[Azz]
InvalidName is in position: $arraySearch[justsomeweirdrandom]

+
+ +Mido is in position: 1
Azz is in position: 3
InvalidName is in position: -1 +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arraySet.mdx b/content/docs/(functions)/Text/Array/arraySet.mdx new file mode 100644 index 00000000..82b68e88 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arraySet.mdx @@ -0,0 +1,21 @@ +--- +title: "$arraySet" +--- + +Sets the value of an index in an array. + +## Usage + +```cc +$arraySet[index;value;array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
Before: $arrayGet[3]
$arraySet[3;Finkz]
After: $arrayGet[3]

+
+ +Before: Azz
After: Finkz +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayShift.mdx b/content/docs/(functions)/Text/Array/arrayShift.mdx new file mode 100644 index 00000000..ac7db4ce --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayShift.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayShift" +--- + +Removes and returns the first element in an array. + +## Usage + +```cc +$arrayShift[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Azz;/]
first one is $arrayShift
after it is $arrayShift
after it is $arrayShift

+
+ +first one is Mido
after it is Rake
after it is Azz +
+
diff --git a/content/docs/(functions)/Text/Array/arrayShuffle.mdx b/content/docs/(functions)/Text/Array/arrayShuffle.mdx new file mode 100644 index 00000000..9b16b996 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayShuffle.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayShuffle" +--- + +To shuffle an existing array. + +## Usage + +```cc +$arrayShuffle[array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Rake/Azz/Mido;/]
$arrayShuffle
$arrayJoin[/]

+
+ +Azz/Mido/Rake + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arraySlice.mdx b/content/docs/(functions)/Text/Array/arraySlice.mdx new file mode 100644 index 00000000..76a645aa --- /dev/null +++ b/content/docs/(functions)/Text/Array/arraySlice.mdx @@ -0,0 +1,21 @@ +--- +title: "$arraySlice" +--- + +To keep only a part of the array, *slicing* it. + +## Usage + +```cc +$arraySlice[from;to;array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido Rake Azz Finkz; ]
$arraySlice[2;3]
$arrayJoin[ ]

+
+ +Rake Azz + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arraySort.mdx b/content/docs/(functions)/Text/Array/arraySort.mdx new file mode 100644 index 00000000..5a56f39f --- /dev/null +++ b/content/docs/(functions)/Text/Array/arraySort.mdx @@ -0,0 +1,47 @@ +--- +title: "$arraySort" +--- + +Sorts an array, created with `$textSplit`. +Can be sorted numerically or alphabetically, or depending on occurrences. + +## Usage + +```cc +$arraySort[Ascending (yes/no, default is no);Sort Type;array name (optional)] +``` + +### Sort Types: +`num`: Sort Numerically\ +`alpha`: Sort Alphabetically\ +`frequent`: Sort By how many element got repeated + +### Example (Sort Occurrences): + + +!!exec $textSplit[3.Mido
1.Azz
2.Rake
2.Rake
3.Mido
3.Mido
4.Finkz;
]
$arraySort[no;frequent]

+
+ +The sorted list is
3.Mido
2.Rake
4.Finkz
1.Azz

+
+
+ +### Example (Sort Numerically): + + +!!exec $textSplit[1. Azz
3.Mido
2.Rake
4.Finkz;
]
$arraySort[yes;num]
The sorted list is
$arrayJoin[
]

+
+ +The sorted list is
1. Azz
2.Rake
3.Mido
4.Finkz

+
+
+ +### Example (Sort Alphabetically): + + +!!exec $textSplit[3.Mido
1.Azz
2.Rake
4.Finkz;
]
$arraySort[yes;alpha]
The sorted list is
$arrayJoin[
]

+
+ +The sorted list is
1. Azz
4.Finkz
3.Mido
2.Rake +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayUnique.mdx b/content/docs/(functions)/Text/Array/arrayUnique.mdx new file mode 100644 index 00000000..6054f4c8 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayUnique.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayUnique" +--- + +Return the unique elements in the array, glued with the separator. + +## Usage + +```cc +$arrayUnique[Separator (default ', ');Trim Element before check? (default is yes);array name (optional)] +``` + +### Example: + + +!!exec $textSplit[Mido/Rake/Rake/Mido/Azz;/]
$arrayUnique[, ]

+
+ +Mido, Rake, Azz + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/arrayUnshift.mdx b/content/docs/(functions)/Text/Array/arrayUnshift.mdx new file mode 100644 index 00000000..dbf1e707 --- /dev/null +++ b/content/docs/(functions)/Text/Array/arrayUnshift.mdx @@ -0,0 +1,21 @@ +--- +title: "$arrayUnshift" +--- + +Adds an element to the start of the array. + +## Usage + +```cc +$arrayUnshift[value;array name (optional)] +``` + +### Example: + + +!!exec $arrayUnshift[Mido]
$arrayUnshift[Rake]
$arrayUnshift[Azz]
$arrayJoin[/]

+
+ +Azz/Rake/Mido + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Array/meta.json b/content/docs/(functions)/Text/Array/meta.json new file mode 100644 index 00000000..7db01186 --- /dev/null +++ b/content/docs/(functions)/Text/Array/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Array Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Components/addButton.mdx b/content/docs/(functions)/Text/Components/addButton.mdx new file mode 100644 index 00000000..6eb95f73 --- /dev/null +++ b/content/docs/(functions)/Text/Components/addButton.mdx @@ -0,0 +1,31 @@ +--- +title: "$addButton" +--- + +Adds a button to an existing message. Use `$button` to send a message with a button. + +## Usage +`$addButton[Message ID;Label;style/url;link/id;emoji(optional);Add to a new role (yes/no, optional); disabled (yes/no, optional)]` +
+ +## Example +(Add a simple button) +![](https://cdn.discordapp.com/attachments/914682255346118687/938578211380543578/Screenshot_20220202202417.jpg) +(Add in new row) +![](https://cdn.discordapp.com/attachments/914682255346118687/938578211695112192/Screenshot_20220202202711.jpg) +(Add disabled) +![](https://cdn.discordapp.com/attachments/914682255346118687/938578212018085899/Screenshot_20220202203325.jpg) + + + +`red, green, blurple, grey, url` +\ +**URL buttons are grey by default.** + +* You can use normal unicode emojis, custom emojis with their ID, or you can use `$customEmoji`. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Components/addMenu.mdx b/content/docs/(functions)/Text/Components/addMenu.mdx new file mode 100644 index 00000000..b2dfd9c1 --- /dev/null +++ b/content/docs/(functions)/Text/Components/addMenu.mdx @@ -0,0 +1,42 @@ +--- +title: "$addMenu" +--- + +Add a menu to existing message + +## Usage +```cc +$addMenu[ + {channel=channel id} + {message=message id} + {id=Menu ID} + {ph=Placeholder} + + {option=Option 1} + {desc=Option 1 Description} + {value=Option 1 ID} + {emoji=Option 1 Emoji} + + {option=Option 2} + {desc=Option 2 Description} + {value=Option 2 ID} + {emoji=Option 2 Emoji} + ... + ] +``` + +### Example: +```cc +$addMenu[ + {chid=$channelID} + {mid=1151607052007907449} + {id=mymenu} + {option=Rake} + {value=rake} + + {option=Mido} + {value=mido}] +``` + +### Output +![](https://i.imgur.com/yMUAza7.png) \ No newline at end of file diff --git a/content/docs/(functions)/Text/Components/awaitButton.mdx b/content/docs/(functions)/Text/Components/awaitButton.mdx new file mode 100644 index 00000000..fc4d73f7 --- /dev/null +++ b/content/docs/(functions)/Text/Components/awaitButton.mdx @@ -0,0 +1,65 @@ +--- +title: "$awaitButton" +--- + +Waits for a button to be pressed and return its button id, or `undefined` in case no button was pressed when the timeout is reached. + + +This function supports the [Message Curl Format](/CodeReferences/ref.message_curl_format.html). +This way, you can send a message with buttons by using `{button:label:style/url:emoji:id:newline(yes/no)}`. + + + +## Usage +```cc +$awaitButton[Message (optional);user id (optional, default:author);timeout (optional, default:15s);button id1 (optional);button id2...] +``` +
+ +### Timeout +The maximum time the bot waits for a user to click a button.\ +Accepts time in the format `10s` for example.\ +The max time is `60 x (bot tier + 1)` seconds, for example for tier 3 it would be `240` seconds. + + + + +(Simple response) + +![](https://cdn.discordapp.com/attachments/914682255346118687/938556903116652594/Screenshot_20220202190956.jpg) + +(Usage example) +```cc +$let[pressedButton;$awaitButton[Which color is my favorite? +{button:Green:GREEN::green} +{button:Blue:BLUE::blue} +{button:Red:RED::red};$authorID;15s;red;blue;green]] +/* Saves the pressed button id in a temporary var, so you can retrieve later */ + +$if[$pressedButton!=red] +Wrong! +$else +Correct! +$endif +/* If the button id is different from red, which is the right answer, then incorrect. Else, correct. */ +``` +Choosing something other them red, or nothing. +![](https://cdn.discordapp.com/attachments/914682255346118687/938559970293714984/Screenshot_20220202191954.jpg) + +Choosing red. + +![](https://cdn.discordapp.com/attachments/914682255346118687/938559970792845312/Screenshot_20220202191947.jpg) + + + + + + +You can send an embed using the [Message Curl Format](/CodeReferences/ref.message_curl_format). + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Components/awaitMenu.mdx b/content/docs/(functions)/Text/Components/awaitMenu.mdx new file mode 100644 index 00000000..ecc442f0 --- /dev/null +++ b/content/docs/(functions)/Text/Components/awaitMenu.mdx @@ -0,0 +1,26 @@ +--- +title: "$awaitMenu" +--- + +To wait for a menu option to be selected and return the selected option(s) values. +If nothing is selected, it returns `undefined`. +If multiple values are selected, all of them will be returned, separated with `,`. + +## Usage + +```cc +$awaitMenu[Message (optional);user id (optional, default:author);timeout (optional, default:15s);menu id1 (optional);menu id2...] +``` +### Timeout +The maximum time the bot waits for a user to select an option.\ +Accepts time in the format `10s` for example.\ +The max time is `60 x (bot tier + 1)` seconds, for example for tier 3 it would be `240` seconds. + +### Example: + + +!!exec You selected: $awaitMenu[
\{title: Test}
\{menu:
\{id=test}
\{placeholder=Select}
\{min=1}
\{max=1}
\{option=Mido}
\{desc=A guy}
\{value=mido}
\{option=Rake}
\{desc=Another guy}
\{value=rake}
}
;$authorID;;test]

+
+
+ +![](https://i.imgur.com/58Wzc05.gif) diff --git a/content/docs/(functions)/Text/Components/button.mdx b/content/docs/(functions)/Text/Components/button.mdx new file mode 100644 index 00000000..59b24510 --- /dev/null +++ b/content/docs/(functions)/Text/Components/button.mdx @@ -0,0 +1,110 @@ +--- +title: "$button" +--- + +Creates a discord button. + +## Usage +```cc +$button[label;style;link/id;emoji (optional);disabled (yes/no, optional);new line (yes/no, optional)] +``` + +## Basic button +The simplest button possible, has a label and ID. + +```cc +$button[Click me!;;verySimpleButton] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126652117373964338/basic-button.png) + + + +ID is used to identify the button clicked. This way, you can decide what happens after clicking a specific button. +Keep in mind, that there can't be two buttons with the same ID in one message. + + + +## Colors +There are four button colors discord allows you to use: +`blurple`, `grey`, `green`, and `red`. + +```cc +$button[Blurple;blurple;blurpleButton] +$button[Grey;grey;greyButton] +$button[Green;green;greenButton] +$button[Red;red;redButton] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126656639915790428/color-buttons.png) + +## Links +You can also create buttons that open a link when clicked. +To make one, you have to set the style to `url`, and put the link as ID. +```cc +$button[Check out our website!;url;https://ccommandbot.com] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126655903555399781/url-button.png) + +## Emojis +Both interaction and url buttons can have emojis. +```cc +Please verify! +$button[Verify;grey;heartButton;:detective:] +$button[Server rules;url;https://discord.com/channels/772051119538176021/772051119923789847/818136570896449577;📜] +$button[Open ticket;grey;openTicket;<:thinking:833253889833697300>] +$button[Leave server;grey;leaveServer;$customEmoji[no]] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126661173086015498/image.png) + +## Disabled +You can disable any button by adding `yes` after the emoji. +```cc +We are not looking for new staff members at the moment. +$button[Apply;blurple;applyButton;;yes] +$button[View requirements;blurple;viewRequirements;;no] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126662743408255056/image.png) + +## New lines +By default, buttons are placed in one line. +You can change that by adding `yes` after the disabled parameter. +```cc +$button[Button in the first line;grey;button1;;;no] +$button[Button in a new line;grey;button2;;;yes] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126663318514450492/newlined.png) + +## Curl format +In some cases you may want to include a button in a message sent by a function. +An example of a function like this would be a `$sendmessage` function. + +### Curl usage: +Mind that the order of `emoji` and `id` is reversed in this case, and the separator is `:` instead of `;`. +``` +{button:label:style:emoji:id:newLine (yes/no, optional):disabled (yes/no, optional)} +``` + +### Example: +```cc +$sendmessage[How's your day going? + {button:Fine:grey:😀:fine} + {button:Bad:grey:😢:bad} +] +``` +![](https://cdn.discordapp.com/attachments/957286111250624552/1126666908662513684/image.png) + + + + +Now, as you know how to create buttons, you may want to know how to handle them. +Check these pages: + +- [Button trigger](/Trigger/button) +- `$awaitButton` + + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Components/buttonEmoji.mdx b/content/docs/(functions)/Text/Components/buttonEmoji.mdx new file mode 100644 index 00000000..04981933 --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonEmoji.mdx @@ -0,0 +1,12 @@ +--- +title: "$buttonEmoji" +--- + +Return the clicked button's emoji in the [Button trigger](/Trigger/button.html). If there is no emoji, it returns `undefined`. + +## Usage + +```cc +$buttonEmoji +``` + diff --git a/content/docs/(functions)/Text/Components/buttonID.mdx b/content/docs/(functions)/Text/Components/buttonID.mdx new file mode 100644 index 00000000..527e642b --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonID.mdx @@ -0,0 +1,12 @@ +--- +title: "$buttonID" +--- + +Returns the Button ID that triggered the command. Returns `undefined` if the trigger isn't Button. + +## Usage + +```cc +$buttonID +``` + diff --git a/content/docs/(functions)/Text/Components/buttonIsDisabled.mdx b/content/docs/(functions)/Text/Components/buttonIsDisabled.mdx new file mode 100644 index 00000000..2357bb14 --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonIsDisabled.mdx @@ -0,0 +1,13 @@ +--- +title: "$buttonIsDisabled" +--- + +Returns true if the button is disabled, otherwise returns `false`. +
If there's no button, return `undefined`. + +## Usage + +```cc +$buttonIsDisabled +``` + diff --git a/content/docs/(functions)/Text/Components/buttonLabel.mdx b/content/docs/(functions)/Text/Components/buttonLabel.mdx new file mode 100644 index 00000000..6673cfb8 --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonLabel.mdx @@ -0,0 +1,12 @@ +--- +title: "$buttonLabel" +--- + +Return the clicked button's label in the Button trigger. If the button doesn't have a label, return `undefined`. + +## Usage + +```cc +$buttonLabel +``` + diff --git a/content/docs/(functions)/Text/Components/buttonStyle.mdx b/content/docs/(functions)/Text/Components/buttonStyle.mdx new file mode 100644 index 00000000..89ee7783 --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonStyle.mdx @@ -0,0 +1,12 @@ +--- +title: "$buttonStyle" +--- + +Return the clicked button's style, e.g. `blurple`/`red`/`url` in the Button trigger. If none, `undefined` is returned. + +## Usage + +```cc +$buttonStyle +``` + diff --git a/content/docs/(functions)/Text/Components/buttonURL.mdx b/content/docs/(functions)/Text/Components/buttonURL.mdx new file mode 100644 index 00000000..1744f7a9 --- /dev/null +++ b/content/docs/(functions)/Text/Components/buttonURL.mdx @@ -0,0 +1,12 @@ +--- +title: "$buttonURL" +--- + +Return the clicked button's URL in Button trigger if it exists. Else, returns `undefined` if not found. + +## Usage + +```cc +$buttonURL +``` + diff --git a/content/docs/(functions)/Text/Components/disableButton.mdx b/content/docs/(functions)/Text/Components/disableButton.mdx new file mode 100644 index 00000000..4ebd87e2 --- /dev/null +++ b/content/docs/(functions)/Text/Components/disableButton.mdx @@ -0,0 +1,28 @@ +--- +title: "$disableButton" +--- + +Disables a button using its `(ID/label/Emoji/URL)`. + +## Usage +```cc +$disableButton[Message ID;Label/Emoji/URL/ID (optional, default: disables the last button); Channel ID (optional, default $channelID)] +``` + +##### Example +(Disable button by emoji) +![](https://cdn.discordapp.com/attachments/914682255346118687/938548624093224960/Screenshot_20220202182740.jpg) +(Disable button by URL) +![](https://cdn.discordapp.com/attachments/914682255346118687/938548624298762310/Screenshot_20220202182855.jpg) +(Disable button by ID) +![](https://cdn.discordapp.com/attachments/914682255346118687/938548624743362560/Screenshot_20220202183406.jpg) +(Disable button by label) +![](https://cdn.discordapp.com/attachments/914682255346118687/938548624525234276/Screenshot_20220202182932.jpg) +(Disable the last button ) +![](https://cdn.discordapp.com/attachments/914682255346118687/938548624940482560/Screenshot_20220202183637.jpg) + +
+ +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Components/disableButtons.mdx b/content/docs/(functions)/Text/Components/disableButtons.mdx new file mode 100644 index 00000000..fc8aa1e5 --- /dev/null +++ b/content/docs/(functions)/Text/Components/disableButtons.mdx @@ -0,0 +1,12 @@ +--- +title: "$disableButtons" +--- + +Disable buttons in a message, not providing a Button ID will disable every button in the message. + +## Usage + +```cc +$disableButtons[Message ID;Button ID 1;Button ID 2;....] +``` + diff --git a/content/docs/(functions)/Text/Components/disableMenu.mdx b/content/docs/(functions)/Text/Components/disableMenu.mdx new file mode 100644 index 00000000..9ebecbe5 --- /dev/null +++ b/content/docs/(functions)/Text/Components/disableMenu.mdx @@ -0,0 +1,12 @@ +--- +title: "$disableMenu" +--- + +Disable menus in the given message, not providing a Menu ID will disable every menu in the message. + +## Usage + +```cc +$disableMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] +``` + diff --git a/content/docs/(functions)/Text/Components/editButton.mdx b/content/docs/(functions)/Text/Components/editButton.mdx new file mode 100644 index 00000000..daf9d492 --- /dev/null +++ b/content/docs/(functions)/Text/Components/editButton.mdx @@ -0,0 +1,32 @@ +--- +title: "$editButton" +--- + +Edits an existing button using its `(ID/label/Emoji/URL)`. + +## Usage +```cc +$editButton[Message ID;Query (optional, default: edit the last button);label/style/emoji/disabled/url/custom_id;New Value] +``` + + + + +![](https://cdn.discordapp.com/attachments/914682255346118687/938564348102717440/unknown.jpeg) +(Disable the last button) +![](https://cdn.discordapp.com/attachments/914682255346118687/938568269349142538/Screenshot_20220202194114.jpg) + +(Change the label by URL) +![](https://cdn.discordapp.com/attachments/914682255346118687/938568269818916864/Screenshot_20220202194404.jpg) + +(Change the color by label) +![](https://cdn.discordapp.com/attachments/914682255346118687/938568270053789737/Screenshot_20220202194603.jpg) + + + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Components/editMenu.mdx b/content/docs/(functions)/Text/Components/editMenu.mdx new file mode 100644 index 00000000..c8776c39 --- /dev/null +++ b/content/docs/(functions)/Text/Components/editMenu.mdx @@ -0,0 +1,17 @@ +--- +title: "$editMenu" +--- + +Edits a menu in given message.\ +`type` can be: `id/disabled/max/min/placeholder/ph/options`. + +## Usage + +```cc +$editMenu[message id;menu id;type;new value] +``` + +### Example: +```cc +$editMenu[$messageID;menu_id;placeholder;A new placeholder] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Text/Components/enableButtons.mdx b/content/docs/(functions)/Text/Components/enableButtons.mdx new file mode 100644 index 00000000..34059870 --- /dev/null +++ b/content/docs/(functions)/Text/Components/enableButtons.mdx @@ -0,0 +1,12 @@ +--- +title: "$enableButtons" +--- + +Enable buttons in a message, not providing a Button ID will enable every button in the message. + +## Usage + +```cc +$enableButtons[Message ID;Button ID 1;Button ID 2;....] +``` + diff --git a/content/docs/(functions)/Text/Components/enableMenu.mdx b/content/docs/(functions)/Text/Components/enableMenu.mdx new file mode 100644 index 00000000..513c6ee0 --- /dev/null +++ b/content/docs/(functions)/Text/Components/enableMenu.mdx @@ -0,0 +1,12 @@ +--- +title: "$enableMenu" +--- + +Enables menus in a given message, not providing a Menu ID will enable every menu in the message. + +## Usage + +```cc +$enableMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] +``` + diff --git a/content/docs/(functions)/Text/Components/eventSelected.mdx b/content/docs/(functions)/Text/Components/eventSelected.mdx new file mode 100644 index 00000000..0f6ed934 --- /dev/null +++ b/content/docs/(functions)/Text/Components/eventSelected.mdx @@ -0,0 +1,16 @@ +--- +title: "$eventSelected" +--- + +Returns values that were selected by the user using `$selectMenu`. + +## Usage + +```cc +$eventSelected or $eventSelected[position;seperator] +``` + +### For Example: + `$eventSelected` would return the first selected value.\ + `$eventSelected[2]` would return the second selected value, since it was the second value clicked by the user.\ + `$eventSelected[;,]` would return all selected values separated with `,`. diff --git a/content/docs/(functions)/Text/Components/eventTargetID.mdx b/content/docs/(functions)/Text/Components/eventTargetID.mdx new file mode 100644 index 00000000..ebd8c1dd --- /dev/null +++ b/content/docs/(functions)/Text/Components/eventTargetID.mdx @@ -0,0 +1,25 @@ +--- +title: "$eventTargetID" +--- + +Returns the ID of the target selected by the user when using a **context menu command**. + +## Usage + +```cc +$eventTargetID +``` + +### For Example: + +For a **User Command (Context Menu)**, `$eventTargetID` returns the **User ID** of the user selected from the context menu. + +For a **Message Command (Context Menu)**, `$eventTargetID` returns the **Message ID** of the message selected from the context menu. + +```cc +$interactionReply[Target ID: $eventTargetID] +``` + +If `@Mido` selects a User Command on `@Zero`, `$eventTargetID` would return Zero's User ID. + +If `@Mido` selects a Message Command on a message, `$eventTargetID` would return the selected message's ID. diff --git a/content/docs/(functions)/Text/Components/menuId.mdx b/content/docs/(functions)/Text/Components/menuId.mdx new file mode 100644 index 00000000..e1287c23 --- /dev/null +++ b/content/docs/(functions)/Text/Components/menuId.mdx @@ -0,0 +1,12 @@ +--- +title: "$menuID" +--- + +Return the Menu ID of the menu triggered with the [Select Menu Trigger](/Trigger/menu). + +## Usage + +```cc +$menuID +``` + diff --git a/content/docs/(functions)/Text/Components/meta.json b/content/docs/(functions)/Text/Components/meta.json new file mode 100644 index 00000000..d9fa3cea --- /dev/null +++ b/content/docs/(functions)/Text/Components/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Button Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Components/removeButton.mdx b/content/docs/(functions)/Text/Components/removeButton.mdx new file mode 100644 index 00000000..847ec051 --- /dev/null +++ b/content/docs/(functions)/Text/Components/removeButton.mdx @@ -0,0 +1,31 @@ +--- +title: "$removeButton" +--- + +Removes a button from an existing message using its `(ID/label/Emoji/URL)`. + +## Usage +```cc +$removeButton[Message ID;Label/Emoji/URL/ID (optional, empty means removing the last button)] +``` +
+ + + + +(Remove Button using its label) +```cc +$removeButton[863xxxxxxxxxx21130;Visit example.com] +``` + +(Remove the Last button) +```cc +$removeButton[863xxxxxxxxxx21130] +``` + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Components/removeButtons.mdx b/content/docs/(functions)/Text/Components/removeButtons.mdx new file mode 100644 index 00000000..54343c38 --- /dev/null +++ b/content/docs/(functions)/Text/Components/removeButtons.mdx @@ -0,0 +1,17 @@ +--- +title: "$removeButtons" +--- + +Removes multiple buttons from a message using their IDs. + +## Usage +```cc +$removeButtons[Message ID;Button ID1;Button ID2...] +``` +
+ +![](https://cdn.discordapp.com/attachments/914682255346118687/938537575486980136/Screenshot_20220202175147_1.jpg) + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Components/removeEmbed.mdx b/content/docs/(functions)/Text/Components/removeEmbed.mdx new file mode 100644 index 00000000..a20b7538 --- /dev/null +++ b/content/docs/(functions)/Text/Components/removeEmbed.mdx @@ -0,0 +1,19 @@ +--- +title: "$removeEmbed" +--- + +remove an embed or all embeds from a message + +## Usage + +```cc +$removeEmbed[Channel ID (default is $channelID);Message ID (default is $messageID);Embed Number (default is 1)] +``` + +### Note: +You can remove all embeds by setting embed number to `all` + +### Example: +```cc +$removeEmbed[$channelID;$messageID;1] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Text/Components/removeMenu.mdx b/content/docs/(functions)/Text/Components/removeMenu.mdx new file mode 100644 index 00000000..3eb47df4 --- /dev/null +++ b/content/docs/(functions)/Text/Components/removeMenu.mdx @@ -0,0 +1,12 @@ +--- +title: "$removeMenu" +--- + +Removes menus in a given message, not providing a Menu ID will remove every menu in the message. + +## Usage + +```cc +$removeMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] +``` + diff --git a/content/docs/(functions)/Text/Components/selectMenu.mdx b/content/docs/(functions)/Text/Components/selectMenu.mdx new file mode 100644 index 00000000..1c4cef2b --- /dev/null +++ b/content/docs/(functions)/Text/Components/selectMenu.mdx @@ -0,0 +1,211 @@ +--- +title: "$selectMenu" +--- + +Creates a Menu with options. + +## Usage +```cc +$selectMenu[{menu structure}] +``` + +#### Menu Structure +to construct a menu inside $selectMenu, it needs to follow this structure +``` +{id=menu id} +{placeholder/ph=A placeholder for the menu} +{min=minimum options to be selected (i.e 1)} +{max=maximum options to be selected (i.e 5)} +{type=the menu type (i.e text/user/role/mention/channel)} + + +// Each option can be structured like this +{option=Option name} +{value=option id} +{desc=description of the option (optional)} +{emoji=an emoji of the option (optional)} + +``` +* `type` the menu type, can be `text` (default), `user` (to select a user), `role` (role select), `mention` (role or user select), `channel` (channel select) +* `id` the id of menu must be unique on multiple menus +* `placeholder` +* `min` minimum to select (optional) +* `max` maximum to select (optional) +* `option` label of option +* `desc` description of option +* `value` id of option ,which `$eventSelected` returns when the user selects the option +* `emoji` emoji for option (optional) + +Info: +* You can have up to 5 menu in a message +* You can add maximal 20 options for each menu + +## Examples +### Sending a menu with some options with $selectMenu +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the option} + {type=text} + {min=1} + {max=2} + + {option=Option 1} + {value=option_1} + + {option=Option 2} + {value=option_2} + + {option=Option 3} + {value=option_3} +] +``` +![](https://i.imgur.com/pSIYauj.png) + +### Sending a menu with some options and selected some of them +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the option} + {type=text} + {min=1} + {max=2} + + {option=Option 1} + {value=option_1} + + {option=Option 2} + {value=option_2} + + {option=Option 3} + {value=option_3} + + {selected=option_1} + {selected=option_3} +] +``` +![](https://i.imgur.com/gAe2sP0.png) + + +### Sending a menu to select user with $selectMenu +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the user} + {type=user} + {min=1} + {max=2} +] +``` +![](https://i.imgur.com/TuXQ5nN.png) + +### Sending a menu to select user with $sendMessage +```cc +$sendMessage[ + {menu: + {id=my_menu} + {ph=Select the user} + {type=user} + {min=1} + {max=2} + } +] +``` +![](https://i.imgur.com/EXOYY1k.png) + +### Sending a menu with selected user +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the user} + {type=user} + {min=1} + {max=2} + {selected_user=$userID} +] +``` +![](https://i.imgur.com/UmFu9Of.png) + +### Sending a menu with selected role +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the role} + {type=role} + {min=1} + {max=2} + {selected_role=$roleID[Test1]} +] +``` +![](https://i.imgur.com/XldvSKC.png) + +### Sending a menu with selected channel +```cc +$selectMenu[ + {id=my_menu} + {ph=Select the channel} + {type=channel} + {min=1} + {max=2} + {selected_channel=$channelID} +] +``` +![](https://i.imgur.com/gNDtTWP.png) + +### Sending a menu with selected mentionable (user / role) +```cc +$selectMenu[ + {id=my_menu} + {ph=Select user or role} + {type=mention} + {min=1} + {max=2} + {selected_role=$roleID[Test1]} + {selected_user=$userID} +] +``` +![](https://i.imgur.com/ZkamUGb.png) + + + +This syntax is called curl args.It is really similar to curl message.Especially new Functions support it ,you can use !!func `function name` to check if it supports curl arguments. + [Learn more](/Other/curl) + + + + + + +Use: +``` +{menu: +{id=id} +{placeholder=Pls select your answer!} +{min=1} +{max=2} +{option=Option one } +{desc=txt for one} +{value=one} +{emoji=$customEmoji[accept]} +} +``` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + +Link escapes are needed, use `\` to escape characters. Read [me](/Other/syntax) to see more + + + + + +Using the menu as trigger check here to [learn more](/Trigger/menu). + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Condition/checkCondition.mdx b/content/docs/(functions)/Text/Condition/checkCondition.mdx new file mode 100644 index 00000000..279247dd --- /dev/null +++ b/content/docs/(functions)/Text/Condition/checkCondition.mdx @@ -0,0 +1,34 @@ +--- +title: "$checkCondition" +--- + +Checks if given expression is true or false. + +## Usage + +```cc +$checkCondition[Expression] +``` + +### Example: + + +!!exec $checkCondition[$username==Mido]

+
+ +true

+
+
+ +### Example: + + +!!exec $checkCondition[10<5]

+
+ +false + +
+ +## To know more about expressions +Read about it [here](/CodeReferences/ref.expression) diff --git a/content/docs/(functions)/Text/Condition/conditional.mdx b/content/docs/(functions)/Text/Condition/conditional.mdx new file mode 100644 index 00000000..7358e38c --- /dev/null +++ b/content/docs/(functions)/Text/Condition/conditional.mdx @@ -0,0 +1,24 @@ +--- +title: "$conditional" +--- + +return A if condition is true, B if condition is false + +## Usage + +```cc +$conditional[condition;A;B] +``` + +### Example: + + +!!exec $conditional[$username==Mido;You are Mido;You are Rake]

+
+ +You are Mido

+
+
+ +### Output (if Rake run the command): +You are Rake \ No newline at end of file diff --git a/content/docs/(functions)/Text/Condition/else.mdx b/content/docs/(functions)/Text/Condition/else.mdx new file mode 100644 index 00000000..54fb0e40 --- /dev/null +++ b/content/docs/(functions)/Text/Condition/else.mdx @@ -0,0 +1,19 @@ +--- +title: "$else" +--- + +is used in case $if and $elseIf is not true + +## Usage + +```cc +$if[1==2] +CODE BLOCk +$elseIf[3==4] +ANOTHER CODE BLOCK +$endelseif +$else +ELSE CODE BLOCK +$endIf +``` + diff --git a/content/docs/(functions)/Text/Condition/elseif.mdx b/content/docs/(functions)/Text/Condition/elseif.mdx new file mode 100644 index 00000000..53964632 --- /dev/null +++ b/content/docs/(functions)/Text/Condition/elseif.mdx @@ -0,0 +1,14 @@ +--- +title: "$elseif" +--- + +will be checked if $if was false, should be ended with $endelseif + +## Usage + +```cc +$elseIf[EXPRESSION] +CODE BLOCK +$endelseif +``` + diff --git a/content/docs/(functions)/Text/Condition/endIf.mdx b/content/docs/(functions)/Text/Condition/endIf.mdx new file mode 100644 index 00000000..6358ce9c --- /dev/null +++ b/content/docs/(functions)/Text/Condition/endIf.mdx @@ -0,0 +1,14 @@ +--- +title: "$endIf" +--- + +is used to end the whole $if block + +## Usage + +```cc +$if[EXPRESSION] +CODE BLOCK +$endIf +``` + diff --git a/content/docs/(functions)/Text/Condition/endelseif.mdx b/content/docs/(functions)/Text/Condition/endelseif.mdx new file mode 100644 index 00000000..08dd4f42 --- /dev/null +++ b/content/docs/(functions)/Text/Condition/endelseif.mdx @@ -0,0 +1,14 @@ +--- +title: "$endelseif" +--- + +is used to close $elseIf + +## Usage + +```cc +$elseIf[EXPR] +CODE BLOCK +$endelseif +``` + diff --git a/content/docs/(functions)/Text/Condition/if.mdx b/content/docs/(functions)/Text/Condition/if.mdx new file mode 100644 index 00000000..3de3fbb3 --- /dev/null +++ b/content/docs/(functions)/Text/Condition/if.mdx @@ -0,0 +1,134 @@ +--- +title: "$if" +--- + +Checks An expression and executes code Only if that expression is true + +## Shortest Syntax +```cc +$if[EXPRESSION] + CODE +$endIf +``` + +## What is expression? +Read about it [here](/CodeReferences/ref.expression) + +##### Example 1 only with $if + +Since the username of the executor is Tom it executed the if block +
+ + +!!exec $if[$username==Tom]
+Oh, you are Tom!
+$endIf +
+ +Oh, you are Tom! + +
+ +##### Example 2 only with $if and $else + +Since the username is not Tom it executes the else block +
+ + +!!exec $if[$username==Tom]
+Oh, you are Tom!
+$else
+You are not Tom!
+$endIf +
+ +You are not Tom! + +
+ +##### Example 3 $if , $else and $elseif + +Since the username is not Tom .It goes to the next if statement ,which is $elseif[$username==Lisa] and it will execute it +
+ + +!!exec $if[$username==Tom]
+Oh, you are Tom!
+$elseif[$username==Lisa]
+You are Lisa!
+$endelseIf
+$else
+I don't know you :C
+$endIf +
+ +You are Lisa! + +
+ +##### Example 4 $if , $else and $elseif + +Since the username is not Tom .It goes to the next if statement ,which is $elseif[$username==Lisa] and it will execute it + +Info: The second else if will get never executed ,because it will exit the statement after the first true expression +
+ + +!!exec $if[$username==Tom]
+Oh, you are Tom!
+$elseif[$username==Lisa]
+1.You are Lisa!
+$endelseIf
+$elseif[$username==Lisa]
+2.You are Lisa!
+$endelseIf
+$else
+I don't know you :C
+$endIf +
+ +1.You are Lisa! + +
+ +##### Example 5 multiplie condtions in if with && or || +Expression can accept multiple conditions, use `||` or `&&` as separators +
`||` is for OR +
`&&` is for AND + +Example: +```cc +$username==Mido&&$country==Egypt +``` +Condition 1: `$username==Mido` +Condition 2: `$country==Egypt` +But this expression will only be true only if both condition 1 **AND** (because of &&) condition 2 is `true` + +The Example below will execute since $username==Tom is false but the second expression is true .It wouldn't work with && +
+ + +!!exec $if[$username==Tom||$username=Lisa]
+You are Tom or Lisa
+$endIf +
+ +You are Tom or Lisa + +
+ +The Example will only execute if the username is Lisa and their tag is 9999 + + +!!exec $if[$username==Lisa&&$discriminator=9999]
+You are Lisa with tag 9999
+$endIf
+
+ +You are Lisa with tag 9999 + +
+ +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Condition/meta.json b/content/docs/(functions)/Text/Condition/meta.json new file mode 100644 index 00000000..39c430c9 --- /dev/null +++ b/content/docs/(functions)/Text/Condition/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Condition Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Embed/addField.mdx b/content/docs/(functions)/Text/Embed/addField.mdx new file mode 100644 index 00000000..ec1130d9 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/addField.mdx @@ -0,0 +1,67 @@ +--- +title: "$addField" +--- + +Adds fields to a message embed. + +## Usage +```cc +$addField[title;value;inline(yes/no default=yes)(optional)] +``` +
+ + +!!exec $addField[title;value;no]
+$addField[title2;value2]
+$addField[title3;value3]
+$addField[title4;value4]
+
+ + + + +value + + +value2 + + +value3 + + +value4 + + + + +
+ +$addField with hyperlinks: +Usage: `\[link\](https://ccommandbot.com "tooltip(optional)")` + + +!!exec $addField[title;This is a field with \[link\](https://ccommandbot.com "tooltip")] + + + + + +This is a description hello + + + + + + + + + +Use: `{field:name:value:inline(yes/no default=yes)(optional)}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Embed/addTimestamp.mdx b/content/docs/(functions)/Text/Embed/addTimestamp.mdx new file mode 100644 index 00000000..cfb8c780 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/addTimestamp.mdx @@ -0,0 +1,45 @@ +--- +title: "$addTimestamp" +--- + +Adds a timestamp to a message embed. + +## Usage +```cc +$addTimestamp +``` or `$addTimestamp[ms]` +
+ + +!!exec $addTimestamp + + + + + + + +or with specified Time + + + +!!exec $addTimestamp[$parseTime[13/09/2021]] + + + + + + + + + + +Use: `{timestamp:ms}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Embed/attachment.mdx b/content/docs/(functions)/Text/Embed/attachment.mdx new file mode 100644 index 00000000..22227f69 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/attachment.mdx @@ -0,0 +1,16 @@ +--- +title: "$attachment" +--- + +Adds an attachment to a message.\ +\ +If the name field is given, you must specify the extension for the attachment (png, webp, or gif) + +## Usage + +```cc +$attachment[data;name (optional);type (url or buffer) (optional);spoiler (yes/no, default is no) (optional)] +``` + +## Example +![](https://i.imgur.com/ZoePBlD.png) diff --git a/content/docs/(functions)/Text/Embed/author.mdx b/content/docs/(functions)/Text/Embed/author.mdx new file mode 100644 index 00000000..5c22d7f8 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/author.mdx @@ -0,0 +1,47 @@ +--- +title: "$author" +--- + +Adds an author to a message embed, with an optional icon url and/or hyperlink. + +## Usage +```cc +$author[text;icon url(optional);hyperlink(optional)] +``` +
+ + +!!exec $author[text] + + + + + + +!!exec $author[text;$authorAvatar] + + + + + + +!!exec $author[text;$authorAvatar;https://ccommandbot.com] + + + + + + + + + + +Use: `{author:text:icon url(optional):hyper link(optional)}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Embed/color.mdx b/content/docs/(functions)/Text/Embed/color.mdx new file mode 100644 index 00000000..759cd631 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/color.mdx @@ -0,0 +1,50 @@ +--- +title: "$color" +--- + +sets the color of the embed + +## Usage +`$color[Hex or Color Name]` + +## Accepted Color Names +Check this [page](/CodeReferences/ref.embed.colors) + +## Example 1: Using it in function format +
+ + +!!exec $color[#0099ff] + + + + + + + +## Example 2: Using In Curl Format +
+ + +!!exec $sendMessage[
\{desc:You are awesome}
\{color:#0099ff}
] +
+ + +You are awesome + + +
+ + + + +Use: `{color:hex or colorname or RANDOM or TRANSPARENT}` +Example: `{color:#0099ff}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Embed/description.mdx b/content/docs/(functions)/Text/Embed/description.mdx new file mode 100644 index 00000000..11379d50 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/description.mdx @@ -0,0 +1,47 @@ +--- +title: "$description" +--- + +Adds a description to a message embed. + +## Usage +```cc +$description[your text] +``` +
+ + +!!exec $description[This is a description] + + + +This is a description + + + + +Description with hyperlinks: +Usage: `\[link\](https://ccommandbot.com "tooltip(optional)")` + + +!!exec $description[This is a description with \[link\](https://ccommandbot.com "tooltip")] + + + +This is a description hello + + + + + + + +Use: `{description:your text}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Embed/example.mdx b/content/docs/(functions)/Text/Embed/example.mdx new file mode 100644 index 00000000..fcc7951c --- /dev/null +++ b/content/docs/(functions)/Text/Embed/example.mdx @@ -0,0 +1,128 @@ +--- +title: "Complete Embed" +--- + +Here is a code example for a complete embed in both function and curl format. +## Function Format + +```cc +$author[name;avatar;link] +$title[title;url] +$color[hex/colorname/random] +$thumbnail[url] +$description[description] +$addField[name;value;inline (yes/no)] +$image[url] +$footer[text;url] +$button[name;color;id;emoji;disabled (yes/no);inline (yes/no)] +$reply[message id;mention (yes/no)] +$attachment[url;name] +$editIn[time;New Content] +$deleteIn[time] +$deletecommand +$addTimestamp[time] +$addReactions[emoji;emoji...] +$selectMenu[id;placeholder;min value(optional);max value;(optional);label;desc;value;value] +``` + +## Curl Format +Here are all curl embed components you can use in any function containing `message` field. + +```cc +{content:text} +{author:name:avatar:link url} +{title:title} +{color:hex/colorname/random} +{url:title url} +{thumbnail:url} +{description:description} +{field:name:value:inline (yes/no)} +{image:url} +{footer:footer:avatar url} +{timestamp:time} +{button:label:style/color/url:emoji:id/link:newline (yes/no):disabled (yes/no)} +{reply:message id} +{reply_mention} +{attachment:file name:url:spoiler (yes/no)} +{reactions:emoji,emoji...} +{reaction:emoji,emoji...} +{suppress:yes/no} +{delete:time} +{edit:time:new content} +{deletecommand} +{deletecommand:time} +{timestamp} +{pin} +{silent} +``` + +### Only for interactions +These arguments can be used in interaction trigger commands. + +```cc +{interaction} +{ephemeral=yes/no} +{message=content, curl embed, menus, buttons...} // Only in $interactionReply +``` + + + +Ephemeral messages are interaction replies visibile only to the one who executed the command. + +![Ephemeral message preview](https://cdn.discordapp.com/attachments/957286111250624552/1100459877480013914/image.png) + + + +## What is the difference between function and embed format? + +### 1. Function Format: + +Function format works as usual functions, but it allows you to send up to **1 embed** and the embed gets sent right after the execution of your command. + +#### Example: +If you created a command with the following code, the bot would: +1. First change author's +2. Send an embed confirming the change, + +```cc +$title[Nickname changed] +$description[Your nickname has been changed to lowercase ($toLowercase[$username])] + +$changeNickname[$authorID;$toLowercase[$username]] +``` + +### 2. Curl Format: + +Curl embeds are a more complex way of sending embeds. It's used to "attach" an embed to a message sent with a function like `$sendMessage` or `$interactionReply`. +This format unlike the previous one, follows the normal code flow. + +#### Example: +The following code would: +1. Send a message announcing the upcoming nickname change, +2. Edit user's nickname, +3. Edit the previously sent message to confirm the change. + +```cc +$sendMessage[ + {title: Nickname change} + {description: Your nickname is going to be changed to lowercase ($toLowercase[$username])} +] + +$changeNickname[$authorID;$toLowercase[$username]] + +$editMessage[$sentMessageID; + {title: Nickname changed} + {description: Your nickname has been changed to lowercase ($toLowercase[$username])} +] +``` + + + +Please note, that separators vary between the formats: +* Function arguments are separated by a `;` +* Curl embed arguments are separated by a `:` + + + +**Tags:** + diff --git a/content/docs/(functions)/Text/Embed/footer.mdx b/content/docs/(functions)/Text/Embed/footer.mdx new file mode 100644 index 00000000..f71fc8cc --- /dev/null +++ b/content/docs/(functions)/Text/Embed/footer.mdx @@ -0,0 +1,36 @@ +--- +title: "$footer" +--- + +Adds a footer to a message embed with an optional icon url + +## Usage +```cc +$footer[text;icon url(optional)] +``` +
+ + +!!exec $footer[This is a fantastic embed footer] + + + +This is a fantastic embed footer + + + + + + + +Use: `{footer: Your text here:icon url(optional)}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + +Link escapes are needed, use `\` to escape characters. Read [me](/Other/syntax) to see more + + diff --git a/content/docs/(functions)/Text/Embed/image.mdx b/content/docs/(functions)/Text/Embed/image.mdx new file mode 100644 index 00000000..9cc5f814 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/image.mdx @@ -0,0 +1,35 @@ +--- +title: "$image" +--- + +Adds an image to a message embed + +## Usage +```cc +$image[YOUR URL HERE] +``` +
+ + +!!exec $image[$userAvatar] + + + + + + + + + + +Use: `{image: Your link here}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + +Link escapes are needed, use `\` to escape characters. Read [me](/Other/syntax) to see more + + diff --git a/content/docs/(functions)/Text/Embed/meta.json b/content/docs/(functions)/Text/Embed/meta.json new file mode 100644 index 00000000..5ba91499 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Embed functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Embed/thumbnail.mdx b/content/docs/(functions)/Text/Embed/thumbnail.mdx new file mode 100644 index 00000000..9d57222c --- /dev/null +++ b/content/docs/(functions)/Text/Embed/thumbnail.mdx @@ -0,0 +1,35 @@ +--- +title: "$thumbnail" +--- + +Adds a thumbnail to a message embed. + +## Usage +```cc +$thumbnail[YOUR URL HERE] +``` +
+ + +!!exec $thumbnail[$userAvatar] + + + + + + + + + + +Use: `{thumbnail: Your link here}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + +Link escapes are needed, use `\` to escape characters. Read [me](/Other/syntax) to see more + + diff --git a/content/docs/(functions)/Text/Embed/title.mdx b/content/docs/(functions)/Text/Embed/title.mdx new file mode 100644 index 00000000..df03e2c9 --- /dev/null +++ b/content/docs/(functions)/Text/Embed/title.mdx @@ -0,0 +1,45 @@ +--- +title: "$title" +--- + +Adds a title to a message embed. + +## Usage +```cc +$title[YOUR TITLE TEXT HERE;url(optional)] +``` +
+ + +!!exec $title[This is a title] + + + + + + + +Or with url + + + +!!exec $title[This is a title;https://discord.com] + + + + + + + + + + +Use: `{title: Your title here}` + + + + + +If you add any `:` in this function it will error! Check out [this](/Other/syntax) + + diff --git a/content/docs/(functions)/Text/Math/abbreviate.mdx b/content/docs/(functions)/Text/Math/abbreviate.mdx new file mode 100644 index 00000000..cb516e8f --- /dev/null +++ b/content/docs/(functions)/Text/Math/abbreviate.mdx @@ -0,0 +1,28 @@ +--- +title: "$abbreviate" +--- + +this function abbreviates large numbers +Abbreviation to: +* k - thousands +* m - millions +* b - billions +* t - trillions + +## Usage +```cc +$abbreviate[number] +``` +
+ + +!!exec $abbreviate[6000] + + +6k + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Math/abs.mdx b/content/docs/(functions)/Text/Math/abs.mdx new file mode 100644 index 00000000..eacdc5d8 --- /dev/null +++ b/content/docs/(functions)/Text/Math/abs.mdx @@ -0,0 +1,21 @@ +--- +title: "$abs" +--- + +Return the absolute value of a number. Basically forces a number to be positive + +## Usage + +```cc +$abs[Number] +``` + +## Example + + +!!exec $abs[-25] + + +25 + + diff --git a/content/docs/(functions)/Text/Math/ceil.mdx b/content/docs/(functions)/Text/Math/ceil.mdx new file mode 100644 index 00000000..ea24e89e --- /dev/null +++ b/content/docs/(functions)/Text/Math/ceil.mdx @@ -0,0 +1,31 @@ +--- +title: "$ceil" +--- + +rounds a number up to the next largest integer + +## Usage + +```cc +$ceil[Number] +``` + +### Example: + + +!!exec $ceil[1.3]

+
+ +2

+
+
+ +### Example: + + +!!exec $ceil[3.5]

+
+ +4 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Math/divide.mdx b/content/docs/(functions)/Text/Math/divide.mdx new file mode 100644 index 00000000..46ef6e04 --- /dev/null +++ b/content/docs/(functions)/Text/Math/divide.mdx @@ -0,0 +1,24 @@ +--- +title: "$divide" +--- + +divides (a) number(s) from each other, from left to right + +## Usage +```cc +$divide[10;2;...] +``` +
+ + +!!exec $divide[10;2] + + +5 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Math/floor.mdx b/content/docs/(functions)/Text/Math/floor.mdx new file mode 100644 index 00000000..2f9e6223 --- /dev/null +++ b/content/docs/(functions)/Text/Math/floor.mdx @@ -0,0 +1,31 @@ +--- +title: "$floor" +--- + +return the largest integer less than or equal to a given number + +## Usage + +```cc +$floor[Number] +``` + +### Example: + + +!!exec $floor[2.4]

+
+ +2

+
+
+ +### Example: + + +!!exec $floor[2.9]

+
+ +2 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Math/math.mdx b/content/docs/(functions)/Text/Math/math.mdx new file mode 100644 index 00000000..21eadb83 --- /dev/null +++ b/content/docs/(functions)/Text/Math/math.mdx @@ -0,0 +1,63 @@ +--- +title: "$math" +--- + +Calculates numbers with any mathematically correct +quantifier(s) in between. + +## Usage +```cc +$math[10*(2+5)/7*8-2] +``` +e## Usage +```cc +$math[Expression;Name1=Value1;Name1=Value2] +``` +
+ + +!!exec $math[10*(2+5)/7*8-2] + + +78 + + +!!exec Networth = $math[cash+bank;cash=100;bank=500] + + +Networth = 600 + + + + + + +`$sum`, can be used to sum up arguments. + +`$sub`, can be used to subtract arguments. + +`$multi`, can be used to multiply arguments. + +`$divide`, can be used to divide arguments. + + + +## Valid Quantifiers +Operator | Associativity | Description +:----------------------- | :------------ | :---------- +(...) | None | Grouping (brackets) +! | Left | Factorial +^ | Right | Exponentiation ++, -, sqrt | Right | Unary prefix operators +\*, /, % | Left | Multiplication, division, remainder ++, - | Left | Addition, subtraction + + + +There are more advanced functions located [here.](https://github.com/silentmatt/expr-eval/blob/master/README.md) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Math/mathMax.mdx b/content/docs/(functions)/Text/Math/mathMax.mdx new file mode 100644 index 00000000..8f1eb2b8 --- /dev/null +++ b/content/docs/(functions)/Text/Math/mathMax.mdx @@ -0,0 +1,21 @@ +--- +title: "$mathMax" +--- + +Return the largest number from a list of numbers + +## Usage + +```cc +$mathMax[Number 1;Number 2;Number 3;...] +``` + +### Example: + + +!!exec $mathMax[100;50;150]

+
+ +150 + +
diff --git a/content/docs/(functions)/Text/Math/mathMin.mdx b/content/docs/(functions)/Text/Math/mathMin.mdx new file mode 100644 index 00000000..cd1c550d --- /dev/null +++ b/content/docs/(functions)/Text/Math/mathMin.mdx @@ -0,0 +1,21 @@ +--- +title: "$mathMin" +--- + +Return the smallest number from a list of numbers + +## Usage + +```cc +$mathMin[Number 1;Number 2;Number 3;...] +``` + +### Example: + + +!!exec $mathMin[100;50;150]

+
+ +50 + +
diff --git a/content/docs/(functions)/Text/Math/meta.json b/content/docs/(functions)/Text/Math/meta.json new file mode 100644 index 00000000..3e1b66af --- /dev/null +++ b/content/docs/(functions)/Text/Math/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Math Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Math/modulo.mdx b/content/docs/(functions)/Text/Math/modulo.mdx new file mode 100644 index 00000000..42763b5c --- /dev/null +++ b/content/docs/(functions)/Text/Math/modulo.mdx @@ -0,0 +1,24 @@ +--- +title: "$modulo" +--- + +calculates the remainder of a division operation + +## Usage +```cc +$modulo[10;2;...] +``` +
+ + +!!exec $modulo[10;2] + + +0 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Math/multi.mdx b/content/docs/(functions)/Text/Math/multi.mdx new file mode 100644 index 00000000..c4600abb --- /dev/null +++ b/content/docs/(functions)/Text/Math/multi.mdx @@ -0,0 +1,23 @@ +--- +title: "$multi" +--- + +Multiplies (a) number(s) with each other + +## Usage +```cc +$multi[10;4;...] +``` +
+ + +!!exec $multi[10;4] + + +40 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Math/ordinal.mdx b/content/docs/(functions)/Text/Math/ordinal.mdx new file mode 100644 index 00000000..11e9cbe1 --- /dev/null +++ b/content/docs/(functions)/Text/Math/ordinal.mdx @@ -0,0 +1,24 @@ +--- +title: "$ordinal" +--- + +adds the correct suffix after the number +`st`,`nd`,`rd`,`th` + +## Usage +```cc +$ordinal[number] +``` +
+ + +!!exec $ordinal[2] + + +2nd + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Math/round.mdx b/content/docs/(functions)/Text/Math/round.mdx new file mode 100644 index 00000000..1e02ca81 --- /dev/null +++ b/content/docs/(functions)/Text/Math/round.mdx @@ -0,0 +1,24 @@ +--- +title: "$round" +--- + +Rounds the number to the nearest integer. + +## Usage +```cc +$round[number] +``` +
+ + +!!exec $round[10.897890790] + + +11 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Math/roundTenth.mdx b/content/docs/(functions)/Text/Math/roundTenth.mdx new file mode 100644 index 00000000..df317cce --- /dev/null +++ b/content/docs/(functions)/Text/Math/roundTenth.mdx @@ -0,0 +1,24 @@ +--- +title: "$roundTenth" +--- + +Rounds the number to the nearest decimal specified in `toFixed` + +## Usage +```cc +$roundTenth[number;tofixed] +``` +
+ + +!!exec $roundTenth[10.877890790;2] + + +10.88 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Math/sub.mdx b/content/docs/(functions)/Text/Math/sub.mdx new file mode 100644 index 00000000..c216d68a --- /dev/null +++ b/content/docs/(functions)/Text/Math/sub.mdx @@ -0,0 +1,24 @@ +--- +title: "$sub" +--- + +Subtracts (a) number(s) from each other + +## Usage +```cc +$sub[10;4;...] +``` +
+ + +!!exec $sub[10;4] + + +6 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Math/sum.mdx b/content/docs/(functions)/Text/Math/sum.mdx new file mode 100644 index 00000000..72e277cd --- /dev/null +++ b/content/docs/(functions)/Text/Math/sum.mdx @@ -0,0 +1,23 @@ +--- +title: "$sum" +--- + +Sum's up the given args + +## Usage +```cc +$sum[1;3;...] +``` +
+ + +!!exec $sum[1;3] + + +4 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Math/truncate.mdx b/content/docs/(functions)/Text/Math/truncate.mdx new file mode 100644 index 00000000..29ca3dc2 --- /dev/null +++ b/content/docs/(functions)/Text/Math/truncate.mdx @@ -0,0 +1,23 @@ +--- +title: "$truncate" +--- + +Truncates the number to 0 decimals. + +## Usage +```cc +$truncate[number] +``` +
+ + +!!exec $truncate[10.897890790] + + +10 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Object/addObjectProperty.mdx b/content/docs/(functions)/Text/Object/addObjectProperty.mdx new file mode 100644 index 00000000..1daa3f41 --- /dev/null +++ b/content/docs/(functions)/Text/Object/addObjectProperty.mdx @@ -0,0 +1,17 @@ +--- +title: "$addObjectProperty" +--- + +Adds a key with a value to the existing object. + +## Usage + +```cc +$addObjectProperty[key;value] +``` + + + +This function got deprecated, use `$objectSet` instead + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/createObject.mdx b/content/docs/(functions)/Text/Object/createObject.mdx new file mode 100644 index 00000000..1c7d616b --- /dev/null +++ b/content/docs/(functions)/Text/Object/createObject.mdx @@ -0,0 +1,27 @@ +--- +title: "$createObject" +--- + +Creates an object that can be used later. + +## Usage + +```cc +$createObject[object string] +``` + +### Example: + + +!!exec $createObject[\{"name":"Mido","age":110}]
Your name is $objectGet[name]
Your age is $objectGet[age]

+
+ +Your name is Mido
Your age is 110 +
+
+ + + +This function got deprecated, use `$objectCreate` instead + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/getObject.mdx b/content/docs/(functions)/Text/Object/getObject.mdx new file mode 100644 index 00000000..caeb65f9 --- /dev/null +++ b/content/docs/(functions)/Text/Object/getObject.mdx @@ -0,0 +1,33 @@ +--- +title: "$getObject" +--- + +returns the JSON of the created/modified object + +## Usage +```cc +$getObject[spaces(optional, default 0)] +``` + +
+ + +!!exec $createobject[\{"Owner":"Rake","Manager":"Mika","Dev":"Mido","Contributor":"Wiki"}] Without spaces: $getobject +With spaces: $getobject[1] + + +Without spaces: \{"Owner":"Rake","Manager":"Mika","Dev":"Mido","Contributor":"Wiki"} +With spaces: \{
+"Owner": "Rake",
+"Manager": "Mika",
+"Dev": "Mido",
+"Contributor": "Wiki"
+} +
+
+ + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Object/getObjectKeys.mdx b/content/docs/(functions)/Text/Object/getObjectKeys.mdx new file mode 100644 index 00000000..cc42c02e --- /dev/null +++ b/content/docs/(functions)/Text/Object/getObjectKeys.mdx @@ -0,0 +1,17 @@ +--- +title: "$getObjectKeys" +--- + +Return the object keys with seperator (default is space if not provided) + +## Usage + +```cc +$getObjectKeys or $getObjectKeys[Seperator (optional)] +``` + + + +This function got deprecated, use `$objectKeys` instead + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/getObjectProperty.mdx b/content/docs/(functions)/Text/Object/getObjectProperty.mdx new file mode 100644 index 00000000..fcb8764b --- /dev/null +++ b/content/docs/(functions)/Text/Object/getObjectProperty.mdx @@ -0,0 +1,17 @@ +--- +title: "$getObjectProperty" +--- + +Gets a property value from given key. + +## Usage + +```cc +$getObjectProperty[key] +``` + + + +This function got deprecated, use `$objectGet` instead + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/meta.json b/content/docs/(functions)/Text/Object/meta.json new file mode 100644 index 00000000..dca922cd --- /dev/null +++ b/content/docs/(functions)/Text/Object/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Object Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Object/objectCreate.mdx b/content/docs/(functions)/Text/Object/objectCreate.mdx new file mode 100644 index 00000000..2b8a0849 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectCreate.mdx @@ -0,0 +1,66 @@ +--- +title: "$objectCreate" +--- + +Creates a json object from the input + +Use `$getObjectProperty` or `$objectGet` to get a key value. +## Usage +```cc +$objectCreate[JSON string] +``` +
+ + +!!exec $objectCreate[\{"Name":"Wiki","Level":20,"isExpert":true,"userId":327996784012034050}] Hi, my name is $objectget[Name]. Level $objectget[Level]. Am i expert? $objectget[isExpert]. My user id is $objectget[userId] + + +Hi, my name is Wiki. Level 20. Am i expert? true. My user id is 327996784012034050 + + + + + +The example above shows how to save the object inside a variable and retrieve it later. +- with an object you can save many properties inside a variable. +```cc +$initvar[user;Data;{"Name":"none","Level":0,"isExpert":false,"userId":0}] +$objectCreate[$getuservar[Data]] +$objectSet[Name;Wiki] +$objectSet[Level;20] +$objectSet[isExpert;true] +$objectSet[userId;327996784012034050] + +/*You can change the value by using $objectSet. You can save it inside a var by using $getObject*/ +$setUserVar[Data;$getObject] +/* $getUserVar[Data] will now return: {"Name":"Wiki","Level":20,"isExpert":true,"userId":327996784012034050}*/ + +``` + + + + + +``` +{ + "string":"Needs quotation marks", + "numbers":1234, + "boolean":true/false, + "array":["Value","Value","Value"], + "group":{ +"String":"Value", +"numbers":Value, +"boolean":Value +}, + "arrayGroup":[{ +"String":"value"},{"String":"value"},{"String":"value"}] +} +``` +* use `$objectGet[groupname;key]` to get the value or $objectGet[groupname;key;index] to get the value of an array + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Object/objectGet.mdx b/content/docs/(functions)/Text/Object/objectGet.mdx new file mode 100644 index 00000000..29a792a4 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectGet.mdx @@ -0,0 +1,24 @@ +--- +title: "$objectGet" +--- + +Get a object value/property by key, if the key is not found then return `undefined` (same as `$getObjectProperty`) + +## Usage +```cc +$objectGet[key] +``` +
+ + +!!exec $createObject[\{"BotName":"Custom Commands","BotOwner":"Rake","Contributor":"Wiki"}] Bot name: $objectGet[BotName], Owner: $objectGet[BotOwner], Docs Contributor: $objectGet[Contributor] + + +Bot name: Custom Commands, Owner: Rake, Docs Contributor: Wiki + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Object/objectIncrease.mdx b/content/docs/(functions)/Text/Object/objectIncrease.mdx new file mode 100644 index 00000000..62de3307 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectIncrease.mdx @@ -0,0 +1,35 @@ +--- +title: "$objectIncrease" +--- + +To increase a key value, if the key doesn't exist, it will create one and set to that value + +## Usage + +```cc +$objectIncrease[Key;Amount] +``` + +### Notes on Amount: +* It can be a number like `5`, or negative `-5` to reduce instead of increase\ +* It can be expression like x*2 where `x` is the current value + +### Example 1: + + +!!exec $objectIncrease[Mido;10]
$objectIncrease[Rake;5]
$objectGet

+
+ +\{"Mido":10,"Rake":5}

+
+
+ +### Example 2: + + +!!exec $objectIncrease[Mido;10]
$objectIncrease[Mido;x*2]
$objectGet

+
+ +\{"Mido":20} + +
diff --git a/content/docs/(functions)/Text/Object/objectKeyExists.mdx b/content/docs/(functions)/Text/Object/objectKeyExists.mdx new file mode 100644 index 00000000..31a00118 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectKeyExists.mdx @@ -0,0 +1,41 @@ +--- +title: "$objectKeyExists" +--- + +Checks if given key is present in the object. Returns `true` or `false`. + +## Usage + +```cc +$objectKeyExists[Key;...] +``` +1. **Key(s)** - Key to check it's existence. You can put as many nested keys as needed. + +## Example + +#### Using $objectKeyExists + +How to check if `name` key exists + + + +!!exec $objectSet[name;Mido] +$objectKeyExists[name] + + +true + + +!!exec $objectSet[username;mido] +$objectKeyExists[name] + + +false + + + +**Related Functions:** `$objectKeys` `$objectCreate` `$objectSet` + +**Function Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/Object/objectKeys.mdx b/content/docs/(functions)/Text/Object/objectKeys.mdx new file mode 100644 index 00000000..8f00eaa9 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectKeys.mdx @@ -0,0 +1,31 @@ +--- +title: "$objectKeys" +--- + +Return the Object Keys with the seperator between each key + +## Usage + +```cc +$objectKeys[Seperator (optional, default:, );Nested Property 1;Nested Property 2;...] +``` + +### Example: + + +!!exec $objectSet[user1;name;Mido]
$objectSet[user1;id;1234]
$objectSet[user1;weapon;Sword]
$objectSet[user2;name;Rake]
$objectSet[user2;id;5678]
$objectSet[user2;weapon;Feather]
$objectKeys[/]

+
+ +user1/user2

+
+
+ +### Example (Getting Nested Property Keys): + + +!!exec $objectSet[user1;name;Mido]
$objectSet[user1;id;1234]
$objectSet[user1;weapon;Sword]
$objectSet[user2;name;Rake]
$objectSet[user2;id;5678]
$objectSet[user2;weapon;Feather]
$objectKeys[/;user1]

+
+ +name/id/weapon + +
diff --git a/content/docs/(functions)/Text/Object/objectLoop.mdx b/content/docs/(functions)/Text/Object/objectLoop.mdx new file mode 100644 index 00000000..e569689f --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectLoop.mdx @@ -0,0 +1,38 @@ +--- +title: "$objectLoop" +--- + +To loop over an object + + +Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. +
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. + +If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. + +
+## Usage + +```cc +$objectLoop[key name;value name;index name;Nested Prroperty 1;Nested Property 2;...]{ +CODE... +} +``` +## Loop Limits +Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. +| Tier | Limit | +| :------- | :--- | +| 0 (Free) | 50 | +| 3 (Freemium) | 50 | +| 4 (Pro) | 100 | +| 5 (Ultra) | 150 | + +### Example: + + +!!exec $objectSet[Mido;Sword]
$objectSet[Rake;Staff]
$objectLoop[name;weapon;index]\{
$index. $name has $weapon
}

+
+ +1. Mido has Sword
2. Rake has Staff +
+
diff --git a/content/docs/(functions)/Text/Object/objectMerge.mdx b/content/docs/(functions)/Text/Object/objectMerge.mdx new file mode 100644 index 00000000..f49ac2e5 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectMerge.mdx @@ -0,0 +1,31 @@ +--- +title: "$objectMerge" +--- + +Merge the current object with another object, it overwrites the conflicted keys + +## Usage + +```cc +$objectMerge[object] +``` + +### Example: + + +!!exec $objectSet[name;Mido]
$objectMerge[\{"country":"EG"}]
$objectGet

+
+ +\{"name":"Mido", "country":"EG"}

+
+
+ +### Example (Nested Keys): + + +!!exec $objectSet[user;name;Mido]
$objectSet[user;country;EG]
Before: $objectGet
$objectMerge[user;\{"name":"Rake","country":"DE"}]
After: $objectGet

+
+ +Before: \{"user":\{"name":"Mido","country":"EG"}}
After: \{"user":\{"name":"Rake","country":"DE"}} +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/objectRemove.mdx b/content/docs/(functions)/Text/Object/objectRemove.mdx new file mode 100644 index 00000000..e9d95cd5 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectRemove.mdx @@ -0,0 +1,27 @@ +--- +title: "$objectRemove" +--- + +To remove a key from the object + +## Usage + +```cc +$objectRemove[Key;Key...(Optional)] +``` + +### Example: + + +!!exec $objectSet[Name;Mido]
+$objectSet[Country;EG]
+Before: $getObject
+$objectRemove[Name]
+After: $getObject +
+ +Before: \{"Name":"Mido","Country":"EG"} +
+After: \{"Country":"EG"} +
+
diff --git a/content/docs/(functions)/Text/Object/objectRenameKey.mdx b/content/docs/(functions)/Text/Object/objectRenameKey.mdx new file mode 100644 index 00000000..7c853e12 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectRenameKey.mdx @@ -0,0 +1,31 @@ +--- +title: "$objectRenameKey" +--- + +allows you to rename a key in your object + +## Usage + +```cc +$objectRenameKey[old key;new key name] +``` + +### Example: + + +!!exec $objectSet[name;Mido]
Before: $objectGet
$objectRenameKey[name;nick]
After: $objectGet

+
+ +Before: \{"name":"Mido"}
After: \{"nick":"Mido"}

+
+
+ +### Example (Nested Key): + + +!!exec $objectSet[user;name;Mido]
Before: $objectGet
$objectRenameKey[user;name;nick]
After: $objectGet

+
+ +Before: \{"user":\{"name":"Mido"}}
After: \{"user":\{"nick":"Mido"}} +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Object/objectSet.mdx b/content/docs/(functions)/Text/Object/objectSet.mdx new file mode 100644 index 00000000..17d749fb --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectSet.mdx @@ -0,0 +1,71 @@ +--- +title: "$objectSet" +--- + +set an object property value by key + +## Usage +```cc +$objectSet[key;key;key....;value] +``` +
+ + +!!exec $objectCreate[\{"name":"Wiki"}] $objectSet[name;Rake] $objectSet[tag;0001] $getObject + + +\{"name":"Rake","tag":"0001"} + + + + + +```cc +$objectCreate[{"type":0}] + +$objectset[version;2.5] +/* will return {"type:0,"version":"2.5"} */ + +$objectCreate[{"type":0}] + +$objectSet[userdata;age;20] +$objectSet[userdata;name;Member] +$objectSet[userdata;role;Moderator] +/* will return {"type":0,"userdata":{"age":"20","name":"Member","role":"Moderator"}} */ +``` + + + + + +```cc + $objectCreate[{ "userdata":{ + "age":0, + "name":"undefined", + "role":"undefined" +} +}] +$objectSet[userdata;age;20] +$objectSet[userdata;name;Member] +$objectSet[userdata;role;Moderator] +/* this is the format for normal groups */ + +$objectCreate[{ "userdata":[{ + "age":0, + "name":"undefined", + "role":"undefined" +}] +}] +$objectSet[userdata;0;age;20] +$objectSet[userdata;0;name;Member] +$objectSet[userdata;0;role;Moderator] +/* sets a property inside am array by index */ + +``` + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/Object/objectValues.mdx b/content/docs/(functions)/Text/Object/objectValues.mdx new file mode 100644 index 00000000..f8e43f37 --- /dev/null +++ b/content/docs/(functions)/Text/Object/objectValues.mdx @@ -0,0 +1,31 @@ +--- +title: "$objectValues" +--- + +Return the Object values with seperator between each value + +## Usage + +```cc +$objectValues[Seperator (optional, default:, );Nested Propery 1;Nested Property 2] +``` + +### Example (Get values of nested property): + + +!!exec $objectSet[name;Mido]
$objectSet[age;300]
$objectValues

+
+ +Mido, 300

+
+
+ +### Example: + + +!!exec $objectSet[user;name;Mido]
$objectSet[user;id;1234]
$objectSet[user;weapon;Sword]
$objectValues[/;user]

+
+ +Mido/1234/Sword + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Regex/meta.json b/content/docs/(functions)/Text/Regex/meta.json new file mode 100644 index 00000000..403a7bf0 --- /dev/null +++ b/content/docs/(functions)/Text/Regex/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Regex Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/Regex/regexCheck.mdx b/content/docs/(functions)/Text/Regex/regexCheck.mdx new file mode 100644 index 00000000..42745275 --- /dev/null +++ b/content/docs/(functions)/Text/Regex/regexCheck.mdx @@ -0,0 +1,31 @@ +--- +title: "$regexCheck" +--- + +To check if a text matches a regex or not, returns true or false + +## Usage + +```cc +$regexCheck[Text;Regex;Flags] +``` + +### Example (Check If Text is letters): + + +!!exec $regexCheck[ABC;^[a-zA-Z]+$]

+
+ +true

+
+
+ +### Example: + + +!!exec $regexCheck[A2B;^[a-zA-Z]+$]

+
+ +false + +
diff --git a/content/docs/(functions)/Text/Regex/regexMatch.mdx b/content/docs/(functions)/Text/Regex/regexMatch.mdx new file mode 100644 index 00000000..1bbc9220 --- /dev/null +++ b/content/docs/(functions)/Text/Regex/regexMatch.mdx @@ -0,0 +1,56 @@ +--- +title: "$regexMatch" +--- + +Matches a string with the given Regex Pattern and returns the matched text or multiple matches seperated by the seperator + +## Usage +```cc +$regexMatch[text;regexp;flags(optional);group index(optional, 0 by default) or all;separator (optional)] +``` + +## Note about Separator +It can only be used when group index is `all`.\ +in case flag is `g` it will return all matches glued with that separator\ +in case flag is not `g` it will return the whole matched text and matched groups + +### Example (Find the first number): + + +!!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+]

+
+ +50

+
+
+ +### Example (Find all numbers): + + +!!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+;g;all;/]

+
+ +50/18

+
+
+ +### Example (Find 2nd number only): + + +!!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+;g;1]

+
+ +18 + +
+ + + +These are all regex flags: `g, i, m, u, s, y.` + + +**Function difficulty:** + +**Tags:** + + diff --git a/content/docs/(functions)/Text/Regex/regexReplace.mdx b/content/docs/(functions)/Text/Regex/regexReplace.mdx new file mode 100644 index 00000000..e2d6cd9c --- /dev/null +++ b/content/docs/(functions)/Text/Regex/regexReplace.mdx @@ -0,0 +1,21 @@ +--- +title: "$regexReplace" +--- + +Uses a regular expression to replace matching queries + +## Usage + +```cc +$regexReplace[text;regex;flags;new text] +``` + +### Example 1: + + +!!exec $regexReplace[My age is 900 years old.;\d+;g;[SECRET AGE]]

+
+ +My age is [SECRET AGE] years old. + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/Regex/replaceTextWithRegex.mdx b/content/docs/(functions)/Text/Regex/replaceTextWithRegex.mdx new file mode 100644 index 00000000..f3b6e8a7 --- /dev/null +++ b/content/docs/(functions)/Text/Regex/replaceTextWithRegex.mdx @@ -0,0 +1,23 @@ +--- +title: "$replaceTextWithRegex" +--- + +Uses a regular expression to replace matching queries + +## Usage: +`$replaceTextWithRegex[text;regex;flags;new text]` + +
+ + +!!exec $replaceTextWithRegex[Today is my birthday;/(birthday|party)/;gi;birthday 🎉] + + +Today is my birthday 🎉 + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/buffer.mdx b/content/docs/(functions)/Text/buffer.mdx new file mode 100644 index 00000000..c382d8fc --- /dev/null +++ b/content/docs/(functions)/Text/buffer.mdx @@ -0,0 +1,18 @@ +--- +title: "$buffer" +--- + +It return the input (useful for some rare cases) + +## Usage + +```cc +$buffer[input] +``` + +### Example: +```cc +$sendMessage[{footer:$buffer[Some :Breaking :Message]} +``` + +![](https://i.imgur.com/i1edjnU.png) \ No newline at end of file diff --git a/content/docs/(functions)/Text/channelNSFW.mdx b/content/docs/(functions)/Text/channelNSFW.mdx new file mode 100644 index 00000000..59cc4c39 --- /dev/null +++ b/content/docs/(functions)/Text/channelNSFW.mdx @@ -0,0 +1,23 @@ +--- +title: "$channelNSFW" +--- + +Returns whether the channel is nsfw or not + +## Usage +```cc +$channelNSFW[channelID] +``` +
+ + +!!exec $channelNSFW[$channelID] + + +no + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/charCount.mdx b/content/docs/(functions)/Text/charCount.mdx new file mode 100644 index 00000000..ef42d249 --- /dev/null +++ b/content/docs/(functions)/Text/charCount.mdx @@ -0,0 +1,23 @@ +--- +title: "$charCount[text]" +--- + +this functions returns the number of characters in the provided text + +## Usage: +`$charCount[text]` + +
+ + +!!exec $charCount[hello] + + +5 + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/checkContains.mdx b/content/docs/(functions)/Text/checkContains.mdx new file mode 100644 index 00000000..c6fbc209 --- /dev/null +++ b/content/docs/(functions)/Text/checkContains.mdx @@ -0,0 +1,31 @@ +--- +title: "$checkContains" +--- + +checks if given message contains any of the texts + +## Usage + +```cc +$checkContains[message;text1;text2;...] +``` + +### Example 1: + + +!!exec $checkContains[Mido is good;good]

+
+ +true

+
+
+ +### Example 2: + + +!!exec $checkContains[Mido is good;bad]

+
+ +false + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/customEmoji.mdx b/content/docs/(functions)/Text/customEmoji.mdx new file mode 100644 index 00000000..da4f917f --- /dev/null +++ b/content/docs/(functions)/Text/customEmoji.mdx @@ -0,0 +1,33 @@ +--- +title: "$customEmoji" +--- + +Returns a custom emoji + +## Usage + +```cc +$customEmoji[name or id] +``` + +### Example (Using Custom Emoji Name): + + +!!exec $customEmoji[yes]

+
+ +
+
+
+
+ +### Example (Using Custom Emoji ID): + + +!!exec $customEmoji[833252579873259521]

+
+ +
+
+
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/disableMentions.mdx b/content/docs/(functions)/Text/disableMentions.mdx new file mode 100644 index 00000000..dae4e99d --- /dev/null +++ b/content/docs/(functions)/Text/disableMentions.mdx @@ -0,0 +1,24 @@ +--- +title: "$disableMentions" +--- + +will not ping a user even though mentioned + +## Usage +```cc +$disableMentions +``` +
+ + +!!exec $disableMentions Member + + +@Member + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/filterMessage.mdx b/content/docs/(functions)/Text/filterMessage.mdx new file mode 100644 index 00000000..f137a1d6 --- /dev/null +++ b/content/docs/(functions)/Text/filterMessage.mdx @@ -0,0 +1,21 @@ +--- +title: "$filterMessage" +--- + +Removes letters or numbers from given text + +## Usage + +```cc +$filterMessage[message;letterOrSymbols] +``` + +### Example: + + +!!exec $filterMessage[Hello World;lo]

+
+ +He Wrd + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/filterMessageWords.mdx b/content/docs/(functions)/Text/filterMessageWords.mdx new file mode 100644 index 00000000..3bee0b58 --- /dev/null +++ b/content/docs/(functions)/Text/filterMessageWords.mdx @@ -0,0 +1,12 @@ +--- +title: "$filterMessageWords" +--- + +Removed words from the message. + +## Usage + +```cc +$filterMessageWords[text;caseSensitive (yes/no);...words] +``` + diff --git a/content/docs/(functions)/Text/findChars.mdx b/content/docs/(functions)/Text/findChars.mdx new file mode 100644 index 00000000..f8fc1322 --- /dev/null +++ b/content/docs/(functions)/Text/findChars.mdx @@ -0,0 +1,29 @@ +--- +title: "$findChars" +--- + +Takes all the letters from given string and returns them alone. + +## Usage + +```cc +$findChars[string] +``` + +## Example + + + +!!exec $findChars[$username] + + +Member + + + + + +- `$findSpecialChars` +- `$findNumbers` + + diff --git a/content/docs/(functions)/Text/findNumbers.mdx b/content/docs/(functions)/Text/findNumbers.mdx new file mode 100644 index 00000000..23b7b2db --- /dev/null +++ b/content/docs/(functions)/Text/findNumbers.mdx @@ -0,0 +1,21 @@ +--- +title: "$findNumbers" +--- + +Find numbers from inside a text. + +## Usage + +```cc +$findNumbers[text;separator] +``` + +### Example: + + +!!exec $findNumbers[My age is 99 years old, and located 15 miles away from nearest station.;, ]

+
+ +99, 15 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/findSpecialChars.mdx b/content/docs/(functions)/Text/findSpecialChars.mdx new file mode 100644 index 00000000..7597ce95 --- /dev/null +++ b/content/docs/(functions)/Text/findSpecialChars.mdx @@ -0,0 +1,29 @@ +--- +title: "$findSpecialChars" +--- + +Takes all the non number/letter from given string and returns the alone + +## Usage + +```cc +$findSpecialChars[string] +``` + +## Example + + + +!!exec $findSpecialChars[$username] + + +$/? + + + + + +- `$findChars` +- `$findNumbers` + + diff --git a/content/docs/(functions)/Text/indexOf.mdx b/content/docs/(functions)/Text/indexOf.mdx new file mode 100644 index 00000000..09dc300a --- /dev/null +++ b/content/docs/(functions)/Text/indexOf.mdx @@ -0,0 +1,13 @@ +--- +title: "$indexOf" +--- + +Returns the position of \ in \.\ + Returns 0 if there's no char in text. + +## Usage + +```cc +$indexOf[text;char] +``` + diff --git a/content/docs/(functions)/Text/isChannelMention.mdx b/content/docs/(functions)/Text/isChannelMention.mdx new file mode 100644 index 00000000..1be290a5 --- /dev/null +++ b/content/docs/(functions)/Text/isChannelMention.mdx @@ -0,0 +1,31 @@ +--- +title: "$isChannelMention" +--- + +To check if text provided satisfy discord channel mention format or not + +## Usage + +```cc +$isChannelMention[Text] +``` + +### Example: + + +!!exec $isChannelMention[abc]

+
+ +false

+
+
+ +### Example: + + +!!exec $isChannelMention[<#1234567890>]

+
+ +true + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/isUserMention.mdx b/content/docs/(functions)/Text/isUserMention.mdx new file mode 100644 index 00000000..0ed6745c --- /dev/null +++ b/content/docs/(functions)/Text/isUserMention.mdx @@ -0,0 +1,31 @@ +--- +title: "$isUserMention" +--- + +To check if text provided satisfy discord user mention format or not + +## Usage + +```cc +$isUserMention[Text] +``` + +### Example: + + +!!exec $isUserMention[abc]

+
+ +false

+
+
+ +### Example: + + +!!exec $isUserMention[<@!1234567890>]

+
+ +true + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isBoosting.mdx b/content/docs/(functions)/Text/isandhas/isBoosting.mdx new file mode 100644 index 00000000..22e11fb8 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isBoosting.mdx @@ -0,0 +1,26 @@ +--- +title: "$isBoosting" +--- + +checks if a user is Boosting ,returns true or false + +## Usage +```cc +$isBoosting[userid] +``` +Example: +
+ + +!!exec $isBoosting[$authorID] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isBot.mdx b/content/docs/(functions)/Text/isandhas/isBot.mdx new file mode 100644 index 00000000..5412059a --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isBot.mdx @@ -0,0 +1,26 @@ +--- +title: "$isbot" +--- + +checks if the user is a bot or not ,returns true or false + +## Usage +```cc +$isbot +``` or `$isbot[userid]` +Example: +
+ + +!!exec $isbot | $isbot[891210194925809695] + + +false | true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isConnected.mdx b/content/docs/(functions)/Text/isandhas/isConnected.mdx new file mode 100644 index 00000000..05c70e7d --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isConnected.mdx @@ -0,0 +1,21 @@ +--- +title: "$isConnected" +--- + +To check whether user is connected to voice channel or not (only cached users) + +## Usage + +```cc +$isConnected[User ID] +``` + +### Example: + + +!!exec Is $username Connected To Channel?: $isConnected

+
+ +Is Mido Connected To Channel?: true + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isDeafened.mdx b/content/docs/(functions)/Text/isandhas/isDeafened.mdx new file mode 100644 index 00000000..c686d252 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isDeafened.mdx @@ -0,0 +1,26 @@ +--- +title: "$isDeafened" +--- + +checks if a user is Deafened ,returns true,false or undefined + +## Usage +```cc +$isDeafened[userid] +``` +Example: +
+ + +!!exec $isDeafened[$authorID] + + +undefined + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isEmoji.mdx b/content/docs/(functions)/Text/isandhas/isEmoji.mdx new file mode 100644 index 00000000..747cc68f --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isEmoji.mdx @@ -0,0 +1,26 @@ +--- +title: "$isEmoji" +--- + +Checks if the given Emoji is a default emoji ,returns true or false + +## Usage +```cc +$isEmoji[emoji] +``` +Example: +
+ + +!!exec $isEmoji[:smile:] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isHoisted.mdx b/content/docs/(functions)/Text/isandhas/isHoisted.mdx new file mode 100644 index 00000000..3a9a1f94 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isHoisted.mdx @@ -0,0 +1,26 @@ +--- +title: "$isHoisted" +--- + +Checks if the given id of role is hoisted above all the other roles ,returns true or false + +## Usage +```cc +$isHoisted[roleid] +``` +Example: +
+ + +!!exec $isHoisted[$roleID[test]] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isManaged.mdx b/content/docs/(functions)/Text/isandhas/isManaged.mdx new file mode 100644 index 00000000..b6d37540 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isManaged.mdx @@ -0,0 +1,26 @@ +--- +title: "$isManaged" +--- + +Checks if the given id of role is Managed ,returns true or false + +## Usage +```cc +$isManaged[roleid] +``` +Example: +
+ + +!!exec $isManaged[$roleID[Custom Command]] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isMentionable.mdx b/content/docs/(functions)/Text/isandhas/isMentionable.mdx new file mode 100644 index 00000000..498422c4 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isMentionable.mdx @@ -0,0 +1,26 @@ +--- +title: "$isMentionable" +--- + +Checks if the given id of role is Mentionable ,returns true or false + +## Usage +```cc +$isMentionable[roleid] +``` +Example: +
+ + +!!exec $isMentionable[$roleID[test]] + + +false + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isMentioned.mdx b/content/docs/(functions)/Text/isandhas/isMentioned.mdx new file mode 100644 index 00000000..ba49649b --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isMentioned.mdx @@ -0,0 +1,26 @@ +--- +title: "$isMentioned" +--- + +Checks if the given id of userID/roleID/channelID/everyone is Mentioned ,returns true or false + +## Usage +```cc +$isMentioned[userID/roleID/channelID/everyone] +``` +Example: +
+ + +!!exec $mention $isMentioned[$authorID] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isMuted.mdx b/content/docs/(functions)/Text/isandhas/isMuted.mdx new file mode 100644 index 00000000..807c0909 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isMuted.mdx @@ -0,0 +1,26 @@ +--- +title: "$isMuted" +--- + +checks if a user is selfMuted ,returns true,false or undefined + +## Usage +```cc +$isMuted[userid] +``` +Example: +
+ + +!!exec $isMuted[$authorID] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isNumber.mdx b/content/docs/(functions)/Text/isandhas/isNumber.mdx new file mode 100644 index 00000000..203c894f --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isNumber.mdx @@ -0,0 +1,23 @@ +--- +title: "$isNumber" +--- + +Checks if a string is a valid number. + +## Usage +```cc +$isNumber[number] +``` +
+ + +!!exec $isNumber[10] | $isNumber[number] + + +true | false + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/isandhas/isStreaming.mdx b/content/docs/(functions)/Text/isandhas/isStreaming.mdx new file mode 100644 index 00000000..e292c7d6 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isStreaming.mdx @@ -0,0 +1,21 @@ +--- +title: "$isStreaming" +--- + +To check whether user is streaming in a voice channel or not (only cached users) + +## Usage + +```cc +$isStreaming[User ID] +``` + +### Example: + + +!!exec Is $username Streaming?: $isStreaming

+
+ +Is Mido Streaming?: false + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isTicket.mdx b/content/docs/(functions)/Text/isandhas/isTicket.mdx new file mode 100644 index 00000000..5bc52c4b --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isTicket.mdx @@ -0,0 +1,26 @@ +--- +title: "$isTicket" +--- + +checks if a channel is a ticket or not created with $newTicket function,returns true or false + +## Usage +```cc +$isTicket +``` or `$isTicket[channelid]` +Example: +
+ + +!!exec $isTicket | $isTicket[891210194925809695] + + +false | true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isValidHex.mdx b/content/docs/(functions)/Text/isandhas/isValidHex.mdx new file mode 100644 index 00000000..100c730f --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isValidHex.mdx @@ -0,0 +1,26 @@ +--- +title: "$isValidHex" +--- + +checks if the given int or hex code or [color name](/CodeReferences/ref.embed.colors) is valid ,returns true,false + +## Usage +```cc +$isValidHex[int or hexcode or color name] +``` +Example: +
+ + +!!exec $isValidHex[#ffffff] , $isValidHex[test], $isValidHex[Red] + + +true , false, true + + + +**Function difficulty:** + +###### Tags: + + diff --git a/content/docs/(functions)/Text/isandhas/isValidInvite.mdx b/content/docs/(functions)/Text/isandhas/isValidInvite.mdx new file mode 100644 index 00000000..cbf37fc1 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isValidInvite.mdx @@ -0,0 +1,26 @@ +--- +title: "$isValidInvite" +--- + +checks if the given Invite code is valid ,returns true,false + +## Usage +```cc +$isValidInvite[invite code] +``` +Example: +
+ + +!!exec $isValidInvite[hjhjkh] + + +false + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isValidLink.mdx b/content/docs/(functions)/Text/isandhas/isValidLink.mdx new file mode 100644 index 00000000..82ac89fa --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isValidLink.mdx @@ -0,0 +1,26 @@ +--- +title: "$isValidLink" +--- + +checks if the given Link / url is valid ,returns true,false + +## Usage +```cc +$isValidLink[Link] +``` +Example: +
+ + +!!exec $isValidLink[https://example.com] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/isValidObject.mdx b/content/docs/(functions)/Text/isandhas/isValidObject.mdx new file mode 100644 index 00000000..110a6a62 --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/isValidObject.mdx @@ -0,0 +1,26 @@ +--- +title: "$isValidObject" +--- + +checks if the given Object is valid ,returns true,false + +## Usage +```cc +$isValidObject[Object] +``` +Example: +
+ + +!!exec $isValidObject[\{"key":"value"}] + + +true + + + +**Function difficulty:** + +###### Tags: + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/isandhas/meta.json b/content/docs/(functions)/Text/isandhas/meta.json new file mode 100644 index 00000000..a2ad692e --- /dev/null +++ b/content/docs/(functions)/Text/isandhas/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Is and Has Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/mentionType.mdx b/content/docs/(functions)/Text/mentionType.mdx new file mode 100644 index 00000000..871139a5 --- /dev/null +++ b/content/docs/(functions)/Text/mentionType.mdx @@ -0,0 +1,12 @@ +--- +title: "$mentionType" +--- + +Uses an argument to determine the type of the mention (role, user, channel or none). + +## Usage + +```cc +$mentionType[mention argument] +``` + diff --git a/content/docs/(functions)/Text/mentioned.mdx b/content/docs/(functions)/Text/mentioned.mdx new file mode 100644 index 00000000..0c81b5e6 --- /dev/null +++ b/content/docs/(functions)/Text/mentioned.mdx @@ -0,0 +1,21 @@ +--- +title: "$mentioned" +--- + +Returns the ID of the mentioned user + +## Usage + +```cc +$mentioned[mention number or all;return author ID (yes/no)(optional)] +``` + +### Example: + + +!!exec First mention is $mentioned[1]
All mentions are: $mentioned[all]

+
+ +First mention is 788361834360864808
All mentions are: 788361834360864808, 840526017260945468 +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/mentionedChannels.mdx b/content/docs/(functions)/Text/mentionedChannels.mdx new file mode 100644 index 00000000..3076a4e3 --- /dev/null +++ b/content/docs/(functions)/Text/mentionedChannels.mdx @@ -0,0 +1,23 @@ +--- +title: "$mentionedChannels" +--- + +Returns the ID of one of the channels that was mentioned by the user + +## Usage +```cc +$mentionedChannels[number] +``` +
+ + +!!exec $mentionedChannels[1] user-support + + +869243919697846379 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/mentionedRoles.mdx b/content/docs/(functions)/Text/mentionedRoles.mdx new file mode 100644 index 00000000..d57e1c09 --- /dev/null +++ b/content/docs/(functions)/Text/mentionedRoles.mdx @@ -0,0 +1,23 @@ +--- +title: "$mentionedRoles" +--- + +Returns the ID of one of the roles that was mentioned by the user + +## Usage +```cc +$mentionedRoles[number] +``` +
+ + +!!exec $mentionedRoles[1] Support + + +869243918787686432 + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/meta.json b/content/docs/(functions)/Text/meta.json new file mode 100644 index 00000000..bb5d9b8d --- /dev/null +++ b/content/docs/(functions)/Text/meta.json @@ -0,0 +1,16 @@ +{ + "title": "Text Functions", + "pages": [ + "...", + "!Condition", + "!Embed", + "!Components", + "!Math", + "!textSplit", + "!Array", + "!Object", + "!isandhas", + "!only", + "!Regex" + ] +} diff --git a/content/docs/(functions)/Text/noMentionMessage.mdx b/content/docs/(functions)/Text/noMentionMessage.mdx new file mode 100644 index 00000000..33cddae4 --- /dev/null +++ b/content/docs/(functions)/Text/noMentionMessage.mdx @@ -0,0 +1,24 @@ +--- +title: "$noMentionMessage" +--- + +User's message without any mentions. (members, roles & channels) + +## Usage +```cc +$noMentionMessage +``` + +
+ + +!!exec aaa Member $noMentionMessage + + +aaa + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/numToWord.mdx b/content/docs/(functions)/Text/numToWord.mdx new file mode 100644 index 00000000..8e46c235 --- /dev/null +++ b/content/docs/(functions)/Text/numToWord.mdx @@ -0,0 +1,22 @@ +--- +title: "$numToWord" +--- + +convert a number to their verbal equivalents i.\ +e 5 \> five, maximum number would be "nine hundred ninety-nine nonillion" + +## Usage + +```cc +$numToWord[Number] +``` + +### Example: + + +!!exec $numToWord[1001]

+
+ +one thousand one + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/numberSeparator.mdx b/content/docs/(functions)/Text/numberSeparator.mdx new file mode 100644 index 00000000..b76dff52 --- /dev/null +++ b/content/docs/(functions)/Text/numberSeparator.mdx @@ -0,0 +1,21 @@ +--- +title: "$numberSeparator" +--- + +Separates a number in thousands + +## Usage + +```cc +$numberSeparator[number;separator (optional)] +``` + +### Example: + + +!!exec Your number is $numberSeparator[3352311]

+
+ +Your number is 3,352,311 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/only/meta.json b/content/docs/(functions)/Text/only/meta.json new file mode 100644 index 00000000..adca936c --- /dev/null +++ b/content/docs/(functions)/Text/only/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Only Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/only/onlyBotPerms.mdx b/content/docs/(functions)/Text/only/onlyBotPerms.mdx new file mode 100644 index 00000000..13e787e3 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyBotPerms.mdx @@ -0,0 +1,34 @@ +--- +title: "$onlyBotPerms" +--- + +Only if custom command bot has the permssions,user will be able to execute this command + +## Usage +```cc +$onlyBotPerms[perm;perm;...;error message] +``` + +#### Example: `$onlyBotPerms[managemessage;:x: - Bot does not have manage message permission]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +Check this [list](/CodeReferences/ref.permissions_list) to view all permissions names + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/only/onlyForCategories.mdx b/content/docs/(functions)/Text/only/onlyForCategories.mdx new file mode 100644 index 00000000..a62c2597 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyForCategories.mdx @@ -0,0 +1,29 @@ +--- +title: "$onlyForCategories" +--- + +The command will only be executable in the provided categories. + +## Usage +```cc +$onlyForCategories[categoryID;categoryID;...;error message] +``` + +#### Example: `$onlyForCategories[797978978978988;:x: - this command is restricted to the Main category]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/only/onlyForChannels.mdx b/content/docs/(functions)/Text/only/onlyForChannels.mdx new file mode 100644 index 00000000..8b4f949c --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyForChannels.mdx @@ -0,0 +1,12 @@ +--- +title: "$onlyForChannels" +--- + +The command will only be executable in the provided channel IDs. + +## Usage + +```cc +$onlyForChannels[channelID;channelID2;...;error message] +``` + diff --git a/content/docs/(functions)/Text/only/onlyForIDs.mdx b/content/docs/(functions)/Text/only/onlyForIDs.mdx new file mode 100644 index 00000000..1f0a4e50 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyForIDs.mdx @@ -0,0 +1,28 @@ +--- +title: "$onlyForIDs" +--- + +Only given user IDs will be able to execute this command + +## Usage +```cc +$onlyForIDs[userID;userID;...;error message] +``` + +#### Example: `$onlyForIDs[$guild[owner];:x: - this command is restricted to the guild owner]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/only/onlyForRoles.mdx b/content/docs/(functions)/Text/only/onlyForRoles.mdx new file mode 100644 index 00000000..084a2ddb --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyForRoles.mdx @@ -0,0 +1,28 @@ +--- +title: "$onlyForRoles" +--- + +Only person with the given Roles will be able to execute this command + +## Usage +```cc +$onlyForRoles[roleID;roleID;...;error message] +``` + +#### Example: `$onlyForRoles[797978978978988;:x: - this command is restricted to person with test role]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/only/onlyForUpvoters.mdx b/content/docs/(functions)/Text/only/onlyForUpvoters.mdx new file mode 100644 index 00000000..04d00f48 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyForUpvoters.mdx @@ -0,0 +1,35 @@ +--- +title: "$onlyForUpvoters" +--- + +Only allows the command to continue executing if the user has upvoted the current server within the last 12 hours. + +If the user has not upvoted the server within the last 12 hours, the function sends an error message and stops the execution of the command. + +## Usage + +```cc +$onlyForUpvoters[error message (optional)] +```` + +This function accepts one optional argument: + +* **error message** - The message to send when the user has not upvoted. If omitted, a default error message is used. + +## Example + +#### Restricting a command to upvoters + +```cc +$onlyForUpvoters[You must upvote this server to use this command.] +``` + +If the user has not upvoted the server within the last 12 hours, the command will stop executing and the provided message will be sent. + +The command will continue normally if the user has upvoted the server within the last 12 hours. + +**Related Functions:** `$hasUpvoted` + +**Difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/only/onlyIf.mdx b/content/docs/(functions)/Text/only/onlyIf.mdx new file mode 100644 index 00000000..3be4a1d1 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyIf.mdx @@ -0,0 +1,29 @@ +--- +title: "$onlyIf" +--- + +Continue the execution only if certain [expression](/CodeReferences/ref.expression) is satisfied, otherwise stop the execution and send the error message. +In theory $onlyif can replace all other $onlyFor with the proper [expression](/CodeReferences/ref.expression) +## Usage +```cc +$onlyif[Expression;error message] +``` + +#### Example: `$onlyIf[$username==Mido;You are not mido]` + + + +Read about [Expression](/CodeReferences/ref.expression) + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/only/onlyIfMessageContains.mdx b/content/docs/(functions)/Text/only/onlyIfMessageContains.mdx new file mode 100644 index 00000000..1ce16bb8 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyIfMessageContains.mdx @@ -0,0 +1,21 @@ +--- +title: "$onlyIfMessageContains" +--- + +Continues the execution only if 'text' contains all provided words, returns the `error message` parameter if it does not. + +## Usage + +```cc +$onlyIfMessageContains[text;word1;word2;...;error message] +``` + +## Example + + +!!exec $onlyIfMessageContains[$username[$authorID];mem;My username doesn't contain `mem`] My username contains `mem`!

+
+ +My username contains `mem`

+
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/only/onlyNSFW.mdx b/content/docs/(functions)/Text/only/onlyNSFW.mdx new file mode 100644 index 00000000..ec43962f --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyNSFW.mdx @@ -0,0 +1,28 @@ +--- +title: "$onlyNSFW" +--- + +Only in given nsfw channel user will be able to execute this command + +## Usage +```cc +$onlyNSFW[channelID;channelID;...;error message] +``` + +#### Example: `$onlyNSFW[797978978978988;:x: - this command is restricted to nsfw channel]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/only/onlyPerms.mdx b/content/docs/(functions)/Text/only/onlyPerms.mdx new file mode 100644 index 00000000..4f251e98 --- /dev/null +++ b/content/docs/(functions)/Text/only/onlyPerms.mdx @@ -0,0 +1,34 @@ +--- +title: "$onlyPerms" +--- + +Only if user has the given permssions,they will be able to execute this command + +## Usage +```cc +$onlyPerms[perm;perm;...;error message] +``` + +#### Example: `$onlyPerms[managemessage;:x: - You don't have manage message permission]` + + + +Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! + + + + + +Check this [list](/CodeReferences/ref.permissions_list) to view all permissions names + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/padLeft.mdx b/content/docs/(functions)/Text/padLeft.mdx new file mode 100644 index 00000000..9e02c02f --- /dev/null +++ b/content/docs/(functions)/Text/padLeft.mdx @@ -0,0 +1,21 @@ +--- +title: "$padLeft" +--- + +Adds a filling text at the start of text, depend on the maximum length + +## Usage + +```cc +$padLeft[Text;Max Length;Filling Text] +``` + +### Example: + + +!!exec $padLeft[5;2;0]
$padLeft[13;2;0]

+
+ +05
13 +
+
\ No newline at end of file diff --git a/content/docs/(functions)/Text/padRight.mdx b/content/docs/(functions)/Text/padRight.mdx new file mode 100644 index 00000000..0e99ac1b --- /dev/null +++ b/content/docs/(functions)/Text/padRight.mdx @@ -0,0 +1,21 @@ +--- +title: "$padRight" +--- + +Adds a filling text at the end of text, depend on the maximum length + +## Usage + +```cc +$padRight[Text;Max Length;Filling Text] +``` + +### Example: + + +!!exec $padRight[I like custom commands;25;.]

+
+ +I like custom commands... + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/repeatMessage.mdx b/content/docs/(functions)/Text/repeatMessage.mdx new file mode 100644 index 00000000..164e36b6 --- /dev/null +++ b/content/docs/(functions)/Text/repeatMessage.mdx @@ -0,0 +1,23 @@ +--- +title: "$repeatMessage" +--- + +this functions repeats the provided message x times + +## Usage: +`$repeatMessage[times;text]` + +
+ + +!!exec $repeatMessage[3;a] + + +aaa + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/replaceText.mdx b/content/docs/(functions)/Text/replaceText.mdx new file mode 100644 index 00000000..b340fba8 --- /dev/null +++ b/content/docs/(functions)/Text/replaceText.mdx @@ -0,0 +1,23 @@ +--- +title: "$replaceText" +--- + +Replaces `A` with `X` in `TEXT` + +## Usage: +`$replaceText[some text;sample;new]` + +
+ + +!!exec $replaceText[testing;ing;] + + +test + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/stringEndsWith.mdx b/content/docs/(functions)/Text/stringEndsWith.mdx new file mode 100644 index 00000000..7aa83682 --- /dev/null +++ b/content/docs/(functions)/Text/stringEndsWith.mdx @@ -0,0 +1,31 @@ +--- +title: "$stringEndsWith" +--- + +Checks if given message ends with given text + +## Usage + +```cc +$stringEndsWith[message;text] +``` + +### Example: + + +!!exec $stringEndsWith[Hello World;World]

+
+ +true

+
+
+ +### Example: + + +!!exec $stringEndsWith[Hello World;Discord]

+
+ +false + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/stringStartsWith.mdx b/content/docs/(functions)/Text/stringStartsWith.mdx new file mode 100644 index 00000000..b1aa7c00 --- /dev/null +++ b/content/docs/(functions)/Text/stringStartsWith.mdx @@ -0,0 +1,31 @@ +--- +title: "$stringStartsWith" +--- + +Determines whether given message starts by another message or not + +## Usage + +```cc +$stringStartsWith[message;text] +``` + +### Example: + + +!!exec $stringStartsWith[Hello World;Hello]

+
+ +true

+
+
+ +### Example: + + +!!exec $stringStartsWith[Hello World;Hate]

+
+ +false + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/textLength.mdx b/content/docs/(functions)/Text/textLength.mdx new file mode 100644 index 00000000..55937204 --- /dev/null +++ b/content/docs/(functions)/Text/textLength.mdx @@ -0,0 +1,31 @@ +--- +title: "$textLength" +--- + +Counts character of a text, or the user's message. + +## Usage + +```cc +$textLength or $textLength[text] +``` + +### Example: + + +!!exec $textLength[Mido]

+
+ +4

+
+
+ +### Example: + + +!!exec $textLength[Hello]

+
+ +6 + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/textShuffle.mdx b/content/docs/(functions)/Text/textShuffle.mdx new file mode 100644 index 00000000..0a4a2ac8 --- /dev/null +++ b/content/docs/(functions)/Text/textShuffle.mdx @@ -0,0 +1,22 @@ +--- +title: "$textShuffle" +--- + +Shuffle a text\ +**Return**: the shuffled text + +## Usage + +```cc +$textShuffle[Text;Separator (optional)] +``` + +### Example: + + +!!exec $textShuffle[Hello WOrld]

+
+ +rHl ldeOolW + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/textSlice.mdx b/content/docs/(functions)/Text/textSlice.mdx new file mode 100644 index 00000000..caaa1485 --- /dev/null +++ b/content/docs/(functions)/Text/textSlice.mdx @@ -0,0 +1,21 @@ +--- +title: "$textSlice" +--- + +Returns \ after given position or text in between X and Y + +## Usage + +```cc +$textSlice[text;x;y (optional)] +``` + +### Example: + + +!!exec $textSlice[Hello world;0;5]

+
+ +Hello + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/textSplit/advancedTextSplit.mdx b/content/docs/(functions)/Text/textSplit/advancedTextSplit.mdx new file mode 100644 index 00000000..56a54103 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/advancedTextSplit.mdx @@ -0,0 +1,31 @@ +--- +title: "$advancedTextSplit" +--- + +The first field is the message we want to split and get indexes for. The second +field would be the split/seperator used in the text, and the next field would get the value of the index provided, setting this index value as the new text. The next +fields work as splitters/seperators and new indexes for this new text. + + +## Usage +```cc +$advancedTextSplit[text;split;index;split;index;...] +``` +
+ + +!!exec $advancedTextSplit[Wow, what a nice day, i'll go outside;,;2] /* Will get the second index */ + + +what a nice day + + + + + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/textSplit/concatTextSplit.mdx b/content/docs/(functions)/Text/textSplit/concatTextSplit.mdx new file mode 100644 index 00000000..2e92740d --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/concatTextSplit.mdx @@ -0,0 +1,29 @@ +--- +title: "$concatTextSplit" +--- + +adds an array to the end of an array from `$textsplit` + +## Usage +```cc +$concatTextSplit[text;separator(optional, default = ,)] +``` +
+ + +!!exec $textsplit[Rake Mido; ]
$concatTextSplit[Wiki,Mika;,]
$arrayJoin[ ] +
+ +Rake Mido Wiki Mika + +
+ + + +This function got deprecated, use `$arrayConcat` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/editTextSplitElement.mdx b/content/docs/(functions)/Text/textSplit/editTextSplitElement.mdx new file mode 100644 index 00000000..2e20ef4f --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/editTextSplitElement.mdx @@ -0,0 +1,28 @@ +--- +title: "$editTextSplitElement" +--- + +adds an element to an array from `$textsplit` or replaces the value by index of the split text from `$textsplit` + +## Usage +```cc +$editTextSplitElement[index;new value] +``` +
+ + +!!exec $textsplit[Wiki Rake; ]
$editTextSplitElement[1;Mido]
$arrayJoin[ ] +
+ +Mido Rake + +
+ + + +This function got deprecated, use `$arraySet` instead + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/findTextSplitIndex.mdx b/content/docs/(functions)/Text/textSplit/findTextSplitIndex.mdx new file mode 100644 index 00000000..793eb90b --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/findTextSplitIndex.mdx @@ -0,0 +1,29 @@ +--- +title: "$findTextSplitIndex" +--- + +returns the index of the first occurrence of a value in an array from `$textsplit` + +## Usage +```cc +$findTextSplitIndex[value] +``` +
+ + +!!exec $textsplit[Rake Wiki Mika Mido; ]
$findTextSplitIndex[Wiki] +
+ +2 + +
+ + + +This function got deprecated, use `$arraySearch` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/getTextSplitLength.mdx b/content/docs/(functions)/Text/textSplit/getTextSplitLength.mdx new file mode 100644 index 00000000..0b0dda5c --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/getTextSplitLength.mdx @@ -0,0 +1,30 @@ +--- +title: "$getTextSplitLength" +--- + +Returns the amount of objects created by `$textSplit` + + +
+ + + +!!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] +
+$getTextSplitLength +
+
+ +10 + +
+ + + +This function got deprecated, use `$arrayLength` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/joinSplitText.mdx b/content/docs/(functions)/Text/textSplit/joinSplitText.mdx new file mode 100644 index 00000000..856cf7cb --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/joinSplitText.mdx @@ -0,0 +1,29 @@ +--- +title: "$joinSplitText" +--- + +Joins the `$textSplit` indexes by a given separator + +
+ + + +!!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] +
+$joinSplitText[-] +
+
+ +1-2-3-4-5-6-7-8-9-10 + +
+ + + +This function got deprecated, use `$arrayJoin` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/meta.json b/content/docs/(functions)/Text/textSplit/meta.json new file mode 100644 index 00000000..8a6f55f5 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Text Split Functions", + "pages": [ + "..." + ] +} diff --git a/content/docs/(functions)/Text/textSplit/removeSplitTextElement.mdx b/content/docs/(functions)/Text/textSplit/removeSplitTextElement.mdx new file mode 100644 index 00000000..ee467c18 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/removeSplitTextElement.mdx @@ -0,0 +1,17 @@ +--- +title: "$removeSplitTextElement" +--- + +Removes an element or elements from $textSplit by using their indexes. + +## Usage + +```cc +$removeSplitTextElement[index;index2;...] +``` + + + +This function got deprecated, use `$arrayRemove` instead + + \ No newline at end of file diff --git a/content/docs/(functions)/Text/textSplit/removeTextSplitElement.mdx b/content/docs/(functions)/Text/textSplit/removeTextSplitElement.mdx new file mode 100644 index 00000000..2bf85794 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/removeTextSplitElement.mdx @@ -0,0 +1,21 @@ +--- +title: "$removeTextSplitElement" +--- + +removes an element from an array from `$textsplit` + +## Usage +```cc +$removeTextSplitElement[Index] +``` +
+ + + +This function got deprecated, use `$arrayRemove` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/spliceTextJoin.mdx b/content/docs/(functions)/Text/textSplit/spliceTextJoin.mdx new file mode 100644 index 00000000..a772b496 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/spliceTextJoin.mdx @@ -0,0 +1,24 @@ +--- +title: "$spliceTextJoin" +--- + +Splits a text with `separator1`, then joins with it `separator2` every `x` times, and then joins with `separator3` every `x-1` times. + +## Usage +```cc +$spliceTextJoin[text;separator1;separator2;separator3;every] +``` +
+ + +!!exec $spliceTextJoin[1 2 3 4 5 6 7; ;+;-;2] + + +1+2-3+4-5+6 + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/textSplit/splitText.mdx b/content/docs/(functions)/Text/textSplit/splitText.mdx new file mode 100644 index 00000000..bb6822ac --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/splitText.mdx @@ -0,0 +1,33 @@ +--- +title: "$splitText" +--- + +returns the element by index from `$textSplit` + +## Usage +```cc +$splitText[index] +``` +
+ + + +!!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] +
+$splitText[2] +
+
+ +2 + +
+ + + +This function got deprecated, use `$arrayGet` instead + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/textSplit/textSplit.mdx b/content/docs/(functions)/Text/textSplit/textSplit.mdx new file mode 100644 index 00000000..bb46bd72 --- /dev/null +++ b/content/docs/(functions)/Text/textSplit/textSplit.mdx @@ -0,0 +1,24 @@ +--- +title: "$textSplit" +--- + +Splits the provided text with `seperator` and creates an array. To access them use: `$arrayGet` or other array functions + + +## Usage +```cc +$textSplit[text;separator(optional, default = ,)] +``` +
+ + + +!!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] + + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/textTrim.mdx b/content/docs/(functions)/Text/textTrim.mdx new file mode 100644 index 00000000..6c7e33e8 --- /dev/null +++ b/content/docs/(functions)/Text/textTrim.mdx @@ -0,0 +1,21 @@ +--- +title: "$textTrim" +--- + +Removes useless spaces from given text. + +## Usage + +```cc +$textTrim[text] +``` + +### Example: + + +!!exec $textTrim[ My name is Mido ]

+
+ +My name is Mido + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/toLocaleUpperCase.mdx b/content/docs/(functions)/Text/toLocaleUpperCase.mdx new file mode 100644 index 00000000..fa34294d --- /dev/null +++ b/content/docs/(functions)/Text/toLocaleUpperCase.mdx @@ -0,0 +1,24 @@ +--- +title: "$toLocaleUppercase[text]" +--- + +this sentence uppercases every first char of a word in a sentence + +## Usage: +`$toLocaleUppercase[text]` + +
+ + +!!exec $toLocaleUppercase[hello how are you?] + + +Hello How Are You? + + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Text/toLowercase.mdx b/content/docs/(functions)/Text/toLowercase.mdx new file mode 100644 index 00000000..42fc3d9c --- /dev/null +++ b/content/docs/(functions)/Text/toLowercase.mdx @@ -0,0 +1,23 @@ +--- +title: "$toLowercase[text]" +--- + +this functions lowercases every character + +## Usage: +`$toLowercase[text]` + +
+ + +!!exec $toLowercase[HeLlO] + + +hello + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/toUppercase.mdx b/content/docs/(functions)/Text/toUppercase.mdx new file mode 100644 index 00000000..b8ff94a6 --- /dev/null +++ b/content/docs/(functions)/Text/toUppercase.mdx @@ -0,0 +1,23 @@ +--- +title: "$toUppercase[text]" +--- + +this functions uppercases every character + +## Usage: +`$toUppercase[text]` + +
+ + +!!exec $touppercase[hElLo] + + +HELLO + + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Text/uri.mdx b/content/docs/(functions)/Text/uri.mdx new file mode 100644 index 00000000..11b0fa41 --- /dev/null +++ b/content/docs/(functions)/Text/uri.mdx @@ -0,0 +1,31 @@ +--- +title: "$uri" +--- + +Decodes or Encodes a url Example when you encode a url 'hello world' = 'hello%20world' + +## Usage + +```cc +$uri[decode/encode;text] +``` + +### Example (Encoding): + + +!!exec $uri[encode;Hello World]

+
+ +Hello%20World

+
+
+ +### Example (Decoding): + + +!!exec $uri[decode;Hello%20World]

+
+ +Hello World + +
\ No newline at end of file diff --git a/content/docs/(functions)/Text/void.mdx b/content/docs/(functions)/Text/void.mdx new file mode 100644 index 00000000..ba8f6f60 --- /dev/null +++ b/content/docs/(functions)/Text/void.mdx @@ -0,0 +1,21 @@ +--- +title: "$void" +--- + +A function that eats input but return nothing! + +## Usage + +```cc +$void[ANYTHING] +``` + +### Example: + + +!!exec $let[name;Mido]
My name is $void[$get[name]]

+
+ +My name is + +
\ No newline at end of file diff --git a/content/docs/(functions)/Threads/addUsersToThread.mdx b/content/docs/(functions)/Threads/addUsersToThread.mdx new file mode 100644 index 00000000..21e416ce --- /dev/null +++ b/content/docs/(functions)/Threads/addUsersToThread.mdx @@ -0,0 +1,28 @@ +--- +title: "$addUsersToThread" +--- + +Adds one or more users to a thread. + +## Usage + +```cc +$addUsersToThread[Thread ID;User 1 ID;User 2 ID;User 3 ID....] +``` + +**Thread ID** - ID of the thread where you want to add the user. +**User ID** - User IDs to add. + +### Example + +Add one user + +```cc +$addUsersToThread[1024373454578917426;$authorID] +``` + +Add multiple users + +```cc +$addUsersToThread[1024373454578917426;$authorID;788361834360864808] +``` diff --git a/content/docs/(functions)/Threads/archiveThread.mdx b/content/docs/(functions)/Threads/archiveThread.mdx new file mode 100644 index 00000000..f2045cd9 --- /dev/null +++ b/content/docs/(functions)/Threads/archiveThread.mdx @@ -0,0 +1,23 @@ +--- +title: "$archiveThread" +--- + +archive/unarchive a thread + +## Usage + +```cc +$archiveThread[Thread ID;Archive? (yes/no)] +``` + +### Example (Archiving a thread): +```cc +$archiveThread[1024373454578917426] + + +``` + +### Example (Unarchiving a thread): +```cc +$archiveThread[1024373454578917426;no] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/closePost.mdx b/content/docs/(functions)/Threads/closePost.mdx new file mode 100644 index 00000000..28e2c300 --- /dev/null +++ b/content/docs/(functions)/Threads/closePost.mdx @@ -0,0 +1,23 @@ +--- +title: "$closePost" +--- + +Close/Open a post + +## Usage + +```cc +$closePost[Post ID;Close (yes/no)] +``` + +### Example (Closing a post): +```cc +$closePost[1024373454578917426] + + +``` + +### Example (Opening a post): +```cc +$closePost[1024373454578917426;no] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/createPost.mdx b/content/docs/(functions)/Threads/createPost.mdx new file mode 100644 index 00000000..9806b51a --- /dev/null +++ b/content/docs/(functions)/Threads/createPost.mdx @@ -0,0 +1,33 @@ +--- +title: "$createPost" +--- + +add a new post in forum channel + +## Usage + +```cc +$createPost[ + {forum=Forum Name/ID} + {title=Post title} + {content=Post Content} + {archive=Auto-archive duration} + {message_ratelimit=how often messages can be sent} + {return_id=yes/no} + {reason=reason for audit log} + {tag=apply Tag1} + {tag=apply Tag2}... +] +``` + +### Auto-archive Inactive post: +It accepts only 7 durations: 1h, 1d, 3d, 7d + +### Post Content: +It accept embed and curl format like\ +``` +{content= + {desc:Embed description} + {title:Embed Title} +} +``` diff --git a/content/docs/(functions)/Threads/createThread.mdx b/content/docs/(functions)/Threads/createThread.mdx new file mode 100644 index 00000000..d8dd91d2 --- /dev/null +++ b/content/docs/(functions)/Threads/createThread.mdx @@ -0,0 +1,47 @@ +--- +title: "$createThread" +--- + + + +Create a thread, corresponding to the messageID specified in the function +## Usage: +`$createThread[Channel ID;Message ID;Thread Name;Reason;Duration (1h/1d/3d/7d)(optional);Return ID (yes/no)(optional);Private Thread? (yes/no)]` + +#### Example (Create Thread on user message): +```cc +$createThread[ + {channel=$channelID} + {message=$messageID} + {name=Example} +] +``` + +#### Example (Create A private thread): +```cc +$createThread[ + {channel=$channelID} + {message=$messageID} + {name=Example} + {private=yes} +] +``` + + + +`$createChannel`, create a channel + +`$createRole`, create a role + + + + + +This Command supports Curl Arguments, a link to the page explaining it, will get added when done + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Threads/deletePost.mdx b/content/docs/(functions)/Threads/deletePost.mdx new file mode 100644 index 00000000..a8fcb6b8 --- /dev/null +++ b/content/docs/(functions)/Threads/deletePost.mdx @@ -0,0 +1,16 @@ +--- +title: "$deletePost" +--- + +delete a post + +## Usage + +```cc +$deletePost[Post ID] +``` + +### Example: +```cc +$deletePost[1024373454578917426] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/deletePosts.mdx b/content/docs/(functions)/Threads/deletePosts.mdx new file mode 100644 index 00000000..466d01b4 --- /dev/null +++ b/content/docs/(functions)/Threads/deletePosts.mdx @@ -0,0 +1,16 @@ +--- +title: "$deletePosts" +--- + +delete posts up to 10 post + +## Usage + +```cc +$deletePost[Post 1;Post 2;...] +``` + +### Example: +```cc +$deletePosts[1024373454578917426;1024373433578915132;1222373424378915555] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/deleteThreads.mdx b/content/docs/(functions)/Threads/deleteThreads.mdx new file mode 100644 index 00000000..eec1ea00 --- /dev/null +++ b/content/docs/(functions)/Threads/deleteThreads.mdx @@ -0,0 +1,17 @@ +--- +title: "$deleteThreads" +--- + +threads with the provided thread id gets deleted +## Usage +```cc +$deleteThreads[threadid;threadid2;...] +``` + +Example: `$deleteThreads[809890890890000]` +Don't forget to change the thread id + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Threads/editPost.mdx b/content/docs/(functions)/Threads/editPost.mdx new file mode 100644 index 00000000..e253db7b --- /dev/null +++ b/content/docs/(functions)/Threads/editPost.mdx @@ -0,0 +1,53 @@ +--- +title: "$editPost" +--- + +edit an existing post in forum channel + +## Usage + +```cc +$editPost[ + {post_id=Post ID} + {title=New Post title} + {content=New Post Content (only if bot is author)} + {archive=Auto-archive duration} + {message_ratelimit=how often messages can be sent} + {locked=is post locked? (yes/no)} + {closed=is post closed? (yes/no)} + {pinned=is post pinned? (yes/no)} + {reason=reason for audit log} + {tag=Add Tag1} + {tag=Add Tag2}... + {remove_tag=Remove Tag3} + {remove_tag=Remove Tag4}... +] +``` + +### Auto-archive Inactive post: +It accepts only 7 durations: 1h, 1d, 3d, 7d + +### Locked/Closed/Pinned Values: +They accept: `yes` or `no` + +### Tag values: +It accept the tag names only, if not valid will be ignored. + +### Post Content: +It accept embed and curl format like\ +``` +{content= + {desc:Embed description} + {title:Embed Title} +} +``` + +### Example (Lock , Add Tag Inactive, Remove Tag Active): +```cc +$editPost[ + {id=1234} + {locked=yes} + {remove_tag=Active} + {tag=Inactive} +] +``` diff --git a/content/docs/(functions)/Threads/editThread.mdx b/content/docs/(functions)/Threads/editThread.mdx new file mode 100644 index 00000000..7bc08361 --- /dev/null +++ b/content/docs/(functions)/Threads/editThread.mdx @@ -0,0 +1,30 @@ +--- +title: "$editThread" +--- + + + +Edit a Thread. + +## Usage: +`$editThread[Channel ID;Thread ID;Thread Name;Archived (yes/no);duration (1h/1d/3d/7d)(optional);Slowmode;Locked (yes/no)]` + +#### Example: +`$editThread[$channelID;$getServerVar[threadID];Cat Discussion;yes]` Will edit the thread stored in the server var "threadID" + + + + +You can only use the durations, allowed by your boosting level! Please do not try to use `7d` if your server hasn't got level 3 boosting perks + + + + + +This Command supports Curl Arguments, a link to the page explaining it, will get added when done + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Threads/getThreads.mdx b/content/docs/(functions)/Threads/getThreads.mdx new file mode 100644 index 00000000..ef756214 --- /dev/null +++ b/content/docs/(functions)/Threads/getThreads.mdx @@ -0,0 +1,28 @@ +--- +title: "$getThreads" +--- + +Get all threads from a channel. + +## Usage: +`$getThreads[Channel ID;Type to return (name/id);Seperator (default:, )]` + +
+ + +!!exec $getThreads[$channelID;name; | ] + + +Cat Disscussion | Help + + + + + +This Command supports Curl Arguments, a link to the page explaining it, will get added when done + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Threads/joinThreads.mdx b/content/docs/(functions)/Threads/joinThreads.mdx new file mode 100644 index 00000000..64c22aaa --- /dev/null +++ b/content/docs/(functions)/Threads/joinThreads.mdx @@ -0,0 +1,17 @@ +--- +title: "$joinThreads" +--- + +custom command bot joins the threads with the provided thread id +## Usage +```cc +$joinThreads[threadid;threadid2;...] +``` + +Example: `$joinThreads[809890890890000]` +Don't forget to change the thread id + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Threads/leaveThreads.mdx b/content/docs/(functions)/Threads/leaveThreads.mdx new file mode 100644 index 00000000..057f16af --- /dev/null +++ b/content/docs/(functions)/Threads/leaveThreads.mdx @@ -0,0 +1,17 @@ +--- +title: "$leaveThreads" +--- + +custom command bot leaves the threads with the provided thread id +## Usage +```cc +$leaveThreads[threadid;threadid2;...] +``` + +Example: `$leaveThreads[809890890890000]` +Don't forget to change the thread id + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Threads/lockPost.mdx b/content/docs/(functions)/Threads/lockPost.mdx new file mode 100644 index 00000000..a6f1ceeb --- /dev/null +++ b/content/docs/(functions)/Threads/lockPost.mdx @@ -0,0 +1,23 @@ +--- +title: "$lockPost" +--- + +lock/unlock a post + +## Usage + +```cc +$lockPost[Post ID;Lock? (yes/no)] +``` + +### Example (Locking a post): +```cc +$lockPost[1024373454578917426] + + +``` + +### Example (Unlocking a post): +```cc +$lockPost[1024373454578917426;no] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/lockThread.mdx b/content/docs/(functions)/Threads/lockThread.mdx new file mode 100644 index 00000000..009c4de1 --- /dev/null +++ b/content/docs/(functions)/Threads/lockThread.mdx @@ -0,0 +1,23 @@ +--- +title: "$lockThread" +--- + +lock/unlock a thread + +## Usage + +```cc +$lockThread[Thread ID;Lock? (yes/no)] +``` + +### Example (Locking a thread): +```cc +$lockThread[1024373454578917426] + + +``` + +### Example (Unlocking a thread): +```cc +$lockThread[1024373454578917426;no] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/meta.json b/content/docs/(functions)/Threads/meta.json new file mode 100644 index 00000000..40235148 --- /dev/null +++ b/content/docs/(functions)/Threads/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Threads Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Threads/pinPost.mdx b/content/docs/(functions)/Threads/pinPost.mdx new file mode 100644 index 00000000..2c1f97a7 --- /dev/null +++ b/content/docs/(functions)/Threads/pinPost.mdx @@ -0,0 +1,23 @@ +--- +title: "$pinPost" +--- + +pin/unpin a post + +## Usage + +```cc +$pinPost[Post ID;pin? (yes/no)] +``` + +### Example (pining a post): +```cc +$pinPost[1024373454578917426] + + +``` + +### Example (Unpining a post): +```cc +$pinPost[1024373454578917426;no] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/removeUsersFromThread.mdx b/content/docs/(functions)/Threads/removeUsersFromThread.mdx new file mode 100644 index 00000000..dba7c6e4 --- /dev/null +++ b/content/docs/(functions)/Threads/removeUsersFromThread.mdx @@ -0,0 +1,23 @@ +--- +title: "$removeUsersFromThread" +--- + +remove users from a thread + +## Usage + +```cc +$removeUsersFromThread[Thread ID;User 1 ID;User 2 ID;User 3 ID....] +``` + +### Example (remove the triggerer from a thread): +```cc +$removeUsersFromThread[1024373454578917426;$authorID] + + +``` + +### Example (remove multiple users): +```cc +$removeUsersFromThread[1024373454578917426;$authorID;788361834360864808] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Threads/thread.mdx b/content/docs/(functions)/Threads/thread.mdx new file mode 100644 index 00000000..199c3aba --- /dev/null +++ b/content/docs/(functions)/Threads/thread.mdx @@ -0,0 +1,45 @@ +--- +title: "$thread" +--- + +Gets info trom a thread. + +## Usage: +`$thread[Thread ID;Type]` + +
+ + +!!exec <@!$thread[owner]> + + +Member + + + + + + +* `archivedat` +* `duration` +* `id` +* `members` +* `memberscount` +* `messagescount` +* `name` +* `owner` +* `locked` +* `parent` + + + + + + +This Command supports Curl Arguments, a link to the page explaining it, will get added when done + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Timeout/meta.json b/content/docs/(functions)/Timeout/meta.json new file mode 100644 index 00000000..b2067ae1 --- /dev/null +++ b/content/docs/(functions)/Timeout/meta.json @@ -0,0 +1,4 @@ +{ + "title": "User Timeout Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Timeout/timeoutAction.mdx b/content/docs/(functions)/Timeout/timeoutAction.mdx new file mode 100644 index 00000000..edee4908 --- /dev/null +++ b/content/docs/(functions)/Timeout/timeoutAction.mdx @@ -0,0 +1,13 @@ +--- +title: "$timeoutAction" +--- + +Returns `add` if a user was timed out, `remove` if the timeout was removed.\ +This function only works in the Timeout trigger. + +## Usage + +```cc +$timeoutAction +``` + diff --git a/content/docs/(functions)/Timeout/timeoutBy.mdx b/content/docs/(functions)/Timeout/timeoutBy.mdx new file mode 100644 index 00000000..310e37b6 --- /dev/null +++ b/content/docs/(functions)/Timeout/timeoutBy.mdx @@ -0,0 +1,13 @@ +--- +title: "$timeoutBy" +--- + +Return the user id of the admin/mod that timed out the user.\ +This function only works in the Timeout trigger. + +## Usage + +```cc +$timeoutBy +``` + diff --git a/content/docs/(functions)/Timeout/timeoutReason.mdx b/content/docs/(functions)/Timeout/timeoutReason.mdx new file mode 100644 index 00000000..43496741 --- /dev/null +++ b/content/docs/(functions)/Timeout/timeoutReason.mdx @@ -0,0 +1,13 @@ +--- +title: "$timeoutReason" +--- + +Return the reason of the timeout.\ +This function only works in the Timeout trigger. + +## Usage + +```cc +$timeoutReason +``` + diff --git a/content/docs/(functions)/Timeout/userGetTimeout.mdx b/content/docs/(functions)/Timeout/userGetTimeout.mdx new file mode 100644 index 00000000..66b73883 --- /dev/null +++ b/content/docs/(functions)/Timeout/userGetTimeout.mdx @@ -0,0 +1,13 @@ +--- +title: "$userGetTimeout" +--- + +Return the time left of the timeout in milliseconds.\ +If user is not timed out, it will return 0. + +## Usage + +```cc +$userGetTimeout[user id] +``` + diff --git a/content/docs/(functions)/Timeout/userRemoveTimeout.mdx b/content/docs/(functions)/Timeout/userRemoveTimeout.mdx new file mode 100644 index 00000000..6e13e2d4 --- /dev/null +++ b/content/docs/(functions)/Timeout/userRemoveTimeout.mdx @@ -0,0 +1,12 @@ +--- +title: "$userRemoveTimeout" +--- + +Removes a timeout from a user. + +## Usage + +```cc +$userRemoveTimeout[user id;reason (optional)] +``` + diff --git a/content/docs/(functions)/Timeout/userSetTimeout.mdx b/content/docs/(functions)/Timeout/userSetTimeout.mdx new file mode 100644 index 00000000..a8222aa2 --- /dev/null +++ b/content/docs/(functions)/Timeout/userSetTimeout.mdx @@ -0,0 +1,12 @@ +--- +title: "$userSetTimeout" +--- + +Sets a user timeout, so the user cannot talk/interact in the server. + +## Usage + +```cc +$userSetTimeout[user id;time (optional, default:'10m');reason (optional)] +``` + diff --git a/content/docs/(functions)/Useful/callFunction.mdx b/content/docs/(functions)/Useful/callFunction.mdx new file mode 100644 index 00000000..8641182e --- /dev/null +++ b/content/docs/(functions)/Useful/callFunction.mdx @@ -0,0 +1,60 @@ +--- +title: "$callFunction" +--- + +To call a user-defined function created with `$function` + + +## Usage: +`$callFunction[Function Name;Argument 1 (optional);Argument 2....(optional)]` + +#### Example: +```cc +$callFunction[printHello;Mika] +``` + +Call the function, using `$callFunction` +
+ + + +!!exec $function[printHello;name] +
+Hello $name 👋 +
+$endFunction +$callFunction[printhello;Mika] +
+
+ +Hello Mika 👋 + +
+ +Call the function, using `$printHello` +
+ + + +!!exec $function[printHello;name] +
+Hello $name 👋 +
+$endFunction +$printhello[Mika] +
+
+ +Hello Mika 👋 + +
+ + + +A function name can't start with number, and must be within [A-Z or a-z or _ or 0-9] + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Useful/commandCode.mdx b/content/docs/(functions)/Useful/commandCode.mdx new file mode 100644 index 00000000..18a7aefb --- /dev/null +++ b/content/docs/(functions)/Useful/commandCode.mdx @@ -0,0 +1,24 @@ +--- +title: "$commandCode" +--- + +Returns the code of the current command. + +## Usage + +```cc +$commandCode +``` + +## Example +```cc +Emergency alert has been triggered! +Please note that each use of this command is logged, and each unjustified use of this command will result in punishment. +$channelSendMessage[$channelID[logs]; +{author:$userTag[$authorID]:$authorAvatar} +{description:The following code has been triggered by $username[$authorID] +```$commandCode```}] +``` + +![Same channel](https://cdn.discordapp.com/attachments/957286111250624552/1079823180207755425/IMG_20230227_195122.jpg) +![Logs channel](https://cdn.discordapp.com/attachments/957286111250624552/1079823180593627146/IMG_20230227_195139.jpg) diff --git a/content/docs/(functions)/Useful/deleteTrigger.mdx b/content/docs/(functions)/Useful/deleteTrigger.mdx new file mode 100644 index 00000000..e72775c8 --- /dev/null +++ b/content/docs/(functions)/Useful/deleteTrigger.mdx @@ -0,0 +1,12 @@ +--- +title: "$deleteTrigger" +--- + +Delete a command using its token, **empty token = delete current command** + +## Usage + +```cc +$deleteTrigger[Token;Delete Current Trigger If Empty (yes/no, default yes)] +``` + diff --git a/content/docs/(functions)/Useful/editTrigger.mdx b/content/docs/(functions)/Useful/editTrigger.mdx new file mode 100644 index 00000000..411eca5b --- /dev/null +++ b/content/docs/(functions)/Useful/editTrigger.mdx @@ -0,0 +1,26 @@ +--- +title: "$editTrigger" +--- + +Edit a command information like `name` or `type`\ +\ +Editable types: name, runonlyin, ignorerole, type, trigger, channelused, minperms, time + +## Usage + +```cc +$editTrigger[InfoType;New value;Token (optional)] +``` + +### Example: +```cc +$editTrigger[name;Edited Name] +``` + +### Change Timed Trigger Time +you change the trigger time, with `time` as type, and value to be the timestamp (in ms) of the next trigger time, make sure it's a time in future + +Example (Set the time to trigger after 10s) +```cc +$editTrigger[time;$math[$timestamp+10000];$token] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Useful/endForEach.mdx b/content/docs/(functions)/Useful/endForEach.mdx new file mode 100644 index 00000000..7f22df01 --- /dev/null +++ b/content/docs/(functions)/Useful/endForEach.mdx @@ -0,0 +1,15 @@ +--- +title: "$endForEach" +--- + +To close $foreach + +## Usage + +```cc +Example: +$forEach[...] +CODE +$endForEach +``` + diff --git a/content/docs/(functions)/Useful/endFunction.mdx b/content/docs/(functions)/Useful/endFunction.mdx new file mode 100644 index 00000000..99d3da7c --- /dev/null +++ b/content/docs/(functions)/Useful/endFunction.mdx @@ -0,0 +1,18 @@ +--- +title: "$endFunction" +--- + +To close $function + +## Usage + +```cc +$endFunction +``` + +### Example: +```cc +$function[Function Name;Paramaters..] +CODE +$endFunction +``` \ No newline at end of file diff --git a/content/docs/(functions)/Useful/endTimeout.mdx b/content/docs/(functions)/Useful/endTimeout.mdx new file mode 100644 index 00000000..b6f12de3 --- /dev/null +++ b/content/docs/(functions)/Useful/endTimeout.mdx @@ -0,0 +1,12 @@ +--- +title: "$endTimeout" +--- + +To close $setTimeout + +## Usage + +```cc +$endTimeout +``` + diff --git a/content/docs/(functions)/Useful/forEach.mdx b/content/docs/(functions)/Useful/forEach.mdx new file mode 100644 index 00000000..72da5284 --- /dev/null +++ b/content/docs/(functions)/Useful/forEach.mdx @@ -0,0 +1,69 @@ +--- +title: "$forEach" +--- + +Will loop over a list and every loop it will take an item and assign it inside varname accessible by $get[varname] or $varname + +## Usage: +```cc +$forEach[varname;LIST (ex: mido rake azz);Separator (Optional, default is space)] +``` +## Loop Limits +Loops in this function are limited to a certain number of cycles. These limits vary between different tiers of premium. +| Tier | Limit | +| :------- | :--- | +| 0 (Free) | 10 | +| 3 (Freemium) | 15 | +| 4 (Pro) | 30 | +| 5 (Ultra) | 60 | + +## Example: +```cc +$forEach[member;Rake, Mido, Mika, Azz, Felix, Flinkz, Wiki, Ddk;, ] +$get[member], is one of our Staff Members! +$endForEach +``` + +
+ + + +!!exec $forEach[member;Rake, Mido, Azz, Mika, Felix, Flinkz, Wiki, Ddk;, ] +
+$get[member], is one of our Staff Members! +
+$endForEach +
+
+ + +Rake, is one of our Staff Members! +
+Mido, is one of our Staff Members! +
+Azz, is one of our Staff Members! +
+Mika, is one of our Staff Members! +
+Felix, is one of our Staff Members! +
+Flinkz, is one of our Staff Members! +
+Wiki, is one of our Staff Members! +
+Ddk, is one of our Staff Members! +
+
+
+
+ + + +This can be used with `$seq`! + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Useful/function.mdx b/content/docs/(functions)/Useful/function.mdx new file mode 100644 index 00000000..b068a662 --- /dev/null +++ b/content/docs/(functions)/Useful/function.mdx @@ -0,0 +1,148 @@ +--- +title: "$function" +--- + +Create a user-defined function that can be called by `$callFunction` or `$functionName`. + +## Usage + +`$function[Function name;Param 1 (optional);Param 2...(optional)]` + +#### Example + +```cc +$function[printHello;name] + Hello $name +$endFunction +``` + +Call the function using `$callFunction`: + +
+ + + +!!exec $function[printHello;name] +Hello $name 👋 +$endFunction + +$callFunction[printhello;Mika] + + + +Hello Mika 👋 + + + +Call the function using `$printHello`: + +
+ + + +!!exec $function[printHello;name] +Hello $name 👋 +$endFunction + +$printhello[Mika] + + + +Hello Mika 👋 + + + + + +A function name can't start with number, and must be within [A-Z or a-z or _ or 0-9] for short format (`$functionName`) +but if you are using `$callFunction` to call the function, any name is valid. + + + + + +Code inside the function is isolated from outside, which means changing of variables, arrays, random,...won't effect the outside. +you can access outside temporary variables (assigned by `$let`) but you can't change them. + + + + +## Default parameter values + +Parameters can have a default value by using `=`. The default value is used when the parameter is not provided when calling the function. + +```cc +$function[greet;name=Mika] + Hello $name 👋 +$endFunction +``` + +Calling the function without providing `name`: + +```cc +$greet[] +``` + +outputs: + +```text +Hello Mika 👋 +``` + +Providing a value overrides the default: + +```cc +$greet[Alex] +``` + +outputs: + +```text +Hello Alex 👋 +``` + +Default values can also be used with multiple parameters: + +```cc +$function[greet;name=Mika;greeting=Hello] + $greeting $name 👋 +$endFunction +``` + +Calling: + +```cc +$greet[] +``` + +outputs: + +```text +Hello Mika 👋 +``` + +While providing custom values: + +```cc +$greet[Alex;Welcome] +``` + +outputs: + +```text +Welcome Alex 👋 +``` + + + +When defining default parameter values, spaces in the parameter name are ignored, but spaces in the default value are preserved. + +- `param=def` and `param =def` are equivalent. +- `param= def` is different from `param=def` because the spaces are part of the default value. +- `=abc` is invalid because a parameter name is required. + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Useful/getToken.mdx b/content/docs/(functions)/Useful/getToken.mdx new file mode 100644 index 00000000..090cd481 --- /dev/null +++ b/content/docs/(functions)/Useful/getToken.mdx @@ -0,0 +1,18 @@ +--- +title: "$getToken" +--- + +search for command name, and return the first matching command token.\ + if no command found with that name `undefined` will be returned + +## Usage + +```cc +$getToken[Name] +``` + +### Example: +```cc +$getToken[Welcomer] +Output:dZK1x +``` \ No newline at end of file diff --git a/content/docs/(functions)/Useful/getTrigger.mdx b/content/docs/(functions)/Useful/getTrigger.mdx new file mode 100644 index 00000000..02bf2e15 --- /dev/null +++ b/content/docs/(functions)/Useful/getTrigger.mdx @@ -0,0 +1,18 @@ +--- +title: "$getTrigger" +--- + +Return the command trigger information like `name` or `type`\ +\ +Valid InfoType: name, token, guild, code, runonlyin, ignorerole, type, typename, trigger, createdby, minperms, channelused + +## Usage + +```cc +$getTrigger[InfoType;Token (optional)] +``` + +### Example: +```cc +$getTrigger[name] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Useful/ignoreErrors.mdx b/content/docs/(functions)/Useful/ignoreErrors.mdx new file mode 100644 index 00000000..6b28ee9a --- /dev/null +++ b/content/docs/(functions)/Useful/ignoreErrors.mdx @@ -0,0 +1,17 @@ +--- +title: "$ignoreErrors" +--- + +It will tell the interpreter to ignore the errors and in case of error, the function will return the placeholder you specified + +## Usage + +```cc +$ignoreErrors[yes/no;placeholder (default: error)] +``` + +### Example (With ignore errors): +![](https://i.imgur.com/Y0Wwmcg.png) + +### Example (Without ignore errors): +![](https://i.imgur.com/CMKgTtR.png) \ No newline at end of file diff --git a/content/docs/(functions)/Useful/includeLibrary.mdx b/content/docs/(functions)/Useful/includeLibrary.mdx new file mode 100644 index 00000000..45d93bbc --- /dev/null +++ b/content/docs/(functions)/Useful/includeLibrary.mdx @@ -0,0 +1,12 @@ +--- +title: "$includeLibrary" +--- + +To include code created in Library trigger + +## Usage + +```cc +$includeLibrary[Library name] +``` + diff --git a/content/docs/(functions)/Useful/jsonRequest.mdx b/content/docs/(functions)/Useful/jsonRequest.mdx new file mode 100644 index 00000000..4ef1e124 --- /dev/null +++ b/content/docs/(functions)/Useful/jsonRequest.mdx @@ -0,0 +1,33 @@ +--- +title: "$jsonRequest" +--- + +Makes an API request (`GET`) and returns its response. + + +The URL must be whitelisted, you can check in our support server. + + + +## Usage + +```cc +$jsonRequest[url;property;error message;headerName:headerValue;headerName:headerValue;...] +``` + +### Timeout +request will timeout after 1 minute, for tier 4+ it will timeout after 30 minutes. + +## Example +Assume `my api url` return json reply like: +```json +{ + "user":"Mido", + "money":5332 +} +``` + +Code: +```cc +Your money is $jsonRequest[my api;money;failed to get the money] +``` diff --git a/content/docs/(functions)/Useful/meta.json b/content/docs/(functions)/Useful/meta.json new file mode 100644 index 00000000..11fdb0d5 --- /dev/null +++ b/content/docs/(functions)/Useful/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Useful Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Useful/redirectErrors.mdx b/content/docs/(functions)/Useful/redirectErrors.mdx new file mode 100644 index 00000000..ce6a0a6a --- /dev/null +++ b/content/docs/(functions)/Useful/redirectErrors.mdx @@ -0,0 +1,40 @@ +--- +title: "$redirectErrors" +--- + +To redirect any kind of errors to a specific channel, by default errors will appear in the execution channel + +## Usage: +`$redirectErrors[Channel ID]` + +#### Example: +
+ + + +!!exec $modifyChannelPerms[$authorID;-sendmessages;$channelID] +$redirectErrors[Channel ID] + + + + +
+ + +❌ Invalid channel ID in $modifyChannelPerms[787695068306866198;-sendmessages;879380104768278608] + + + + + + +The way `$modifyChannelPerms` shown here is **NOT** correct! + +Check the `$modifyChannelPerms` for the correct usage + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Useful/return.mdx b/content/docs/(functions)/Useful/return.mdx new file mode 100644 index 00000000..21cd24dd --- /dev/null +++ b/content/docs/(functions)/Useful/return.mdx @@ -0,0 +1,21 @@ +--- +title: "$return" +--- + +Stops a user defined function execution and returns the Return Value + +Can only be used inside user-defined functions created with `$function`\ +It has no effect outside the user-defined function + +## Usage + +```cc +$return[Return Value(optional)] +``` + +### Example: +```cc +$function[add;num1;num2] + $return[$math[$num1+$num2]] +$endFunction +``` diff --git a/content/docs/(functions)/Useful/seq.mdx b/content/docs/(functions)/Useful/seq.mdx new file mode 100644 index 00000000..a53cd534 --- /dev/null +++ b/content/docs/(functions)/Useful/seq.mdx @@ -0,0 +1,29 @@ +--- +title: "$seq" +--- + +Returns a sequence of numbers, decided by a starting (inclusive) number and stop at ending (inclusive) number with step. + +## Usage: +`$seq[Start;End;Step (optional, default=1);Separator (default ' ')]` + +#### Example: +
+ + +!!exec $seq[1;10] + + +1 2 3 4 5 6 7 8 9 10 + + + + + +This can be used with `$forEach` quite easily + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Useful/setTimeout.mdx b/content/docs/(functions)/Useful/setTimeout.mdx new file mode 100644 index 00000000..dc9bcc33 --- /dev/null +++ b/content/docs/(functions)/Useful/setTimeout.mdx @@ -0,0 +1,38 @@ +--- +title: "$setTimeout" +--- + +Will execute the code inside it after certain time + +## Usage: +`$setTimeout[time;file name (optional, default=$undefined));author (optional, default=$authorID)]` + +#### Example: +
+ + +!!exec This part gets executed before the 2d timeout +$setTimeout[2d;Testing;$authorID] +This part after the 2d +$endTimeout + + +This part gets executed before the 2d timeout + + +This part after the 2d + + + + + +If you only want to wait less then 1m, you can use `$wait` + + + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Useful/spread.mdx b/content/docs/(functions)/Useful/spread.mdx new file mode 100644 index 00000000..f38398da --- /dev/null +++ b/content/docs/(functions)/Useful/spread.mdx @@ -0,0 +1,26 @@ +--- +title: "$spread" +--- + +spreads text as arguments inside functions + +## Usage +```cc +$spread[separator (optional, default: ,);data to spread] +``` + +#### Example: +
+ + +!!exec Your color is $randomtext[$spread[,;Blue,Yellow,Green]] + + +Your color is Yellow + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Useful/stop.mdx b/content/docs/(functions)/Useful/stop.mdx new file mode 100644 index 00000000..22d116ba --- /dev/null +++ b/content/docs/(functions)/Useful/stop.mdx @@ -0,0 +1,52 @@ +--- +title: "$stop" +--- + +This function will cause the interpetender to stop the command execution & return a message if wanted. + +## Usage: +`$stop[Message (optional)]` + +#### Example: +
+ + + +!!exec $sendMessage[This message will be send;no] +
+$stop[This funtion will cause the interpetender to stop the code] +
+$sendMesssage[This message won't be send;no] +
+
+ +This message will be send + + +This funtion will cause the interpetender to stop the code + +
+ + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + + + +Using plain text in your code, like below will **NOT** work!! + +This code doesn't work: +```cc +This is plain text before the stop function +$stop +This is plain text after the stop function +``` +^^ - This will not send anything! + + + +**Function difficulty:** + +**Tags:** diff --git a/content/docs/(functions)/Useful/suppressErrors.mdx b/content/docs/(functions)/Useful/suppressErrors.mdx new file mode 100644 index 00000000..53ebc29b --- /dev/null +++ b/content/docs/(functions)/Useful/suppressErrors.mdx @@ -0,0 +1,41 @@ +--- +title: "$suppressErrors" +--- + +Suppress all the errors and sends a custom one. \{error} will contain the error that was thrown. + +## Usage: +`$suppressErrors[message]` + +#### Example: +
+ + + +!!exec $suppressErrors[Wrong usage of $modifyChannelPerms] +$modifyChannelPerms[$authorID;-sendmessages;$channelID] + + + +Wrong usage of $modifyChannelPerms + + + + + +You can send embed using [Message Curl Format](/CodeReferences/ref.message_curl_format) + + + + + +The way `$modifyChannelPerms` shown here is **NOT** correct! + +Check the `$modifyChannelPerms` for the correct usage + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Useful/triggerExists.mdx b/content/docs/(functions)/Useful/triggerExists.mdx new file mode 100644 index 00000000..92dbd59c --- /dev/null +++ b/content/docs/(functions)/Useful/triggerExists.mdx @@ -0,0 +1,31 @@ +--- +title: "$triggerExists" +--- + +Check if a trigger with the specified token exists + +## Usage + +```cc +$triggerExists[Token] +``` + +### Example (An existing trigger): + + +!!exec $triggerExists[fx1d53]

+
+ +true

+
+
+ +### Example (not available trigger): + + +!!exec $triggerExists[abcdef]

+
+ +false + +
diff --git a/content/docs/(functions)/Useful/wait.mdx b/content/docs/(functions)/Useful/wait.mdx new file mode 100644 index 00000000..d354b0ed --- /dev/null +++ b/content/docs/(functions)/Useful/wait.mdx @@ -0,0 +1,39 @@ +--- +title: "$wait" +--- + +Will wait an X time, before executing the code below it. + +## Usage: +`$wait[time]` + +#### Example: +
+ + + +!!exec $sendMessage[This part gets executed before the 10s] +
+$wait[10s] +
+$sendMessage[This part after the 10s] +
+
+ +This part gets executed before the 10s + + +This part after the 10s + +
+ + + +If you want to wait more then 1m, we suggest you use `$setTimeout` + + + +**Function difficulty:** + +**Tags:** + diff --git a/content/docs/(functions)/Variables/deleteChannelVar.mdx b/content/docs/(functions)/Variables/deleteChannelVar.mdx new file mode 100644 index 00000000..3542143e --- /dev/null +++ b/content/docs/(functions)/Variables/deleteChannelVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$deleteChannelVar" +--- + +Deletes a channel variable, from the command trigger channel or from the ID specified. + +## Usage +```cc +$deleteChannelVar[variable;channelID(optional)] +``` +
+ + +!!exec $deleteChannelVar[Creator] + + + + + +Check out: `$setChannelVar` + +Check out: `$getChannelVar` + + diff --git a/content/docs/(functions)/Variables/deleteMessageVar.mdx b/content/docs/(functions)/Variables/deleteMessageVar.mdx new file mode 100644 index 00000000..f99683d9 --- /dev/null +++ b/content/docs/(functions)/Variables/deleteMessageVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$deleteMessageVar" +--- + +Deletes a message variable, from the command trigger or from the ID specified. + +## Usage +```cc +$deleteMessageVar[variable;MessageID(optional)] +``` +
+ + +!!exec $deleteMessageVar[Author] + + + + + +Check out: `$setMessageVar` + +Check out: `$getMessageVar` + + diff --git a/content/docs/(functions)/Variables/deleteServerVar.mdx b/content/docs/(functions)/Variables/deleteServerVar.mdx new file mode 100644 index 00000000..6e09df78 --- /dev/null +++ b/content/docs/(functions)/Variables/deleteServerVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$deleteServerVar" +--- + +Deletes a server variable. + +## Usage +```cc +$deleteServerVar[variable] +``` +
+ + +!!exec $deleteServerVar[TopMember] + + + + + +Check out: `$setServerVar` + +Check out: `$getServerVar` + + diff --git a/content/docs/(functions)/Variables/deleteUserVar.mdx b/content/docs/(functions)/Variables/deleteUserVar.mdx new file mode 100644 index 00000000..dbf4e676 --- /dev/null +++ b/content/docs/(functions)/Variables/deleteUserVar.mdx @@ -0,0 +1,26 @@ +--- +title: "$deleteUserVar" +--- + +Deletes a user variable, from the author of the command or from the ID specified. + +## Usage +```cc +$deleteUserVar[variable;userID] +``` +
+ + +!!exec $deleteUserVar[Creator;$authorID] + + + + + +Check out: `$setUserVar` + +Check out: `$getUserVar` + +Check out: `$resetUserVar` + + diff --git a/content/docs/(functions)/Variables/get.mdx b/content/docs/(functions)/Variables/get.mdx new file mode 100644 index 00000000..3815d3ae --- /dev/null +++ b/content/docs/(functions)/Variables/get.mdx @@ -0,0 +1,36 @@ +--- +title: "$get" +--- + +retrieve variable defined by `$let` + +## Usage +```cc +$get[varname;value if not exists] or $varname +``` + +### Example 1: + + +!!exec $let[orange;10]
$get[orange] or $orange +
+ +10 or 10 + +
+ +### Example 2 (Use default value if not exists): + + +!!exec Your name is $get[name;Mido] + + +Your name is Mido + + + + + +Check out: `$let` + + diff --git a/content/docs/(functions)/Variables/getChannelVar.mdx b/content/docs/(functions)/Variables/getChannelVar.mdx new file mode 100644 index 00000000..6a341195 --- /dev/null +++ b/content/docs/(functions)/Variables/getChannelVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$getChannelVar" +--- + +Gets a channel variable value + +## Usage +```cc +$getChannelVar[variable;channelID(optional)] +``` +
+ + +!!exec $getChannelVar[Creator] + + +Mido + + + +**Note:** The return value will be `undefined` if the variable was not defined for that channel. + + + +Check out: `$setChannelVar` + +Check out: `$deleteChannelVar` + + diff --git a/content/docs/(functions)/Variables/getMessageVar.mdx b/content/docs/(functions)/Variables/getMessageVar.mdx new file mode 100644 index 00000000..1ce75625 --- /dev/null +++ b/content/docs/(functions)/Variables/getMessageVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$getMessageVar" +--- + +Gets a message variable value + +## Usage +```cc +$getMessageVar[variable;messageID(optional)] +``` +
+ + +!!exec $getMessageVar[data] + + +Mido + + + +**Note:** The return value will be `undefined` if the variable was not defined for that message. + + + +Check out: `$setMessageVar` + +Check out: `$deleteMessageVar` + + diff --git a/content/docs/(functions)/Variables/getServerVar.mdx b/content/docs/(functions)/Variables/getServerVar.mdx new file mode 100644 index 00000000..b96397f2 --- /dev/null +++ b/content/docs/(functions)/Variables/getServerVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$getServerVar" +--- + +Gets a server variable value + +## Usage +```cc +$getServerVar[variable] +``` +
+ + +!!exec $getServerVar[holder] + + +Mika + + + +**Note:** The return value will be `undefined` if the variable was not defined for that server. + + + +Check out: `$setServerVar` + +Check out: `$deleteServerVar` + + diff --git a/content/docs/(functions)/Variables/getUserVar.mdx b/content/docs/(functions)/Variables/getUserVar.mdx new file mode 100644 index 00000000..7e58a8be --- /dev/null +++ b/content/docs/(functions)/Variables/getUserVar.mdx @@ -0,0 +1,38 @@ +--- +title: "$getUserVar" +--- + +Gets a user variable value + +## Usage +```cc +$getUserVar[variable;User ID (Optional)] +``` + +#### Example + + +!!exec Your warnings: $getUserVar[warns] + + +Your warnings: 4 + + +!!exec Other user's warnings: $getUserVar[warns;12346786512312] + + +Other user's warnings: 1 + + + +**Note:** The return value will be `undefined` if the variable was not defined for that user. + + + +Check out: `$setUserVar` + +Check out: `$deleteUserVar` + +Check out: `$resetUserVar` + + diff --git a/content/docs/(functions)/Variables/increaseChannelVar.mdx b/content/docs/(functions)/Variables/increaseChannelVar.mdx new file mode 100644 index 00000000..b2db3b43 --- /dev/null +++ b/content/docs/(functions)/Variables/increaseChannelVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$increaseChannelVar" +--- + +To increase channel variable with a certain amount.\ +If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. + +## Usage + +```cc +$increaseChannelVar[variable name;amount/expression;channel id;default amount (default is 0)] +``` + +### Example (increase channel messages by 1): +```cc +$increaseChannelVar[messages;1] + + +``` + +### Example (double the messages): + + +!!exec Before: $getChannelVar[messages]
$increaseChannelVar[messages;x*2]
After: $getChannelVar[messages]

+
+ +Before: 5
After: 10 +
+
diff --git a/content/docs/(functions)/Variables/increaseServerVar.mdx b/content/docs/(functions)/Variables/increaseServerVar.mdx new file mode 100644 index 00000000..5db4a6b3 --- /dev/null +++ b/content/docs/(functions)/Variables/increaseServerVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$increaseServerVar" +--- + +To increase server variable with a certain amount.\ +If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. + +## Usage + +```cc +$increaseServerVar[variable name;amount/expression;default amount (default is 0)] +``` + +### Example (increase ticket numbers by 1): +```cc +$increaseServerVar[ticket numbers;1] + + +``` + +### Example (double the messages): + + +!!exec Before: $getServerVar[ticket numbers]
$increaseServerVar[ticket numbers;x*2]
After: $getServerVar[ticket numbers]

+
+ +Before: 5
After: 10 +
+
diff --git a/content/docs/(functions)/Variables/increaseUserVar.mdx b/content/docs/(functions)/Variables/increaseUserVar.mdx new file mode 100644 index 00000000..4f9f3df0 --- /dev/null +++ b/content/docs/(functions)/Variables/increaseUserVar.mdx @@ -0,0 +1,29 @@ +--- +title: "$increaseUserVar" +--- + +To increase user variable with a certain amount.\ +If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. + +## Usage + +```cc +$increaseUserVar[variable name;amount/expression;user id;default amount (default is 0)] +``` + +### Example (increase user money by 1000): +```cc +$increaseUserVar[money;1000] + + +``` + +### Example (double the money): + + +!!exec Before: $getUserVar[money]
$increaseUserVar[money;x*2]
After: $getUserVar[money]

+
+ +Before: 1000
After: 2000 +
+
diff --git a/content/docs/(functions)/Variables/initVar.mdx b/content/docs/(functions)/Variables/initVar.mdx new file mode 100644 index 00000000..3cde4a1a --- /dev/null +++ b/content/docs/(functions)/Variables/initVar.mdx @@ -0,0 +1,39 @@ +--- +title: "$initVar" +--- + +Initializes a variable with a default value if the var is undefined or does not exist + +## Usage + +```cc +$initVar[type;varname;Default Value;Custom ID (optional)] +``` + +### Allowed Types +server, message, channel, user + +### Custom ID +* For type 'message', it will be the message id. +* For type 'channel', it will be the channel id. +* For type 'user', it will be the user id. + +### Example (Server Var): +```cc +$initVar[server;totalPolls;0] +``` + +### Example (Channel Var): +```cc +$initVar[channel;ticket-owner;$authorID;$channelID] +``` + +### Example (User Var): +```cc +$initVar[user;money;0;$userID] +``` + +### Example (Message Var): +```cc +$initVar[message;reactions;0;$messageID] +``` \ No newline at end of file diff --git a/content/docs/(functions)/Variables/let.mdx b/content/docs/(functions)/Variables/let.mdx new file mode 100644 index 00000000..6b5e2ac8 --- /dev/null +++ b/content/docs/(functions)/Variables/let.mdx @@ -0,0 +1,26 @@ +--- +title: "$let" +--- + +Define a variable, that you can access later through `$get`. +This function is useful to temporarily store variables, like to save the result of a calculation + +## Usage +```cc +$let[variable name;variable value;remain after execution (yes/no , default no) (optional)] +``` +The first value will only exist until cc ends its execution,the second will still be accessable until next bot restart (every 5d) +You can use $get[varname] or $varname to retrieve the value +
+ + +!!exec $let[orange;10] or $let[apple;10;yes] + + + + + + +Check out: `$get` + + diff --git a/content/docs/(functions)/Variables/meta.json b/content/docs/(functions)/Variables/meta.json new file mode 100644 index 00000000..4d707058 --- /dev/null +++ b/content/docs/(functions)/Variables/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Variables Functions", + "pages": ["..."] +} diff --git a/content/docs/(functions)/Variables/resetUserVar.mdx b/content/docs/(functions)/Variables/resetUserVar.mdx new file mode 100644 index 00000000..27ea0a07 --- /dev/null +++ b/content/docs/(functions)/Variables/resetUserVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$resetUserVar" +--- + +Resets a user variable for all users. + +## Usage +```cc +$resetUserVar[variable] +``` +
+ + +!!exec $resetUserVar[warnings] + + + + + +Check out: `$setUserVar` + +Check out: `$getUserVar` + + diff --git a/content/docs/(functions)/Variables/setChannelVar.mdx b/content/docs/(functions)/Variables/setChannelVar.mdx new file mode 100644 index 00000000..a3a8039f --- /dev/null +++ b/content/docs/(functions)/Variables/setChannelVar.mdx @@ -0,0 +1,32 @@ +--- +title: "$setChannelVar" +--- + +Sets a channel variable value. + +## Usage +```cc +$setChannelVar[variable;value;channelID (optional)] +``` +
+ + +!!exec $setChannelVar[Creator;Mido;$channelID] + + + +or for current Channel + + + +!!exec $setChannelVar[Creator;Mido] + + + + + +Check out: `$getChannelVar` + +Check out: `$deleteChannelVar` + + diff --git a/content/docs/(functions)/Variables/setMessageVar.mdx b/content/docs/(functions)/Variables/setMessageVar.mdx new file mode 100644 index 00000000..d2031643 --- /dev/null +++ b/content/docs/(functions)/Variables/setMessageVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$setMessageVar" +--- + +Sets a message variable value. + +## Usage +```cc +$setMessageVar[variable;value;messageID(optional)] +``` +
+ + +!!exec $setMessageVar[Creator;Mido;$messageID] + + + + + +Check out: `$getMessageVar` + +Check out: `$deleteMessageVar` + + diff --git a/content/docs/(functions)/Variables/setServerVar.mdx b/content/docs/(functions)/Variables/setServerVar.mdx new file mode 100644 index 00000000..7340d4f6 --- /dev/null +++ b/content/docs/(functions)/Variables/setServerVar.mdx @@ -0,0 +1,24 @@ +--- +title: "$setServerVar" +--- + +Sets a Server variable value. + +## Usage +```cc +$setServerVar[variable;value] +``` +
+ + +!!exec $setServerVar[holder;Mika] + + + + + +Check out: `$getServerVar` + +Check out: `$deleteServerVar` + + diff --git a/content/docs/(functions)/Variables/setUserVar.mdx b/content/docs/(functions)/Variables/setUserVar.mdx new file mode 100644 index 00000000..5708cd7e --- /dev/null +++ b/content/docs/(functions)/Variables/setUserVar.mdx @@ -0,0 +1,26 @@ +--- +title: "$setUserVar" +--- + +Sets a user variable value. + +## Usage +```cc +$setUserVar[variable;value;userID(optional)] +``` +
+ + +!!exec $setMessageVar[warnings;5] + + + + + +Check out: `$getUserVar` + +Check out: `$deleteUserVar` + +Check out: `$resetUserVar` + + diff --git a/content/docs/(functions)/Variables/userLeaderboard.mdx b/content/docs/(functions)/Variables/userLeaderboard.mdx new file mode 100644 index 00000000..113061aa --- /dev/null +++ b/content/docs/(functions)/Variables/userLeaderboard.mdx @@ -0,0 +1,83 @@ +--- +title: "$userLeaderboard" +--- + +Generates a leaderboard of a user variable and return it. + +## Usage +```cc +$userLeaderboard[variable;Sorting Type;{top}.- {username} - {value};limit per page (optional, default=10, max=40);page (optional, default=1)] +``` + +#### Sorting Type + +* `highest-first` (Default): Shows the list from the highest value to the lowest. +* `lowest-first`: Shows the list from the lowest value to the highest. +* `desc` Deprecated: Legacy alias for `lowest-first`. +* `asc` Deprecated: Legacy alias for `highest-first`. + + +#### Available Variables +| Variable | Description | +| --- | ----------- | +| \{top} | returns the rank number | +| \{rank} | same as \{top} | +| \{value} | returns the numerical value of the variable | +| \{raw_value} | returns the raw value in case it's not number | +| \{id} | returns the user id | +| \{mention} | returns the user mention | +| \{username} | returns the username | +| \{nickname} | returns the nickname | +| \{tag} | returns the tag like Mido#1234 | +| \{discriminator} | returns the discriminator like 1234 | + +#### Pagination + +Since the list can contain many entries, you can control which portion of the list is displayed using the `limit per page` and `page` values. + +* `limit per page`: The maximum number of entries to show on each page. +* `page`: The page number to display. + + +#### Example: + + +!!exec Top 5 +$userLeaderboard[money;highest-first;\{top}. \{username} - \{value};5] + + +Top 5 +1. Mido - 350 +2. Rake - 201 +3. Zero - 121 +4. Red - 53 +5. Azz - 22 + + +!!exec Top 3 +$userLeaderboard[money;highest-first;\{top}. \{username} - \{value};3] + + +Top 3 +1. Mido - 350 +2. Rake - 201 +3. Zero - 121 + + + + +#### What if the value is not a valid number? +If a value is not a valid number, it will always be placed at the end of the list, regardless of the selected sorting type. + + +Check out: `$uservarRank` + +Check out: `$setUserVar` + +Check out: `$getUserVar` + +Check out: `$deleteUserVar` + +Check out: `$resetUserVar` + + diff --git a/content/docs/(functions)/Variables/userVarRank.mdx b/content/docs/(functions)/Variables/userVarRank.mdx new file mode 100644 index 00000000..56d80638 --- /dev/null +++ b/content/docs/(functions)/Variables/userVarRank.mdx @@ -0,0 +1,56 @@ +--- +title: "$userVarRank" +--- + +Return user's rank returned by `$userleaderboard` for a single user + +## Usage + +```cc +$uservarRank[Variable name;Sorting Type;User ID (optional)] +``` + +#### Sorting Type + +* `highest-first` (Default): Uses the sorting type that displays the list from the highest value to the lowest. +* `lowest-first`: Uses the sorting type that displays the list from the lowest value to the highest. +* `desc` Deprecated: Legacy alias for `lowest-first`. +* `asc` Deprecated: Legacy alias for `highest-first`. + +#### Example: + + +!!exec Top 5 +$userLeaderboard[money;highest-first;\{top}. \{username} - \{value};5] + + +Top 5 +1. Member - 350 +2. Rake - 201 +3. Zero - 121 +4. Red - 53 +5. Azz - 22 + + +!!exec Your rank is $userVarRank[money] + + +Your rank is 1 + + + +#### What if the user does not have the variable? +If the specified user does not have the variable defined, `$userVarRank` will return `undefined`. + + +Check out: `$userLeaderboard` + +Check out: `$setUserVar` + +Check out: `$getUserVar` + +Check out: `$deleteUserVar` + +Check out: `$resetUserVar` + + diff --git a/content/docs/(functions)/Variables/viewChannelVars.mdx b/content/docs/(functions)/Variables/viewChannelVars.mdx new file mode 100644 index 00000000..594124d7 --- /dev/null +++ b/content/docs/(functions)/Variables/viewChannelVars.mdx @@ -0,0 +1,31 @@ +--- +title: "$viewChannelVars" +--- + +View a list of all the variables that are defined for a specific channel, and search for specific variables using a regular expression query filter + +## Usage + +```cc +$viewChannelVars[Channel ID (default: $channelID);Separator;Query Regex (optional)] +``` + +### Example: + + +!!exec $viewChannelVars

+
+ +ticket, ticket_owner, staff

+
+
+ +### Example (return only variables that starts with ticket): + + +!!exec $viewChannelVars[$channelID; ,;^ticket]

+
+ +ticket, ticket_owner + +
\ No newline at end of file diff --git a/content/docs/(functions)/Variables/viewServerVars.mdx b/content/docs/(functions)/Variables/viewServerVars.mdx new file mode 100644 index 00000000..3dc39b9b --- /dev/null +++ b/content/docs/(functions)/Variables/viewServerVars.mdx @@ -0,0 +1,40 @@ +--- +title: "$viewServerVars" +--- + +View a list of all the variables that are defined for the server, and search for specific variables using a regular expression query filter + +## Usage + +```cc +$viewServerVars[Separator;Query Regex (optional)] +``` + +### Example: + + +!!exec $viewServerVars

+
+ +level1_xp, names, staffs, level2_xp, level3_xp, level1_reward

+
+ + +!!exec $viewServerVars[/]

+
+ +level1_xp/names/staffs/level2_xp/level3_xp/level1_reward

+
+ + +
+ +### Example (return only variables that starts with level): + + +!!exec $viewServerVars[, ;^level]

+
+ +level1_xp, level2_xp, level3_xp,level1_reward + +
diff --git a/content/docs/(functions)/Variables/viewUserVars.mdx b/content/docs/(functions)/Variables/viewUserVars.mdx new file mode 100644 index 00000000..5d70fabd --- /dev/null +++ b/content/docs/(functions)/Variables/viewUserVars.mdx @@ -0,0 +1,34 @@ +--- +title: "$viewUserVars" +--- + +View a list of all the variables that are defined for a specific user + +## Usage + +```cc +$viewUserVars[User ID;Separator (optional);Query Regex (optional)] +``` + +### Example: + + +!!exec $viewUsersVars[$authorID]

+
+ +xp, money, bonus, xp-global + + +!!exec $viewUsersVars[$authorID;/]

+
+ +xp/money/bonus/xp-global + + +!!exec $viewUsersVars[$authorID;/;xp]

+
+ +xp/x-global + + +
diff --git a/content/docs/(functions)/meta.json b/content/docs/(functions)/meta.json new file mode 100644 index 00000000..119eccfe --- /dev/null +++ b/content/docs/(functions)/meta.json @@ -0,0 +1,34 @@ +{ + "title": "Functions", + "pages": [ + "Member", + "Channel", + "Message", + "Interaction", + "Threads", + "Role", + "Server", + "Random", + "Text", + "./Text/Condition", + "Stickers", + "Events", + "Timeout", + "./Text/Embed", + "./Text/Components", + "./Text/Math", + "./Text/textSplit", + "./Text/Array", + "./Text/Object", + "./Text/isandhas", + "./Text/only", + "./Text/Regex", + "Date", + "Variables", + "Bot", + "Useful", + "Cooldown", + "Request", + "Image" + ] +} diff --git a/content/docs/Changelogs/1.v1.mdx b/content/docs/Changelogs/1.v1.mdx new file mode 100644 index 00000000..c1954340 --- /dev/null +++ b/content/docs/Changelogs/1.v1.mdx @@ -0,0 +1,54 @@ +--- +title: "v1.x (Current)" +--- + +## v1.6.0 (Beta) +> Release Date: TBD +#### ✨ Improvements + +* Support for combined duration expressions in `$parseTime` (e.g. `1h30m` and `1h 30m`). +* Support for specifying the output unit in `$parseTime` (`ms`, `s`, `m`, `h`, `d`, `w`, `M`, `y`). +* New trigger for upvoting with a referral link, [learn more here](/Trigger/upvote). +* New functions `$upvoteTime` and `$upvoteReferralUserID` for the new upvote trigger. +* Added a **Custom** option for Custom Bot status (Tier 4+) in **Dashboard > Premium**. +* Improved the Word Trigger UI with more intuitive options such as **Starts With**. New commands use the updated system while maintaining backward compatibility. +* Support for Forwarded Messages in the new Word Trigger. +* Support for User Mention/Ping in the new Word Trigger. +* `$msg` now supports forward-related options such as `isforward`, `forwardmsgid`, `forwardsvid`, and `forwardchid`. +* `$message` now returns the forwarded message content when the message is a forwarded message. +* New trigger for User Commands (Context Menu), [learn more here](/Trigger/app_cmd_user). +* New trigger for Message Commands (Context Menu), [learn more here](/Trigger/app_cmd_message). +* New function `$eventTargetID` to retrieve the User ID or Message ID for the new User Command and Message Command triggers. +* For testing purposes, the `emit` command now supports the Upvote event. Use `[prefix]emit upvote`. +* `$viewServerVars`, `$viewUserVars`, `$viewChannelVars` query significant speed optimization (100x speed for some servers). +* Slash command support is now available for some native commands, such as clone. These slash commands are available on the main bot only. +* `$userLeaderboard` and `$userVarRank` now uses clearer sorting names to avoid confusion. Sorting options are now `highest-first` and `lowest-first`. +* `$includeLibrary` respects the status of the included library; disabled libraries cannot be included. +* Added support for **default parameter values** in custom functions defined by `$function` using the `param=default` syntax. +* Added `$botPrefix`, which returns the current bot prefix used for native commands, including custom bot prefixes configured in the dashboard. +* Updated `$changeNickname` to support resetting nicknames and optional audit-log reasons. +* Added `primaryHex`, `secondaryHex`, and `tertiaryHex` properties to `$role` for retrieving role gradient colors in hexadecimal format. +* Added `$hasUpvoted` to check whether a user has upvoted the current server within the last 12 hours. +* Added `$onlyForUpvoters` to restrict command execution to users who have upvoted the current server within the last 12 hours. +#### 🐛 Fixes +* `$serverCount` and `$allMembersCount` return the correct numbers for custom bots (Tier 3+) +* Fix for message fails to edit if used some curl message like \{color} inside `$editIn` +* Poll Update Trigger, was not triggering properly. +* In `$msg` if trying to use `component` option and the message has a button with empty text (just emoji), it failed. +* Custom bots (Tier 4+) with a status other than Online were not being set correctly. Custom bots will now properly follow the status configured in the dashboard. + +## v1.5.0 (Main) +> Release Date: 26 July 2026 +#### ✨ Improvements + +* Increased **referral vote reward** from **0.4 → 0.5 credits**. +* Added the new **`!!ping`** command to check bot latency for public use. +* Refreshed the UI for **`!!debug`**, **`!!info`**, **`!!help`**, and **`!!commands`**. + +#### 🐛 Fixes + +* Fixed **`$newTicket`** not adding the user to newly created ticket channels. + +#### 📚 Changes + +* Removed **`!!doc`**. Use **`!!func`** to search the documentation instead. \ No newline at end of file diff --git a/content/docs/Changelogs/meta.json b/content/docs/Changelogs/meta.json new file mode 100644 index 00000000..8f1fcfa9 --- /dev/null +++ b/content/docs/Changelogs/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Changelogs", + "pages": ["..."] +} diff --git a/content/docs/Changelogs/v1.4.4.mdx b/content/docs/Changelogs/v1.4.4.mdx new file mode 100644 index 00000000..f9b6d493 --- /dev/null +++ b/content/docs/Changelogs/v1.4.4.mdx @@ -0,0 +1,1087 @@ +--- +title: "V1.4.4" +--- + +### New + + + + + +An easy user-friendly way to mention a role or a channel with name or id. + +Example +```cc +$mentionRole[Member] +$mentionChannel[updates-beta] +``` + + + + + + + + +You can now use \{removebutton} and \{removemenu} to remove a menu/button while editing a message content with curl + +Usage +``` +{removebutton:id} to remove a button with specific id +{removebutton} to remove all buttons + +{removemenu:id} to remove a menu with specific id +{removemenu} to remove all menus +``` + +Example +```cc +$editMessage[ +my new content +{removebutton} +] +``` + + + + + + + + +Will help you to remove specific embed from a message or all embeds of a message. + + +Usage +```cc +$removeEmbed[Channel ID;Message ID;Embed Number (or all)] +``` + +Example (Remove all embeds of a message) +```cc +$removeEmbed[$channelID;$messageID;all] +``` + + + + + + + + + +This command is mainly to brief you some basic information, that staff might request such as: +* Cluster +* Tier +* Server ID +* Record of recent executions +> you can see it with `[prefix]debug` + +![](https://i.imgur.com/SQWCm0z.png) + + + + + + + +it will convert the number to it's verbal equivalents i.e 5 to five + +![](https://i.imgur.com/aYHQy2C.png) + + + + + + + +You can use the new menu types supported by discord which are: `user, role, mention, channel` +In addition to the default `text` type + +##### User Menu Type +This menu, allow the user to pick a user from the server + +##### Role Menu Type +This menu, allow the user to pick a role from the server + +##### Mention Menu Type +This menu, allow the user to pick anything mentionable such as user or channel from the server + +##### Channel Menu Type +This menu, allow the user to pick a channel (or category) from the server + +#### How to set the type +In curl format you can use `{type:the menu type}` like `{type:user}` + +##### Example +As shown in the image +![](https://i.imgur.com/X4tHvig.png) + + + + + + + + +a new image builder function, where it crop a loaded image. + +##### Usage +```cc +$imageCrop[image name;offset x;offset y;width;height] +``` + +![](https://i.imgur.com/xT1US6y.png) + + + + + + +other than %all%, a new new useful tags like %has_attachment% were added. + +##### What is a tag? +In word trigger, you can use special word %tag% like %all% to trigger for all messages. +now i added a new ones that might be useful sometimes. +##### Has attachment tag +if you used %has_attachment% tag, the word trigger, will only trigger when a message contains any kind of attachments + +##### automod action tag +if you used %automod_action% tag, it will only trigger for discord automod system message when user is caught + +##### pinned tag +if you used %pin% tag, it will only trigger for pinned discord system message + +##### Thread created tag +if you used %thread_created% tag, it will only trigger for thread created discord system message + +##### has poll tag +if you used %has_poll% tag, it will only trigger when user send a poll + + + + + + +This function will help you get info about message poll, like question, answers, votes and so on. + +You can read about it [here](/Message/poll) + + + + + + + +This new trigger is related to any poll updates like: when poll ends + +![](https://i.imgur.com/TtG6aUD.png) +![](https://i.imgur.com/b1h1gLu.png) + + + + + + +This new curl name, will help you send a new poll + +##### Structure +``` +{poll: + {question=poll question} + {duration=poll duration in hours like 24h} + {multiple=can user select multiple answers? (yes/no)} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + ... +} +``` + +##### Example +```cc +$sendMessage[ +{poll: +{question=What is the biggest country in the world?} +{answer=China} +{emoji=🇨🇳} +{answer=Russia} +{emoji=🇷🇺} + +{duration=1h} +{multiple=no} +} +] +``` + +#### Output +![](https://i.imgur.com/Y25DJFG.png) + + + + + + +This new trigger will help you detect some useful actions of events like: when it starts/ends/created/cancelled + +![](https://i.imgur.com/wFt7Pvx.png) +![](https://i.imgur.com/MYlINsO.png) + + + + + + +This function gonna help you know which invite method and code the user used to join the server, it uses member search behind the scene to retrieve the value. + +#### Usage +```cc +$memberJoinedCode[User ID;Info Type] +``` + +#### Info Type +You can pick from `code, code_url, type, inviter` +> **code** and **code_url**, return the invite code or invite link if exists + +> **type** will return the method of joining, it will be usually from `bot-invite, integration, discovery, student-hub, invite-link, invite-link-custom, manual-verification` or unknown + +> **inviter** will return the person who invited the user (if exists) + + +#### Example +```cc +$memberJoinedCode[$userID;code] +``` + +#### Output +``` +XABCDEF +``` + + + + + + +This function allows you to pause invites/DMs for the server for a period of time (up to you). + +#### Usage +```cc +$securityPause[Duration of Pause (i.e 2h);Pause Invite (Yes/No);Pause DM (Yes/No)] +``` + +##### Example (Pause invites for 24 hours) +```cc +$securityPause[24h;yes;no] +``` + +##### Example (Pause DMs for 12 hours) +```cc +$securityPause[12h;no;yes] +``` + +##### Example (Pause invites and DMs for 24 hours) +```cc +$securityPause[24h;yes;yes] +``` + +> Note: Max Pause Duration is 24h + + + + + + +This function allows you, to search for a member if his username/nickname started with a query. it does not rely on cache and instead use discord api. + +#### Usage +```cc +$memberSearch[Query;Amount to Return;separator;info to return] +``` + +##### Info To Return: +By default it is `id`, but you can pick from: +* `id`: to return the found user id +* `username`: to return the found user's username +* `nickname`: to return the found user's nickname in the server +* `name`: to return the found user's display name in the server +> You can also use combination of them, like `name (id)` + +> You can know more information about the user with the use of `$user` + +##### Amount to Return: +It determines how many users it will return if they match the query, by default it is 1 +> When multiple user returned, they will merged together with the `separator` + + + + + + +Added `displayname` property, that will help you know the user display name if exists + +##### Usage +```cc +$user[12345678987654321;displayname] +``` + +> This is not equal to $displayName, as $displayName take user nickname in your server into account. + + + + + + +A new font named `Minecraft` was added to the image builder, this font is useful for game fonts that is a bit pixelated. + + + + + + +Discord added V2 components that enhance the way embeds looks (Check the image). + +So added new curl that allow you to shape them when sending a new messsage, here is a example: +```cc +?exec $sendMessage[ +{container: + +{text:Text Inside Container} +{separator} +{gallery: +{image:$userAvatar} +{image:$userAvatar} +} +{row: +{button:BTN1:red::btn1} +{button:BTN2:GREEN::btn2} +} +{menu: +{id=id} +{ph=Menu} +{name=option 1} +{name=option 2} +} +{row: +{button:BTN3:BLUE::BTN3} +} +{text:Another text inside the container} +{section: +{text:A text inside section and thumbnail} +{thumbnail:$userAvatar} +} +{file:file.txt:Whatever} + +{color:Green} +{spoiler:yes} +} +] +``` + +* container (`{container}`) can contain: \{color}, \{spoiler}, \{text}, \{section}, \{gallery}, \{separator}, \{file}, \{button}, \{menu}, \{row} +* section (`{section}`) can contain: \{text}, \{thumbnail}, \{button}, \{spoiler} +* gallery (`{gallery}`) can contain images up to 10 images with \{image} +* row (`{row}`) can contain 5 button or 1 menu +* spoiler (`{spoiler}`) can be used in some components to mark it as spoiler +* separator (`{separator}`) with options \{separator:divider(yes or no):size(1 or 2)} + +> Read more about it [here](/CodeReferences/ref.v2_components) + +![](https://i.imgur.com/hTSCGQU.png) + + + + + + +##### Usage: +```cc +$modal[... +{input: +{type=menu} +{subtitle=a description of the menu} +...support menu curl +} +``` + +##### Example: +```cc +$modal[ +{title=Application} +{id=modal_id} +{input= + {name=What is your name} + {subtitle=i.e in-game name} + {ph=Man of Culture} + {id=name} +} +{input= + {type=menu} + {name=Which role you want to be in?} + {id=role} + + {option=Swordman} + {emoji=:crossed_swords:} + + {option=Healer} + {emoji=:mending_heart:} + + {option=Tanker} + {emoji=:shield:} +} +] +``` + +![](https://i.imgur.com/2iDvQ4A.png) + + + + + + +when sending a menu with curl, you can specify the selected options by default (it will be useful for the modal menu) + + +##### Usage: +``` +{menu: +...normal menu structure + +{selected=option id} +{selected_user=user id (useful for menu type user or mention)} +{selected_role=role id (useful for menu type role or mention)} +{selected_channel=channel id (useful for menu type channel)} +} +``` + +##### Example: +```cc +$sendMessage[ +{menu: +{id=menu_id} +{type=user} +{ph=Select the user} +{selected_user=$userID} +} +] +``` + + + + + + +You can now forward a message from a channel to another. + +##### Usage: +``` + +$forwardMessage[Source Channel ID;Source Message ID;Target Channel ID;Return Message ID (yes/no)] +``` + + +##### Example: +```cc +$forwardMessage[$channelID;$messageID;Another Channel] +``` + + + + + + +You can add other types of menus like user selection in the modal + +##### Usage: +```cc +$modal[... +{input: +{type=user/role/channel/mention} +{desc=a description of the menu} +{required=yes/no} +{selected=user id/role id/channel id} // for user/role/channel menus + +// for mention menu +{selected_user=user id} +{selected_role=role id} + +} +``` + +##### Example: +```cc +$modal[ +{title=Report Application} +{id=modal_id} +{input= + {name=Description} + {ph=i.e description of the report} + {id=desc} +} +{input= +{type=user} +{name=Which user you want to report?} +} +] +``` + +![](https://i.imgur.com/LnZt5B7.png) + + + + + + +An update in $user, to allow you to get the equipped clan tag of the user, in addition to the icon and the server where it is originated from. + +##### New options +`clantag`: get the equipped user clan tag, like `TOP` +`clantagicon`: get the tag icon +`clantagserver`: get the tag server id + +##### Example +```cc +$user[1234567;clantag] +``` + +![](https://i.imgur.com/tcNhcDv.png) + + + + + + +You can now ask the user to upload a file in the modal + +##### Usage: +```cc +$modal[... +{input: +{type=attachment} +{name=The input name} +{id=The input id} +{subtitle=a description for the input} +{required=yes/no} +{min=Min amount of files (1-10)} +{max=Max amount of files (1-10)} +} +``` + +##### Example: +```cc +$modal[ +{title=Report Application} +{id=modal_id} +{input= + {name=Description} + {ph=i.e description of the report} + {id=desc} +} +{input= + {type=user} + {id=target} + {name=Which user you want to report?} +} +{input= + {id=proof} + {type=attachment} + {name=Upload Picture or Proof if exist} + {required=no} +} +] +``` + +![](https://i.imgur.com/LPEkezb.png) + + + + + + + +You can now natively add interactive **Radio Groups** (select one option) and **Checkbox Groups** (select multiple options) directly inside your modals! + +##### Usage: + +```cc +$modal[... +{input: + {type=radio/checkbox} + {name=The input name} + {id=The input id} + {subtitle=a description for the input} + {required=yes/no} + {min=Minimum required choices (0-10) [Checkbox only, default: 1]} + {max=Maximum allowed choices (1-10) [Checkbox only, default: all options]} + + {option=Option Label 1} + {value=option_value_1} + {option=Option Label 2} + {value=option_value_2} +} + +``` + +> ⚠️ **Limits:** Radio groups require between **2 to 10** options. Checkbox groups require between **1 to 10** options. + + +##### Example: + +```cc +$modal[ +{title=Report Application} +{id=modal_id} +{input= + {name=Description} + {ph=i.e description of the report} + {id=desc} +} +{input= + {type=user} + {name=Which user you want to report?} +} +{input= + {type=attachment} + {name=Upload Picture or Proof if exist} + {required=no} +} +{input= + {type=radio} + {id=report_type} + {required=no} + {name=Type of Report} + {subtitle=Specify which type is this report} + + {option=Staff Violation} + {value=staff} + + {option=Server Rules Violation} + {value=server} + + {option=Spam or Fraud} + {value=spam} +} +] + +``` + +#### Output For Checkbox +![](https://i.imgur.com/QjBEo7E.png) + +#### Output For Radio +![](https://i.imgur.com/kfjr5lQ.png) + + + + + + + + +Return the global name of a user using $globalName or $user + +##### Usage +```cc +$globalName[User ID] + +Or + +$user[User ID;globalname] +``` + + + + + +### Update + + + + +This function was completely unusable and produce error on use, now it was fixed + +##### New options +Added alias in options: +* userid > author +* description > desc + + + + + + + + +added `separator` input for it, to return all numbers with certain separator + +**Example** +```cc +$findNumbers[my name is mido, i'm 999 years old, living in the 1000th floor in heaven building.;, ] +``` + +**Output** +``` +999, 1000 +``` + + + + + + + +You can use user mention as acceptable user input for functions such as $giveRoles + +Example +```cc +$giveRoles[$mention;Role name] +``` +will work as expected + + + + + + + +A new input added to the function called `command token`, it allows you to specify which command cooldown you want to retrieve, instead of the running command + +New Usage +```cc +$getCooldownTime[time (i.e 5m);type (i.e user);id (i.e 123456);token (i.e xGhkd)] +``` + + + + + + + + + + + + + + + +Now in expression, when comparing between two values with `==` or `!=`, it will compare it after triming the spaces around the values, if you want to compare without trimming use `===` or `!==`. + +Example: +``` +A == A (true) +A === A (false) +``` +> This change applies for any function that expect expression such as $if, $checkCondition.. + +![](https://i.imgur.com/kaYAsa9.png) + + + + + + + +Added two new permissions to the list: +* sendvc: allow user to send voice message +* usesoundboard: allow user to use sound board +* sendpolls: Allows sending polls +* createexpression: Allows for creating emojis, stickers, and soundboard sounds +* createevent: Allows for creating scheduled events +* viewcreatormonetization: View creator monetization page +* useexternalsounds: Allow use for sounds outside the server +* useexternalapps: Allow user to use external apps in your server. +* pinmessages: Allows pinning and unpinning messages +* bypassslowmode: Allows bypassing slowmode restrictions +* setvcstatus: Allows setting voice channel status +* manageexpression: alias for `manageemoji`, Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users + + + + + + +Added a new optional input: `Command Token` +Allows you to clear another command token instead of the running one + +New Usage +```cc +$clearCooldown[type;id;token] +``` + + + + + + + +`Mention Number` input accept `all` as input, which means return all mentioned users with `, ` as separator + +Example +```cc +$mentioned[all] +``` + +Output +``` +id1, id2, id3 +``` + + + + + + + + + +Added `post name` as input, if you would like to create a post inside a forum using the webhook + +Example +```cc +$sendWebhook[Webhook ID;Webhook Token;Your message content;;;;;Post name] +``` + + + + + + + + + +Added `Delete After` input, if you would like to wait a certain amount of time before deleting the message + +#### Example +```cc +$deleteCommand[5m] +``` + + + + + + + +Added an input to control if you would like to skip deleting pinned messages or not. + +#### Example +```cc +$clear[amount;userid;channel;skip pinned messages (yes/no)] +``` + + + + + + +Added `rtc region` as input to get/set information about voice channel RTC region. + + +##### RTC regions +By default it set to `auto` where discord pick the best region for the vc, but you can specify it to: +``` +auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west +``` + +> You can find the usage in the functions: `$channel`, `$editChannel`, `$createChannel` + + + + + + + +You can now use UTC+HH:MM or UTC-HH:MM format inside $timezone in case you want a custom timezone offset. + +##### Example +```cc +Before: $hour +$timezone[UTC+03:00] +After: $hour +``` + +![](https://i.imgur.com/d2tQMJ2.png) + + + + + + +added `color_hex` property to get the color as hex instead of integer. + +##### Example +```cc +$getEmbed[$channelID;12345;color_hex] +``` + +##### Output +``` +#c133ff +``` + + + + + + +It behaved same as $displayName, so we added new option to control if you would like to return the display name if nickname is not set or not, by default it will return the display name. + + +##### Usage +```cc +$nickname[User ID;Return Display name if no nickname set (yes/no, default is yes)] +``` + + + + + + +This new curl name, will help you to remove field(s) from your embed + +##### Structure +``` +Remove all fields +{removefields} + +Remove specific fields +{removefields:field number1:field number2:...} +``` + +##### Example +```cc +$editEmbed[$channelID;$messageID;{removefields}] +``` + + + + + + +added a new optional option to set the separator of the returned list of numbers, by default it is space + +##### Usage +```cc +$seq[Start;Stop;Step;Separator (default ' ')] +``` + + + + + + +$colorRole and $role functions were updated to support the new gradient colors of the role + +##### Usage: +``` +// modify role color +$colorRole[Role name;Primary Color;Second Color (optional);Third Color (optional)] + +// get role color +$role[Role name;primaryColor] +$role[Role name;secondColor] +$role[Role name;ThirdColor] +``` + + +##### Example: +```cc +$colorRole[Admin;green;red] +``` + + + + + + +You can see the message components in form of curl property `components` in $msg + +##### Usage: +```cc +$msg[channel ID;message ID;components] +``` + + +##### Example: +![](https://i.imgur.com/QAkhwPm.png) + + + + + + +The description of the menu in a modal changed from `{desc}` to `{subtitle}`. +So it does not conflict with the option's `{desc}` + +the original update, was modified as well to reflect that change. + + + + + + +You can get the voice channel user limit using `limit` in $channel +it will return 0 when there is no limit. + +##### Example +```cc +$channel[1234567;limit] +``` + + + + + + +the function will show more details about the embeds and the attachments of a message +as of now, the text will be not be rendered in markdown, in the future it will be further beautified. + +![](https://i.imgur.com/y9tGjzI.png) +![](https://i.imgur.com/MPLHWWA.png) + + + + + + +Now you can use `!!emit timed ` to emit timed events (that was created with $setTimeout or in dashboard) + + + +### Fix + + + + +using `{image:$imageOutput}` inside `{embed}` is now fixed and should show as usual. + + + + + + + +When a key is `undefined` it breaks the object and return invalid values. + + + + + + + +when it errors when user has no global name set, it will return display name instead. + + + + + + +Previously setting position to 0 in $editChannel does not set the channel position at top. +Now it will work as intended. + + + \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.channel_types.mdx b/content/docs/CodeReferences/ref.channel_types.mdx new file mode 100644 index 00000000..5e4ac1b9 --- /dev/null +++ b/content/docs/CodeReferences/ref.channel_types.mdx @@ -0,0 +1,53 @@ +--- +title: "Understanding Channel Types" +--- + +Several functions, like `$channelType` and `$channelCount`, require you to specify a channel type. This page outlines the available channel types and provides an example of their usage. + +### Available Channel Types: + +Here's a list of the currently supported channel types: + +* `text`: Standard text channels. +* `dm`: Direct Message channels (one-on-one conversations). +* `voice`: Voice channels. +* `dm_group`: Group Direct Message channels (multiple users in a DM). +* `category`: Channel categories used to organize channels. +* `news`: Announcement channels for server updates (formerly known as "announcement" channels). +* `store`: Channels used for selling products within Discord (deprecated). +* `thread_news`: Threads within news channels. +* `thread_public`: Public threads within text channels. +* `thread_private`: Private threads within text channels. +* `post`: Forum post channel type. +* `forum`: Forum channel type. +* `stage`: Stage channels for audio and video broadcasting. + +### Example Usage +```cc +$channelType +``` in a Public Thread + +This example demonstrates how `$channelType` returns the type of the current channel. + +#### Scenario: + +We'll use the `$channelType` function inside a **public thread**. + +#### Code: + +```cc +!!exec $channelType +``` + +#### Result: + + + +!!exec $channelType + + +thread_public + + + +**Tags:** diff --git a/content/docs/CodeReferences/ref.embed.colors.mdx b/content/docs/CodeReferences/ref.embed.colors.mdx new file mode 100644 index 00000000..60ea4dbb --- /dev/null +++ b/content/docs/CodeReferences/ref.embed.colors.mdx @@ -0,0 +1,67 @@ +--- +title: "Acceptable Embed Colors" +--- + +### Name List: +| Name | Equivalent Hex | +|:-----------:|:-------------:| +| Default | #000000 | +| White | #ffffff | +| Aqua | #1abc9c | +| Green | #57f287 | +| Blue | #3498db | +| Yellow | #fee75c | +| Purple | #9b59b6 | +| LuminousVividPink | #e91e63 | +| Fuchsia | #eb459e | +| Gold | #f1c40f | +| Orange | #e67e22 | +| Red | #ed4245 | +| Grey | #95a5a6 | +| Navy | #34495e | +| DarkAqua | #11806a | +| DarkGreen | #1f8b4c | +| DarkBlue | #206694 | +| DarkPurple | #71368a | +| DarkVividPink | #ad1457 | +| DarkGold | #c27c0e | +| DarkOrange | #a84300 | +| DarkRed | #992d22 | +| DarkGrey | #979c9f | +| DarkerGrey | #7f8c8d | +| LightGrey | #bcc0c0 | +| DarkNavy | #2c3e50 | +| Blurple | #5865f2 | +| Greyple | #99aab5 | +| DarkButNotBlack | #2c2f33 | +| NotQuiteBlack | #23272a | +| Transparent | #2b2d31 | +| Trans | #2b2d31 | +| Random | A random color from #000000 to #ffffff | + +### Hex +It can also accept hex colors like `#1abc9c` + +### Example 1 + + +!!exec $sendMessage[
\{desc:You are awesome}
\{color:Aqua}
] +
+ + +You are awesome + + +
+ +### Example 2 + + +!!exec $description[You are awesome}]
$color[#0099ff] +
+ + +You are awesome + + +
diff --git a/content/docs/CodeReferences/ref.expression.mdx b/content/docs/CodeReferences/ref.expression.mdx new file mode 100644 index 00000000..f1496a55 --- /dev/null +++ b/content/docs/CodeReferences/ref.expression.mdx @@ -0,0 +1,104 @@ +--- +title: "Expressions" +--- + +## Why Use Expressions? + +Some functions, like the incredibly useful `$if` function, require an expression as input. Expressions allow you to create dynamic and conditional logic within your scripts. + +## What is an Expression? + +At its core, an expression compares a left-hand side to a right-hand side using an operator. The operator dictates the type of comparison being made. + +``` +Left-Side [Operator] Right-Side +``` + +Here's a breakdown of the available operators: + +| Operator | True When | Description | +| -------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `==` | left-side is equal to right-side | Checks for equality. Both values are compared after normalizing whitespace (leading and trailing spaces are ignored). | +| `===` | left-side is exactly equal to right-side | Checks for exact equality. Values must match exactly, including any leading or trailing whitespace. | +| `!=` | left-side is not equal to right-side | Checks for inequality. Both values are compared after normalizing whitespace (leading and trailing spaces are ignored). | +| `!==` | left-side is not exactly equal to right-side | Checks for exact inequality. Values are considered different if they do not match exactly, including any leading or trailing whitespace. | +| `>` | left-side is greater than right-side (numeric) | Left-side is numerically greater than the right-side. | +| `>=` | left-side is greater than or equal to right-side (numeric) | Left-side is numerically greater than or equal to the right-side. | +| `<` | left-side is less than right-side (numeric) | Left-side is numerically less than the right-side. | +| `<=` | left-side is less than or equal to right-side (numeric) | Left-side is numerically less than or equal to the right-side. | +| `&&` | left-side is true **and** right-side is true | Logical AND. Both sides must evaluate to `true`. | +| `\|\|` | left-side is true **or** right-side is true | Logical OR. At least one side must evaluate to `true`. | + +**Example:** + +```cc +$username==Mido +``` + +In this expression: + +* **Left-side:** `$username` +* **Right-side:** `Mido` +* **Operator:** `==` + +This expression evaluates to `true` *only* if the value of the variable `$username` is equal to `Mido`. + +## Combining Multiple Expressions + +Often, you'll need to create more complex conditions by combining multiple expressions. This is where the `&&` (AND) and `||` (OR) operators become essential. + +### Example 1: Using AND (`&&`) + +```cc +$username==Mido&&$country==Egypt +``` + +This expression consists of two separate conditions: + +1. `$username==Mido`: The username must be equal to "Mido". +2. `$country==Egypt`: The country must be equal to "Egypt". + +The `&&` operator means that *both* condition 1 *AND* condition 2 must be true for the entire expression to evaluate to `true`. + +### Example 2: Using OR (`||`) + +```cc +$username==Mido||$country==Egypt +``` + +This expression also consists of two separate conditions: + +1. `$username==Mido`: The username must be equal to "Mido". +2. `$country==Egypt`: The country must be equal to "Egypt". + +The `||` operator means that *either* condition 1 *OR* condition 2 (or both) must be true for the entire expression to evaluate to `true`. + +## Grouping Expressions with Parentheses + +For advanced scenarios, you may need to control the order in which expressions are evaluated. Use parentheses `()` to group conditions and ensure they are evaluated as a unit *before* other operations. This is similar to how parentheses work in mathematical equations. + +### Example 1: Complex AND/OR Grouping + +```cc +($username==Mido&&$country==Egypt)||($username==Rake&&$country==Germany) +``` + +This expression combines AND and OR operators with grouping: + +1. `($username==Mido&&$country==Egypt)`: The username is "Mido" AND the country is "Egypt". +2. `($username==Rake&&$country==Germany)`: The username is "Rake" AND the country is "Germany". + +The entire expression evaluates to `true` if either group 1 *OR* group 2 is true. + +### Example 2: Nested OR Grouping + +```cc +$username==Mido||($country==Egypt||$country==Masr) +``` + +This example uses nested parentheses with OR operators: + +1. `$username==Mido`: The username is "Mido". +2. `($country==Egypt||$country==Masr)`: The country is "Egypt" OR the country is "Masr". + +The expression is `true` if the username is "Mido" OR if the country is either "Egypt" or "Masr". \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.imgbuild.position.mdx b/content/docs/CodeReferences/ref.imgbuild.position.mdx new file mode 100644 index 00000000..34fe2959 --- /dev/null +++ b/content/docs/CodeReferences/ref.imgbuild.position.mdx @@ -0,0 +1,88 @@ +--- +title: "Image Builder: Positioning Elements" +--- + +Positioning images and objects is a crucial step in building your images. Position is defined by two values, X and Y, which determine the object's location on the canvas. + +## Origin + +The X and Y origin starts at the **top-left corner** of the canvas. This means: + +* `[X=0, Y=0]` is the top-left corner. +* `[X=Width, Y=0]` is the top-right corner. +* `[X=0, Y=Height]` is the bottom-left corner. +* `[X=Width, Y=Height]` is the bottom-right corner. + +![](https://i.imgur.com/o0Ws1LM.png) + +## Example 1: Filling a Rectangle + +Let's use the `$imageFill` function as an example, which requires the position of the filled rectangle. We'll start by positioning a 100x100 rectangle at `[X=0, Y=0]`: + +![](https://i.imgur.com/uWY7dcm.png) + +### Centering the Rectangle (Attempt 1) + +To center the filled rectangle, we might try placing it at X equal to half the canvas width, and Y equal to half the canvas height: + +![](https://i.imgur.com/iSAQv14.png) + +**Problem: That doesn't look centered! Why?** + +**Answer:** You're right! By default, X and Y represent the position of the **top-left** corner of the object. Therefore, placing the *corner* at the center doesn't center the entire rectangle. + +To fix this, we need to offset the position by half the rectangle's width and height. + +### Centering the Rectangle (Corrected) + +Here's the corrected version: + +![](https://i.imgur.com/Ea6uGKA.png) + +> Yay! Now it's centered. + +## Position Base: Changing the Origin Point + +By default, X and Y represent the top-left corner of the object. But what if we want to use a different point as the reference? For example, in the previous example, we had to perform extra calculations to center the box because we were working with the top-left corner. + +### $imagePositionBase + +The `$imagePositionBase` function allows us to change the origin point used for positioning. + +Its usage is: + +```cc +$imagePositionBase[Base] +``` + +> Where `Base` can be one of the following: `top`, `topleft`, `topright`, `center`, `centerleft`, `centerright`, `bottom`, `bottomleft`, `bottomright`. + +### Example 2: Rewriting Example 1 with `$imagePositionBase` + +Let's rewrite Example 1, but this time we'll make X and Y represent the *center* of the box by specifying `Base` as `center`: + +![](https://i.imgur.com/PsCAkLz.png) + +### Did you notice `width/2` and `height/2`? Introducing Placeholders + +You might be wondering if there are more user-friendly names, like `width` and `height`, that can be used in position calculations. The answer is YES! We call them **Placeholders**. + +## Position Placeholders + +Placeholders simplify positioning by providing convenient ways to refer to canvas dimensions and center points. + +| Placeholder | Description | +| :----------: | --------------------------------------------------------------------------------------------------- | +| `width` | The width of the canvas. | +| `height` | The height of the canvas. | +| `centerx` | The horizontal center of the canvas (equivalent to `width/2`). | +| `centery` | The vertical center of the canvas (equivalent to `height/2`). | +| `center` | If used in the X position, it's equivalent to `centerx`; if used in the Y position, it's `centery`. | +| `w` | Alias for `width`. | +| `h` | Alias for `height`. | + +## Example 3: Even Simpler Centering + +Now we can use `center` instead of `width/2` and `height/2`, making our code even cleaner: + +![](https://i.imgur.com/vTFbagw.png) \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.imgbuild.size.mdx b/content/docs/CodeReferences/ref.imgbuild.size.mdx new file mode 100644 index 00000000..c9ac728a --- /dev/null +++ b/content/docs/CodeReferences/ref.imgbuild.size.mdx @@ -0,0 +1,69 @@ +--- +title: "Image Builder: Understanding Size" +--- + +Sizing is crucial for determining the dimensions of objects and images within your canvas. This document explains how size works in our image builder functions. + +## Introduction + +The `Size` parameter in our functions is defined by two key components: **Width** and **Height**. Both values are measured in pixels, must be non-negative, and start from 0. + +## Example 1: Filling a Rectangle + +Let's start with a simple example using the `$imageFill` function, which requires the size of the rectangle to be filled. We'll begin with a rectangle with `Width=100` and `Height=100`. + +```cc +$imageFill([x=0, y=0, width=100, height=100, color=blue]) +``` + +![](https://i.imgur.com/uWY7dcm.png) + +### Scaling Up + +Increasing the `Width` and `Height` proportionally scales the rectangle. Let's try `Width=200` and `Height=100`: + +```cc +$imageFill([x=0, y=0, width=200, height=100, color=blue]) +``` + +![](https://i.imgur.com/9DG1ubq.png) + +## Example 2: Drawing the Polish Flag + +Let's create two rectangles (White and Red) to construct a simple representation of the Polish flag. + +```cc +$imageFill([x=0, y=0, width=width, height=height/2, color=white]) +$imageFill([x=0, y=height/2, width=width, height=height/2, color=red]) +``` + +![](https://i.imgur.com/ByyKJkr.png) + +### Using Placeholders: `w/2` and `h/2` + +Did you notice `width/2` and `height/2` in the code above? These are placeholders that provide dynamic sizing based on the canvas dimensions. The next section will detail all available placeholders. + +## Size Placeholders + +These placeholders allow you to dynamically determine the size of elements based on the canvas dimensions. + +| Placeholder | Description | +|:-----------:|---------------------------------------------------------------------------------------------------| +| `width` | The width of the canvas (in pixels). | +| `height` | The height of the canvas (in pixels). | +| `centerx` | The horizontal center of the canvas, equivalent to `width/2`. | +| `centery` | The vertical center of the canvas, equivalent to `height/2`. | +| `center` | In the `x` position, it's an alias for `centerx`. In the `y` position, it's an alias for `centery`. | +| `w` | Alias for `width`. | +| `h` | Alias for `height`. | + +## Example 3: Simplified Flag using `center` + +We can now use `center` to simplify our Polish flag example, making the code more readable: + +```cc +$imageFill([x=0, y=0, width=width, height=centery, color=white]) +$imageFill([x=0, y=centery, width=width, height=centery, color=red]) +``` + +![](https://i.imgur.com/vTFbagw.png) \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.message_curl_format.mdx b/content/docs/CodeReferences/ref.message_curl_format.mdx new file mode 100644 index 00000000..15033752 --- /dev/null +++ b/content/docs/CodeReferences/ref.message_curl_format.mdx @@ -0,0 +1,83 @@ +--- +title: "Message Curl Format" +--- + +Some functions, like `$sendMessage` and `$editMessage`, accept message content as an argument. While you can send plain text, you might want to send a more visually appealing embed instead. + +Message Curl Format allows you to define embed details easily. + +### Usage: ```{info:value}``` + +This format uses curly braces `{}` to define different aspects of your message. The `info` part specifies what you want to set (like the title or description), and the `value` is what you want to set it to. + +### Example + +Here's how to send an embed with the title "Hello" and the description "World": + + + +!!exec $sendMessage[\{title:Hello}\{description:World}] + + + + +World + + + + + +### Available Curl Formats: + +| Curl Format | Description | Example (click to see output) | +|:-----------:|-------------|---------| +| `{content:text}` | to set message content | `{content:Message content}` | +| `{title:text}` | Adds a title to the embed. | [\{title:My name is $username}](https://i.imgur.com/vUfjDLa.png) | +| `{url:link}` | Makes the title a clickable link. | [\{url:https://discord.com}](https://i.imgur.com/k234oP0.png) | +| `{footer:text:url}` | Adds a footer with optional image. The URL is for the footer icon. | [\{footer:You see my small profile?:$authorAvatar}](https://i.imgur.com/MbG9VQ3.png) | +| `{description:text}` | Sets the main text content of the embed. | [\{description:Do you know that this month is $month?}](https://i.imgur.com/BV7wZpY.png) | +| `{desc:text}` | An alias (shorter version) of `{description:text}`. | \{desc:Hello World, do you see this description?} | +| `{color:hex}` | Sets the color of the embed's side border. Use a hex code (like `#ff0000`) or a color name (like `RED`). | [\{color:RED} or \{color:#ff0000}](https://i.imgur.com/f9no81k.png) | +| `{author:text:image url:link url}` | Adds an author section to the embed. You can specify the author's name, an image URL for their avatar, and a URL that the author's name links to. | [\{author:$username:$authorAvatar:$authorAvatar}](https://i.imgur.com/2DU2dwn.png) | +| `{thumbnail:url}` | Adds a small image in the top right corner of the embed. | [\{thumbnail:$authorAvatar}](https://i.imgur.com/HruXoXs.png) | +| `{field:name:value:inline}` | Adds a field (a small section with a title and value). Set `inline` to `true` or `false` (or `yes`/`no`) to make the field appear next to other inline fields. | [\{field:My name:$username}](https://i.imgur.com/zSdpHiW.png) | +| `{removefields:field number 1:field number 2:...}` | remove field(s), leave input empty to remove all fields | \{removefields:1:2} | +| `{timestamp:ms}` | Adds a timestamp to the embed. If you don't provide a value, it uses the current time. You can also provide a specific timestamp in milliseconds. | [\{timestamp} or \{timestamp:1680871946176}](https://i.imgur.com/2CEzTcp.png) | +| `{image:url}` | Adds a large image at the bottom of the embed. | [\{image:$authorAvatar}](https://i.imgur.com/Gmrxc69.png) | +| `{reactions:emoji,emoji2,...}` | Adds reactions to the message after it's sent. Separate multiple emojis with commas. Use the standard Discord emoji format (e.g., `:+1:`). | [\{reactions: :+1:, :-1:}](https://i.imgur.com/Niff1PI.png) | +| `{reaction:emoji,emoji2,...}` | Alias for `{reactions}`. | \{reaction: :+1:, :-1:} | +| `{suppress:yes/no}` | Suppresses the embed for URLs in the message, preventing link previews. | [\{suppress:yes}](https://i.imgur.com/xomAWFd.png) | +| `{delete:time(s/m/h...)}` | Deletes the message automatically after a certain amount of time. Use `s` for seconds, `m` for minutes, `h` for hours, etc. | \{delete:5s} | +| `{button:Name:style:emoji:button id:new line(yes/no):disabled(yes/no)}` | Adds a button to the message. `style` can be `blue`, `green`, `red`, `grey` or a url, `emoji` is optional, `new line` indicates if the button should be in a new line, `disabled` to disable the button | [\{button:Green button:green::id1}](https://i.imgur.com/CIj0FMU.png) | +| `{edit:Time in ms:New Content}` | Edits the message after a specified time (in milliseconds) with new content. | [\{edit:5s:My edited content}](https://i.imgur.com/p7LsT5C.png) | +| `{file:Name:Content}` | Adds an attachment file to the message, using the provided text as the file content. | No example | +| `{attachment:Name:URL}` | Adds an attachment file to the message, fetching the file from the given URL. | No example | +| `{deletecommand}` | Deletes the original command message immediately after the new message is sent. | No example | +| `{deletecommand:time}` | Deletes the original command message after a specified time (e.g., `5s`). | \{deletecommand:5s} | +| `{reply:message id}` | Replies to a specific message using its ID. | No example | +| `{reply_mention:yes/no}` | Determines whether the user being replied to should be mentioned (pinged). | No example | +| `{interaction}` | Sends the message through an interaction (e.g., a slash command). This is often required for ephemeral messages. | No example | +| `{ephemeral:yes/no}` | Sends the message privately to the user who triggered the interaction. Only works if `{interaction}` is enabled. | No example | +| `{private:yes/no}` | Alias for `{ephemeral:yes/no}`. | No example | +| `{stickers:Sticker 1 ID:Sticker 2 ID:Sticker 3 ID}` | Sends stickers using their IDs. | No example | +| `{pin}` | Pins the sent message to the channel. | No example | +| `{silent}` | Sends the message in silent mode, which doesn't send push notifications to Discord users. | [\{silent}](https://i.imgur.com/HhSr6ec.png) | +| `{removebutton:id}` | remove a button with id, empty id will remove all buttons | `{removebutton:mybtnid}` | +| `{removemenu:id}` | remove a menu with id, empty id will remove all buttons | `{removemenu:mybtnid}` | +| `{poll:data}` | add a new poll to the message, learn more about data [here](/CodeReferences/ref.poll_data) | see example [here](/CodeReferences/ref.poll_data) | +| `{container:data}` | add container for discord v2 components. | [see example here](/CodeReferences/ref.v2_components) | + + + + + + + +Sometimes values contain special characters like colons (`:`), square brackets (`[` and `]`), semicolons (`:`), or backslashes (`\`). You need to *escape* these characters by placing a backslash (`\`) before them to prevent unexpected results. For example, to use a colon in your text, you would write `\:`. + +If your original format is: `{author:I love:World}` +Correct is: `{author:I love\:World} ` + + + +**Tags:** diff --git a/content/docs/CodeReferences/ref.message_types.mdx b/content/docs/CodeReferences/ref.message_types.mdx new file mode 100644 index 00000000..e96e1bf7 --- /dev/null +++ b/content/docs/CodeReferences/ref.message_types.mdx @@ -0,0 +1,54 @@ +--- +title: "Understanding Message Types" +--- + +The `$messageType` function is your key to identifying the kind of message you're dealing with. It returns a specific type, allowing you to tailor your bot's behavior accordingly. Think of it as a way to understand the *context* of a message beyond just the text. + +**Why is this useful?** + +Knowing the message type lets you: + +* React differently to system messages versus user-generated content. +* Filter specific events, like new member joins or channel updates. +* Customize responses based on the context of a command execution (e.g., a slash command versus a regular message). + +### Available Message Types + +Here's a breakdown of the message types you might encounter, along with brief explanations: + +* `Default`: A standard text message sent by a user or bot. +* `Recipient Add`: A user was added to a group DM. +* `Recipient Remove`: A user was removed from a group DM. +* `Call`: A call has started or ended (typically voice/video). +* `Channel Name Change`: The name of a channel was changed. +* `Channel Icon Change`: The icon of a channel was changed. +* `Channel Pinned Message`: A message was pinned in the channel. +* `User Join`: A new user joined the server/guild. +* `Guild Boost`: The server/guild received a boost. +* `Guild Boost Tier 1`: The server/guild reached boost level 1. +* `Guild Boost Tier 2`: The server/guild reached boost level 2. +* `Guild Boost Tier 3`: The server/guild reached boost level 3. +* `Channel Follow Add`: A channel was followed (typically in announcement channels). +* `Guild Discovery Disqualified`: The server/guild was disqualified from server discovery. +* `Guild Discovery Requalified`: The server/guild requalified for server discovery. +* `Guild Discovery Grace Period Initial Warning`: A warning about an upcoming disqualification from server discovery. +* `Guild Discovery Grace Period Final Warning`: A final warning before disqualification from server discovery. +* `Thread Created`: A new thread was created in a channel. +* `Reply`: A message that's a reply to another message. +* `Chat Input Command`: A slash command was used (starting with `/`). +* `Thread Starter Message`: The first message in a thread. +* `Guild Invite Reminder`: A reminder about an outstanding guild invite. +* `Context Menu Command`: A command executed from the context menu (right-click). +* `Auto Moderation Action`: An action taken by auto-moderation. +* `Role Subscription Purchase`: A user purchased a role subscription. +* `Interaction Premium Upsell`: A premium upsell related to an interaction. +* `Stage Start`: A stage channel has started. +* `Stage End`: A stage channel has ended. +* `Stage Speaker`: A new speaker was added to a stage channel. +* `Stage Topic`: The topic of a stage channel was changed. +* `Guild Application Premium Subscription`: A premium subscription related to guild applications. +* `Guild Incident Alert Mode Enabled`: Incident alert mode was enabled. +* `Guild Incident Alert Mode Disabled`: Incident alert mode was disabled. +* `Guild Incident Report Raid`: An incident report flagged a raid. +* `Guild Incident Report False Alarm`: An incident report flagged a false alarm. +* `Purchase Notification`: A notification related to a purchase. diff --git a/content/docs/CodeReferences/ref.permissions_list.mdx b/content/docs/CodeReferences/ref.permissions_list.mdx new file mode 100644 index 00000000..c28a70a6 --- /dev/null +++ b/content/docs/CodeReferences/ref.permissions_list.mdx @@ -0,0 +1,79 @@ +--- +title: "Understanding Channel, User, and Role Permissions" +--- + +Several bot functions, such as `$modifyChannelPerms` and `$modifyRolePerms`, require you to specify permission names. This page provides a comprehensive list of these permission names and their descriptions. + +### Available Permissions: + +Here's a breakdown of the permissions you can use: + +* **admin:** Administrator (Grants all permissions) +* **manageserver:** Manage Server (Modify server settings) +* **kick:** Kick User (Remove members from the server) +* **ban:** Ban User (Permanently remove members from the server) +* **manageroles:** Manage Roles (Create, edit, and delete roles) +* **managechannels:** Manage Channels (Create, edit, and delete channels) +* **managewebhooks:** Manage Webhooks (Create, edit, and delete webhooks) +* **managemessages:** Manage Messages (Delete messages, pin messages) +* **viewauditlog:** View Audit Log (See server activity logs) +* **managenicknames:** Manage Nicknames (Change member nicknames) +* **sendmessages:** Send Messages (Send text messages in channels) +* **readmessages:** Read Message History (View past messages in channels) +* **movemembers:** Move Members (Move users between voice channels) +* **manageemojis:** depreciated, use `manageexpression` instead +* **viewguildinsights:** View Guild Insights (Access community analytics) +* **mentioneveryone:** Mention Everyone (@everyone and @here) +* **embedlinks:** Embed Links (Post links with rich previews) +* **viewchannel:** View Channel (See the channel. If set to `false`, the user cannot see the channel) +* **createinvite:** Create Invite (Generate invite links to the server) +* **mutemembers:** Mute Members (Silence users in voice channels) +* **speak:** Speak (Speak in voice channels) +* **deafenmembers:** Deafen Members (Prevent users from hearing in voice channels) +* **attachfiles:** Attach Files (Upload files to channels) +* **connect:** Connect (Join voice channels) +* **addreactions:** Add Reactions (Add reactions to messages) +* **speakpriority:** Speak Priority (Speak uninterrupted in voice channels) +* **ttsmessage:** Send TTS Message (Send text-to-speech messages) +* **externalemoji:** Use External Emojis (Use emojis from other servers) +* **vad:** Voice Activity Detection (Use voice activity detection in voice channels) +* **changenickname:** Change Nickname (Change own nickname) +* **slashcommand:** Use Slash Commands (Use application commands) +* **speakrequest:** Request to Speak (Request to speak in stage channels) +* **managethreads:** Manage Threads (Delete, archive threads, view all private threads) +* **publicthreads:** Create Public Threads (Create public forum and announcement threads) +* **privatethreads:** Create Private Threads (Create private threads) +* **externalstickers:** Use External Stickers (Use stickers from other servers) +* **canstream:** Go Live (Stream video in voice channels) +* **manageevents:** Manage Events (Create, edit, and delete scheduled events) +* **createpublicthreads:** Create Public and Announcement Threads +* **createprivatethreads:** Create Private Threads +* **sendmessagesinthreads:** Send Messages in Threads (Send messages within threads) +* **embeddedactivities:** Use Activities (Use Discord Activities) +* **moderatemembers:** Moderate Members (Timeout Users) +* **sendvc:** Allows for sending a voice messages +* **usesoundboard:** Allows for using sound-boards +* **useexternalsounds:** Allow use for sounds outside the server +* **viewcreatormonetization:** View creator monetization page +* **createexpression:** Allows for creating emojis, stickers, and soundboard sounds +* **createevent:** Allows for creating scheduled events +* **sendpolls:** Allows sending polls +* **useexternalapps:** Allows user-installed apps to send public responses. When disabled, users will still be allowed to use their apps but the responses will be ephemeral. This only applies to apps not also installed to the server. +* **pinmessages:** Allows pinning and unpinning messages +* **bypassslowmode:** Allows bypassing slowmode restrictions +* **setvcstatus:** Allows setting voice channel status +* **manageexpression:** Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users + +### Example: Denying Send Messages Permission + +This example demonstrates how to use `$modifyChannelPerms` to deny the "send messages" permission for a role with the ID `muted` in a specific channel. + +```cc +$modifyChannelPerms[$channelID;-sendmessages;$roleID[muted]] +``` + +In this example: + +* `$channelID` is the ID of the channel you want to modify permissions in. +* `-sendmessages` denies the "sendmessages" permission. Using a `+` would grant the permission instead. +* `$roleID[muted]` specifies the role ID of the "muted" role. diff --git a/content/docs/CodeReferences/ref.poll_data.mdx b/content/docs/CodeReferences/ref.poll_data.mdx new file mode 100644 index 00000000..d89e90e2 --- /dev/null +++ b/content/docs/CodeReferences/ref.poll_data.mdx @@ -0,0 +1,40 @@ +--- +title: "Poll Curl Format" +--- + +You can use \{poll:data} to send a message with a poll + +### Usage +``` +{poll: + {question=poll question} + {duration=poll duration in hours like 24h} + {multiple=can user select multiple answers? (yes/no)} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + ... +} +``` + +### Example +```cc +$sendMessage[ +{poll: +{question=What is the biggest country in the world?} +{answer=China} +{emoji=🇨🇳} +{answer=Russia} +{emoji=🇷🇺} + +{duration=1h} +{multiple=no} +} +] +``` + +### Output +![](https://i.imgur.com/4BRQVag.png) \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.time_format.mdx b/content/docs/CodeReferences/ref.time_format.mdx new file mode 100644 index 00000000..912636ee --- /dev/null +++ b/content/docs/CodeReferences/ref.time_format.mdx @@ -0,0 +1,42 @@ +--- +title: "Understanding Time Formats" +--- + +Many functions require you to specify a time format to correctly construct date and time values. This guide explains the accepted time format macros you can use. + +For example, the `$timeToDate` function uses these formats. + +### Available Time Format Macros + +The following table details the available time format macros and their descriptions: + +| Macro | Description | Example | +| :------- | :------------------------------------------------ | :---------- | +| `d` | Day number of the month | `9` | +| `0d` | Day number of the month with leading zero | `09` | +| `dn` | Day name of the week | `Sunday` | +| `y` | Year number | `2022` | +| `hr` | Hour in 24-hour format | `20` (8 PM) | +| `0hr` | Hour in 24-hour format with leading zero | `05` (5 AM) | +| `hr/12` | Hour in 12-hour format | `8` | +| `0hr/12`| Hour in 12-hour format with leading zero | `08` | +| `ms` | Milliseconds | `1` | +| `0ms` | Milliseconds with leading zeros | `001` | +| `min` | Minutes | `9` | +| `0min` | Minutes with leading zero | `09` | +| `m` | Month number | `8` (August)| +| `0m` | Month number with leading zero | `08` | +| `mn` | Month name | `February` | +| `s` | Seconds | `20` | +| `0s` | Seconds with leading zero | `03` | +| `ampm` | AM/PM indicator | `PM` / `AM` | +| `tz` | Timezone abbreviation | `UTC` | + +### Example +```cc +$timeToDate[$timestamp;%y%-%m%-%d%] +``` +Result: +``` +2025-8-15 +``` \ No newline at end of file diff --git a/content/docs/CodeReferences/ref.v2_components.mdx b/content/docs/CodeReferences/ref.v2_components.mdx new file mode 100644 index 00000000..a5fad45f --- /dev/null +++ b/content/docs/CodeReferences/ref.v2_components.mdx @@ -0,0 +1,127 @@ +--- +title: "Discord V2 Components Curl Format" +--- + +You can use \{container:data} to send a message with v2 component + +### Usage +``` +{container: + {color: the color of the container} + {text: a text inside the container} + {section: ...} + {gallery: ...} + {row: ...} + {menu: ...} + {file: ...} + {spoiler:...} + {separator:...} +} +``` +* Total number of components (i.e container, text...) cannot exceed 40 in the entire message +* Containers can hold up to 40 components (i.e text, gallery,...) at max. +* Total text content length in the message cannot exceed 4000 + +#### Section structure +Section allows you to add a text + image + button together inside a container. A section should contain at least one text and one accessory (image or button). If you are putting this inside a container and want *only* the thumbnail to be a spoiler, use \{spoiler:yes} inside the section. +The structure is: +``` +{section: + {text: any text inside the section} + {thumbnail/thumb: an image URL to show inside the section} + {button:Name:color:emoji:id:new line (yes/no):disabled (yes/no)} + {spoiler:yes/no} +} +``` + +#### Gallery structure +Gallery allows you to show multiple images together like a gallery. Supports up to 10 images for each gallery component. +the structure is: +``` +{gallery: + {image: image 1 url} + {image: image 2 url} + ... + {image: image 10 url} +} +``` + +#### Row structure +Row allows you to include multiple buttons at once (up to 5 buttons per row). Buttons are like the normal button curl. Read more about button at `$button` +the structure is: +``` +{row: + {button: button 1 details} + {button: button 2 details} + ... + {button: button 5 details} +} +``` + +#### Menu structure +Menu is like the normal menu curl. It can be used to form a menu inside a container. Read more about menu at `$selectMenu` + +#### File structure +You can set a file in the container for downloading, the structure is: +``` +{file:name of the file:file content as text} +``` + +#### Separator structure +You can set a separator between other components in the container with \{separator}, the structure is: +``` +{separator:divide (yes/no):size (1 or 2)} +``` + +#### Spoiler +Spoiler, allow you to determine if the whole container will be marked as spoiler or not (user will need to click to view). +``` +{spoiler:yes/no} +``` + +### Example +```cc +$sendMessage[ + {container: + + {text:a text inside container} + {separator:no:2} + {gallery: + {image:$userAvatar} + } + {row: + {button:BTN 1:red::btn1} + {button:BTN 2:GREEN::btn2} + } + {text:a text before the section} + {section: + {text:a text inside the section} + {thumbnail:$userAvatar} + {button: BTN 3:gray:btn3} + } + + {file:file.txt:Whatever} + + {color:Green} + {spoiler:yes} + } +] +``` + +### Example (Not using a container) +If you don't like how the container looks like, you can directly add components without it (only for text, section, gallery, file, separator) +```cc +$sendMessage[ + {section: + {text: a text inside section} + {thumb: $userAvatar} + } + {separator} + {section: + {text: a text inside another section} + {button:Click me:gray::btn_id} + } +] +``` +### Output +![](https://i.imgur.com/v8DYvPY.png) diff --git a/content/docs/CodeReferences/specialCharacters.mdx b/content/docs/CodeReferences/specialCharacters.mdx new file mode 100644 index 00000000..9c028498 --- /dev/null +++ b/content/docs/CodeReferences/specialCharacters.mdx @@ -0,0 +1,16 @@ +--- +title: "Special Characters" +--- + +Here is a list, of characters found "special": + +`[`, +`]`, +`;`, +`:`, +`$`, +`>`, +`<`, +`=`, +`{`, +`}` diff --git a/content/docs/Contribution_Info/Templating.mdx b/content/docs/Contribution_Info/Templating.mdx new file mode 100644 index 00000000..649623c9 --- /dev/null +++ b/content/docs/Contribution_Info/Templating.mdx @@ -0,0 +1,178 @@ +--- +title: "Templating System" +--- + +This page explains how to use the new templating system and how to make your commands compatible with it. The new system includes parsing of Metadata and Inputs, making command creation and customization easier. + +## Metadata + +Metadata adds extra information to your commands, such as descriptions, tags, categories, and more. This helps users find your commands more easily through template search. + +**Key Features:** + +* **Improved Discoverability:** Makes commands easier to find in the template search. +* **JSON Format:** Metadata is a JSON object, ensuring structured and error-free information. Incorrect syntax will cause parsing errors. + +### Metadata Syntax + +To add metadata to your code, use the following syntax. **Important:** Make sure to comment out the metadata in your code; otherwise, it will be treated as a message and sent to the user. + +``` +{{{ and }}} +``` + +These delimiters mark the beginning and end of the metadata, allowing the system to parse it correctly. + +#### Metadata Structure + +Here's the structure of the metadata JSON object: + +```ts +{{{ + "version": number, + "tags": Array, + "author": string, + "usecase": string, + "category": string, + "preview": link, + "description": Array, + "link": Array, + "custommd"?: string // Optional custom markdown +}}} +``` + +**Explanation of Fields:** + +* **`version`:** The version of the command. Use numbers. +* **`tags`:** An array of strings representing keywords related to the command (e.g., `["economy", "balance", "money"]`). +* **`author`:** The author of the command (e.g., `"User-0000"`). +* **`usecase`:** A brief explanation of what the command does (e.g., `"checks the balance of the user"`). +* **`category`:** The category the command belongs to (e.g., `"economy"`). +* **`preview`:** A link to a preview image or video demonstrating the command. +* **`description`:** An array of strings providing a detailed description of the command. Each string can be a separate line of the description. Use `...` to format command examples. +* **`link`:** An array of links to relevant resources, documentation, or examples. +* **`custommd`:** (Optional) A string containing custom markdown to further describe or provide instructions for the command. + +#### Metadata Example + +Here's an example of metadata for a `!balance` command: + +``` +/* Metadata : +{{{ + "version": "1", + "tags": ["economy", "balance", "money"], + "author": "User-0000", + "usecase": "checks the balance of the user", + "category": "economy", + "preview": "https://media.discordapp.net/attachments/845279377733320745/928401183809364008/unknown.png", + "description": ["Run !bal to show your balance"] , + "link": ["https://media.discordapp.net/attachments/845279377733320745/928401183809364008/unknown.png"], + "custommd": "" +}}} +*/ +The !bal command code +``` + +**Note:** In this example, the `link` and `preview` are the same, as it's a simple command. + +## `$onTemplate` Function + +The `$onTemplate` function creates a user interface (UI) for interacting with commands. This UI allows users to input values and customize the command before execution. It is especially useful for commands that require user-specific information. + +**Important:** A UI is only generated if the command has associated metadata. + +### Usage + +```cc +$onTemplate[type;field;title;help;default value] +``` + +**Parameters:** + +* **`type`:** The type of input field to create. +* **`field`:** The style/appearance of the input field. +* **`title`:** The title displayed above the input field in the UI. +* **`help`:** A helpful description displayed below the input field. +* **`default value`:** The default value for the input field. + +**Valid Types:** + +* `category`: Creates a dropdown list of categories from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. +* `number`: Creates a number input field. +* `channel`: Creates a dropdown list of channels from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. +* `role`: Creates a dropdown list of roles from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. +* `text`: Creates a single-line text input field. +* `boolean`: Creates a checkbox. +* `id`: Creates a text input field, typically used for IDs. +* `runonlyin`: This modifies the cloned command run only in to the selected channel(s) + +**Valid Fields:** + +* `input`: Creates a standard text input field. +* `inputarray`: Creates a text input field with the placeholder "Split by ,". The input will be treated as an array, split by commas. +* `dropdown`: Creates a dropdown list with values from the specified `type`. If the type is `text` or `number`, the values are taken from the `default value` parameter, separated by commas. +* `dropdownarray`: Creates a dropdown list where multiple options can be selected. Values are determined as with the standard `dropdown` field. +* `checkbox`: Creates a checkbox. + +**Title & Help:** + +* **`title`:** The label for the input field. +* **`help`:** A descriptive text providing guidance on what to enter in the input field. + +**Default Value:** + +* **`default value`:** The value that's pre-filled or pre-selected in the input field. + + + +You **cannot** use the characters `[` `]` and `;` directly within the `$onTemplate` function. They are unsupported by the parser. + +Use the following escape sequences instead: + +* `#RIGHT#` for `]` +* `#LEFT#` for `[` +* `#SEMI#` for `;` + + + +#### Example Ticket System + +**Ticket Code:** + +```cc +$let[categoryID;$onTemplate[category;dropdown;Ticket Category;Choose the category where the ticket should be created;$channelCategoryID]] // Put the category ID Here +$if[$buttonID==openTicket] + $cooldown[1m;<@$authorID> Please Wait %time% to create a new ticket] + $newTicket[$userTag; + {title:🎫 Ticket} + {url:https://raspdevpy.gitbook.io} + {description:You can change this message to yours} + {footer:Press the blue link for the docs} + {button:Close The ticket:red:❌:closeTicket} + {color:RANDOM} + ;$get[categoryID];no;Could not Create Ticket] +$elseIf[$buttonID==closeTicket] + $sendMessage[{title: This ticket will be closed in 10s} {color: #ff4a4a};no] + $disableButton[$messageID;closeTicket] + $wait[10s] + $closeTicket[This channel is not a ticket!] +$endelse +``` + +**Template Asking for Input:** + +![Template Input UI](https://i.ibb.co/LQnfhh3/image.png) + +**After Cloning:** `$let[categoryID;866251414232498197]` + +## Special Cases: Arrays + +`dropdownarray` and `inputarray` fields split their input by commas (`,`). To use these arrays in your custom commands, you need to *spread* them. + +**How to Spread Arrays:** + +```cc +$let[input;input,from,template] +$giveRoles[$authorID;$spread[,;$input]] +``` diff --git a/content/docs/Contribution_Info/function_template.mdx b/content/docs/Contribution_Info/function_template.mdx new file mode 100644 index 00000000..9d01abd5 --- /dev/null +++ b/content/docs/Contribution_Info/function_template.mdx @@ -0,0 +1,25 @@ +--- +title: "Function Template" +--- + +````md +# $FUNCTION + + +#### Usage +```cc +$FUNCTION NAME + PARAMETERS +``` + + + +!!exec There is $botCount bots in the server! + + +There is 1 bot in the server + + + +##### Function difficulty: +###### Tags: +```` \ No newline at end of file diff --git a/content/docs/Contribution_Info/main.mdx b/content/docs/Contribution_Info/main.mdx new file mode 100644 index 00000000..e6a66ded --- /dev/null +++ b/content/docs/Contribution_Info/main.mdx @@ -0,0 +1,57 @@ +--- +title: "Contributing to the Documentation" +--- + +This guide outlines how to contribute to the project documentation. We appreciate your help in making our documentation clear, accurate, and comprehensive! + +## Contribution Guidelines + +Please adhere to the following guidelines when contributing: + +* **Use the Template:** A template ensures consistency across all function documentation. You can find the template [here](/Contribution_Info/function_template). +* **Clear and Correct English:** Please use proper English grammar and spelling. Avoid slang and profanity. +* **Descriptive Pull Requests:** When submitting a pull request, clearly explain the changes you've made in the title and description. Be specific about what you've added, modified, or removed. +* **Document What You Know:** Only document functions you are familiar with. Accuracy is paramount. Double-check your work to avoid introducing errors. + +### Editing Existing or Adding Documentation + +You can contribute by editing existing pages or adding new ones directly through our GitHub repository. + +#### Prerequisites + +* **GitHub Account:** You'll need a [GitHub account](https://github.com). + * New to GitHub? Check out the official GitHub [documentation](https://docs.github.com/en) for tutorials and guidance. +* **Markdown Basics:** A basic understanding of [Markdown](https://www.markdownguide.org/cheat-sheet/) is required for formatting. + +#### Adding Documentation for a New Function + +Here's a step-by-step guide to adding documentation for a function that doesn't already have a page: + +1. **Check `undone.md`:** Before you start, check the `undone.md` file in the [repository](https://github.com/raspdevpy/ccdoc/tree/main/guide) to ensure that nobody else is already documenting the function. This prevents duplicate effort. + + * _Example: You want to document the function `$botCount`._ + +2. **Fork the Repository:** Create your own copy of the repository by forking it. + ![](https://i.ibb.co/2kPRCX0/image.png) + +3. **Create a New File:** In your forked repository, navigate to the appropriate folder (usually `guide`) and create a new file named after the function, using the `.md` extension. + + * _Example: Create a file named `botCount.md`._ + ![](https://i.ibb.co/BLCbs7q/image.png) + +4. **Use the Template and Populate It:** Use the [template](/Contribution_Info/function_template) as a starting point. Fill in the template with accurate and detailed information about the function. You can also refer to existing function documentation files for inspiration. + ![](https://i.ibb.co/X5M0s01/image.png) + +5. **Save and Commit:** Save your changes and commit them to your forked repository with a descriptive commit message. + ![](https://i.ibb.co/8XvCCdm/image.png) + +6. **Update `undone.md`:** Go to `undone.md` and move the function name from the `undone` list to the `done` list. This indicates that the documentation is complete. + ![](https://i.ibb.co/85PxQjM/image.png) + +7. **Create a Pull Request:** Once you've completed all your changes (adding/changing documentation for one or more functions), create a pull request from your forked repository to the main repository. We will review your pull request. + ![](https://i.ibb.co/p3RCGYf/image.png) + ![](https://i.ibb.co/R9fJz7g/image.png) + +### Need Help? + +For any additional information or assistance, please contact a moderator or developer in our Discord server! \ No newline at end of file diff --git a/content/docs/Contribution_Info/meta.json b/content/docs/Contribution_Info/meta.json new file mode 100644 index 00000000..a379f633 --- /dev/null +++ b/content/docs/Contribution_Info/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Contribute", + "pages": ["..."] +} diff --git a/content/docs/Guide/1.create.mdx b/content/docs/Guide/1.create.mdx new file mode 100644 index 00000000..41e35691 --- /dev/null +++ b/content/docs/Guide/1.create.mdx @@ -0,0 +1,29 @@ +--- +title: "Creating Custom Commands" +weight: 1 +--- + +Creating custom commands for your server is easier than it looks. Read through this guide, and you'll be building your own commands in no time. + +## Creating a New Command + +To create a new command, you must first login into our [dashboard](https://ccommandbot.com/dashboard). + + + +On your first visit, you'll be greeted with a helpful dashboard tour. We highly recommend taking it since it will save you a lot of time figuring things out. + + + +After logging in, select the server where you'd like to create a new command. +![](/images/guide/creating-cc/0.png) + +After you select your server, choose `Manage Your Commands` to manage your commands. You can see all your commands there. +![](/images/guide/creating-cc/1.png) + +Now you can just click the create button and you're ready to write your code! +![](/images/guide/creating-cc/create-button.png) + +## Community Commands + +Don't want to start from scratch? The dashboard provides access to a library of pre-built community commands that you can easily clone and customize. diff --git a/content/docs/Guide/2.faq.mdx b/content/docs/Guide/2.faq.mdx new file mode 100644 index 00000000..76fad0cd --- /dev/null +++ b/content/docs/Guide/2.faq.mdx @@ -0,0 +1,44 @@ +--- +title: "Frequently Asked Questions" +weight: 7 +--- + + + + +As our bot grows, we are still subject to Discord's standard rate limits. Cooldowns help us stay within these limits and **prevent the bot from being penalized**, ensuring a smooth experience for everyone. + + + + + + + +It is not possible to disable this message. You can instead **limit this command to only specific roles or channels**, or **set channel slowmode to 5 seconds** to avoid it. + + + + + + + +We are ready to assist you with your code in our [Discord server](https://ccommandbot.com/join). Keep in mind that **we will not code for you**, we want to encourage you to learn coding yourself, since that's the best for everyone. + + + + + + + +Currently there is **no limitation** to how many variables you can create. However, single **variable can contain up to 5120 characters**. + + + + + + + +If you use curl method for sending embeds, the bot may cut your content if it contains a colon (`:`). To avoid this, you can either **use the `$buffer` function** or **replace all colons with `#COLON#`**. + + + diff --git a/content/docs/Guide/3.policy.mdx b/content/docs/Guide/3.policy.mdx new file mode 100644 index 00000000..7f364896 --- /dev/null +++ b/content/docs/Guide/3.policy.mdx @@ -0,0 +1,137 @@ +--- +title: "Privacy Policy" +hidden: true +--- + +**Last Updated:** July 27, 2026 + +We take your privacy seriously and are committed to protecting the information required to operate Custom Command Bot ("the Bot"). This Privacy Policy explains what information we collect, how it is used, how long it is retained, and your rights regarding that information. + +Custom Command Bot is operated by an independent developer ("we", "us", or "our"). + +## Information We Collect + +The Bot only collects information necessary to provide its functionality. + +Depending on the features you use, this may include: + +* Discord User IDs +* Discord Server (Guild) IDs +* Server names +* Channel IDs +* Role IDs +* Message IDs (when required by specific features) +* Server configuration and settings +* Custom command names and command code created by server administrators or other authorized members +* Information intentionally stored through the Bot's variable system by custom commands + +## Dashboard Authentication + +Access to the Custom Command Bot dashboard is provided through Discord OAuth. + +When you authenticate with Discord, we receive information necessary to verify your identity and determine which servers you are authorized to manage. This may include your Discord user ID, username, avatar, and the servers you are permitted to access through Discord. + +We do not receive or store your Discord password. + +## Custom Commands & Variables + +Custom Command Bot allows server administrators and other authorized members to create custom commands that may store information using the Bot's variable system. + +The information stored depends entirely on how those custom commands have been configured. For example, a custom command may choose to store usernames, user IDs, counters, inventories, game progress, moderation data, or other information required by the server. + +User-created stored data may include any information that server administrators or authorized users choose to store through custom commands. We do not routinely monitor or review the contents of user-created stored data except where necessary to maintain the Service, investigate abuse, comply with legal obligations, or protect the security of the Service. + +The Bot does not automatically determine what information is stored through custom commands. Server administrators and authorized members are responsible for the custom commands they create and the information those commands choose to store. + +We recommend that server administrators avoid storing unnecessary personal or sensitive information. + +## Message Content + +The Bot processes message content only as necessary to detect configured command triggers and execute the requested functionality. + +Message content is processed temporarily in memory during command execution and is not stored by us unless a custom command explicitly saves information using the Bot's variable system. + + +## How We Use Your Information + +We use collected information only to: + +* Provide the Bot's features and services. +* Execute custom commands. +* Store server configuration and settings. +* Store information requested by custom commands. +* Maintain the reliability, security, and integrity of the Bot. +* Detect, investigate, and prevent abuse, spam, fraud, or violations of our Terms of Service or Discord's policies. + +We do not sell or rent your personal information. + +We do not share your information with third parties except: + +* When required by law. +* When necessary to protect the security or integrity of the Bot. +* When necessary to comply with Discord's policies or legal obligations. + +We may also disclose information when we reasonably believe it is necessary to enforce our Terms of Service, protect the rights, safety, or security of the Service or others, or respond to valid legal requests. + +# Cookies and Similar Technologies + +The Custom Command Bot dashboard may use cookies and similar technologies to provide essential functionality and improve the user experience. + +Cookies may be used for purposes such as: + +* Maintaining your dashboard login session after authenticating through Discord OAuth. +* Remembering necessary preferences and settings. +* Improving the reliability and security of the dashboard. + +We do not use cookies for advertising or tracking users across third-party websites. + +You may disable cookies through your browser settings. However, disabling certain cookies may prevent parts of the dashboard from functioning correctly. + +## Data Retention + +We retain information only for as long as reasonably necessary to provide the requested service. + +* If the Bot is removed from a server, server-specific data, including custom commands, settings, and variables, is scheduled for deletion within **30 days**. +* Variables that have not been accessed or modified for more than one (1) year are eligible for automatic deletion during routine maintenance. +* Backup deletion follows the normal backup rotation schedule and may not occur immediately after the original data deletion request. + +## Data Storage + +Data is currently hosted on infrastructure provided by Contabo in Germany. If our hosting infrastructure changes in the future, this Privacy Policy will be updated accordingly. + +## Data Security + +We use reasonable technical and organizational measures to protect stored information against unauthorized access, disclosure, alteration, or destruction. + +While we take reasonable steps to protect your information, no method of electronic storage or transmission over the Internet can be guaranteed to be completely secure. + +## Your Rights + +Depending on your location and applicable law, you may have the right to: + +* Request access to information we hold about you. +* Request correction of inaccurate information. +* Request deletion of your information. +* Request information about how your data is processed. + +Server administrators may remove most stored information by deleting custom commands or variables, or by removing the Bot from their server. + +If you would like assistance with a privacy request, please contact us. + +## Children's Privacy + +The Bot is not intended for individuals who are below the minimum age requirement to use Discord in their country or region. + +## Changes to This Privacy Policy + +We may update this Privacy Policy from time to time. Any changes will be reflected by updating the "Last Updated" date above. + +Continued use of the Service after the updated Privacy Policy becomes effective is subject to the revised Privacy Policy. + +## Contact + +If you have any questions, concerns, or requests regarding this Privacy Policy, you may contact us: + +**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) + +**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/content/docs/Guide/4.template.mdx b/content/docs/Guide/4.template.mdx new file mode 100644 index 00000000..8cfdd778 --- /dev/null +++ b/content/docs/Guide/4.template.mdx @@ -0,0 +1,48 @@ +--- +title: "Clone Community Commands" +weight: 6 +--- + +Community commands are pre-built commands created by our awesome community. They're designed to be easily imported and set up directly from the dashboard, no coding knowledge required. + +## Cloning Command + +To clone a command, head over to [dashboard](https://ccommandbot.com/dashboard), select your server and click `Manage Your Commands`. Now click `Create` button then `Clone Commmands` and search for a command that you need. + +![](/images/guide/templates/create-button.png) +![](/images/guide/templates/clone-commands.png) + +If the template has multiple handlers, you should select them all for proper functionality. + +![](/images/guide/templates/select-wordle.png) + +After choosing what to clone, click next to continue. Some commands may require some data to work. For example channel that you want to use. When you input everything, click next to clone the commands on your server. + +![](/images/guide/templates/cloning.png) + +Once everything is done, you're ready to go! After the commands are cloned, it will show you how the commands are used. To test if it works, we can try it out in Discord now. + + + +!wordle + + + +There is a word of 5 characters, can you guess it? + + +[ ] [ ] [ ] [ ] [ ] + + + + + +Guess + + + + + +## Sharing Your Commands + +Want to contribute? Post your template projects in the `#code-sharing` channel in our [support server](https://ccommandbot.com/join). The best and most useful commands may be added to the official community commands to help other users. diff --git a/content/docs/Guide/5.comment.mdx b/content/docs/Guide/5.comment.mdx new file mode 100644 index 00000000..366c6b7f --- /dev/null +++ b/content/docs/Guide/5.comment.mdx @@ -0,0 +1,83 @@ +--- +title: "Code and Comments" +weight: 3 +--- + +Comments are lines in your code that are ignored by the interpreter. They're useful for making your code easier to understand. + + + +Comments are important to make your code readable, and are widely used across this documentation. + + + +## Single-Line Comments + +Single-Line comments are comments just on one line. You should use this for notes, or simple explanations. + +### Example + +```cc +$let[userYear;2000] + +// User's age +$let[age;$math[$year-$userYear]] // $userYear is year the user was born in + +// Send a message with age +Your age is: $age + +// TODO: Save into user variable +``` + + + +!!exec $let[userYear;2000]

+// User's age
+$let[age;$math[$year-$userYear]] // $userYear is year the user was born in

+// Send a message with age
+Your age is: $age

+// TODO: Save into user variable +
+ +Your age is: 26 + +
+ +## Multi-Line Comments + +Multi-Line comments can comment multiple lines at once. You can also use this to comment inside of functions. + +### Example + +```cc +/* +userYear -> Year the user was born in +age -> User's age +*/ + +$let[userYear;2000] +$let[age;$math[$year /* current year - born year */ - $userYear]] + +Your age is: $age /* <- The variable */ +``` + + + +!!exec /*
+userYear -> Year the user was born in
+age -> User's age
+*/

+$let[userYear;2000]
+$let[age;$math[$year /* current year - born year */ - $userYear]]
+Your age is: $age /* \<- The variable */ +
+ +Your age is: 26 + +
+ + + +In the dashboard editor, you can quickly comment out selected line(s) by pressing `Ctrl + /` + + diff --git a/content/docs/Guide/6.variables.mdx b/content/docs/Guide/6.variables.mdx new file mode 100644 index 00000000..8bf3d279 --- /dev/null +++ b/content/docs/Guide/6.variables.mdx @@ -0,0 +1,77 @@ +--- +title: "Using Variables" +weight: 4 +--- + +Variables are important for storing and manipulating data within Custom Command. There are temporary and permanent variables. + +## Temporary Variables + +Temporary variables exist only during the execution of a command. They are easy to access and are ideal for storing values during data processing. These can make your code more readable. + +### Functions + +- `$let` - Creates a temporary variable and assigns a value to it +- `$get` - Retrieves the value stored in a temporary variable + +You can also access temporary variables directly by prefixing their name with a dollar sign (`$`). + +### Example + +```cc +$let[uid;$randomUserID] +$let[name;$displayName[$uid]] + +User’s name: $name +``` + + + +!!exec $let[uid;$randomUserID]
+$let[name;$displayName[$uid]]

+Random User's name: $name +
+ +Random User's name: Member + +
+ +## Permanent Variables + +Permanent variables persist even after the command execution is complete. Permanent variables can be stored alongside a server, channel, user or message. That means that each server, channel, user or message variable can have different value if it's different server, channel, user or message. +Permanent variables are ideal for storing settings, progress, or any other data that needs to be used later. For example, you can save different value for each user using user variables. + +### Functions + +- `$initVar` - Initializes a variable with a default value if the var does not exist +- `$setServerVar` - Creates a permanent variable accessible in the whole server +- `$getServerVar` - Retrieves the value stored in the permanent variable +- `$increaseServerVar` - Increase a server variable with a certain amount +- `$setChannelVar` - Creates a permanent variable accessible in the current channel +- `$getChannelVar` - Retrieves the value stored in the permanent variable +- `$increaseChannelVar` - Increase a channel variable with a certain amount +- `$setUserVar` - Creates a permanent variable accessible for the current user +- `$getUserVar` - Retrieves the value stored in the permanent variable +- `$increaseUserVar` - Increase a user variable with a certain amount +- `$setMessageVar` - Creates a permanent variable accessible for the current message +- `$getMessageVar` - Retrieves the value stored in the permanent variable + +### Example + +```cc title="Command 1" +$setUserVar[level;4] +``` + +```cc title="Command 2" +Your level: $getUserVar[level] // 4 +``` + +```cc title="Command 3" +$increaseUserVar[level;1] +Your new level: $getUserVar[level] // 5 +``` + + +All variables are saved in our database. If you have privacy concerns, please read our [Privacy Policy](/Legal/policy). + + diff --git a/content/docs/Guide/7.array.mdx b/content/docs/Guide/7.array.mdx new file mode 100644 index 00000000..900972c8 --- /dev/null +++ b/content/docs/Guide/7.array.mdx @@ -0,0 +1,36 @@ +--- +title: "Using Arrays" +weight: 5 +--- + +Array is a list of items that you can loop through, or join with a specific separator. +Once you create an array, you can use functions to modify it or retrieve information from it. + +## Indexes + +Each element in an array has a unique index number that identifies its position. Our array starts from index 1. + +## Example + +```cc +$arrayCreate[Apple Banana Kiwi; ] // List split by space + +// Retrieve items +First item: $arrayGet[1] +Last item: $arrayGet[$arrayLength] +All items: $arrayJoin[/] +``` + + + +!!exec $arrayCreate[Apple Banana Kiwi; ]

+First item: $arrayGet[1]
+Last item: $arrayGet[$arrayLength]
+All items: $arrayJoin[/] +
+ +First item: Apple
+Last item: Kiwi
+All items: Apple/Banana/Kiwi +
+
diff --git a/content/docs/Guide/meta.json b/content/docs/Guide/meta.json new file mode 100644 index 00000000..9c8455f2 --- /dev/null +++ b/content/docs/Guide/meta.json @@ -0,0 +1,15 @@ +{ + "pages": [ + "../index", + "1.create", + "syntax", + "5.comment", + "6.variables", + "7.array", + "4.template", + "2.faq", + "...", + "!3.policy" + ], + "defaultOpen": true +} diff --git a/content/docs/Guide/syntax.mdx b/content/docs/Guide/syntax.mdx new file mode 100644 index 00000000..f2d2ea7c --- /dev/null +++ b/content/docs/Guide/syntax.mdx @@ -0,0 +1,139 @@ +--- +title: "Syntax" +--- + +Learning about the syntax used by this bot is necessary to understand how to write commands. + +## Syntax Overview + +The bot's code uses two types: + +1. [Text](#what-is-text) +2. [Function](#what-is-a-function) + +## What is Text + +Anything in the code that isn't a function is considered text. + +### Example + +```cc +Hello $username, how are you? +``` + +- `Hello` - Text +- `$username` - Function +- `, how are you?` - Text + +```cc +$interactionReply[Hello there] +``` + +- `$interactionReply` - Function +- `Hello there` - Text + +## What is a Function + +A function is a special instruction that begins with a dollar sign (`$`), for example `$username`. +All arguments are kept inside of square brackets (`[HERE]`). +Function names are case insensitive. + + + All functions can be either executed by writing a command in the dashboard, or using the built in `!!exec` command. + + +### Example + +Function case insensitivity + +```cc +$math[1+1] = $mAtH[1+1] = $MATH[1+1] +``` + + + +!!exec $math[1+1] = $mAtH[1+1] = $MATH[1+1] + + +2 = 2 = 2 + + + +Function doesn't have to be closed at the same line where it was opened: + +```cc +$title[Math question] +$description[What is 2^11? +Click to reveal: ||$math[2^11]||] +``` + + + +!!exec $title[Math question]
+$description[What is 2^11?
+Click to reveal: ||$math[2^11]||] +
+ + +What is 2^11?
+Click to reveal: 2048 +
+
+
+ +## Function Actions + +Functions performs one of these three actions: + +- **Replace with a value:** The function is replaced by a specific value. +- **Perform an action:** The function executes a task. +- **Both:** The function executes a task and then is replaced by a specific value. + +## Encoded Character Codes (Alternative to `\`) + +Instead of using backslashes, you can use these encoded character codes to represent special characters: +```js +#RIGHT# =>> ] +#LEFT# =>> [ +#SEMI# =>> ; +#COLON# =>> : +#DOLLAR# =>> $ +#CHAR# =>> $ +#RIGHT_CLICK# =>> > +#LEFT_CLICK# =>> < +#EQUAL# =>> = +#RIGHT_BRACKET# =>> } +#LEFT_BRACKET# =>> { +#NL# =>> New line +#BR# =>> New line +#SP# =>> Space +#TAB# =>> Tab (few spaces) +#SLASH# =>> / +#BACKSLASH# =>> \ +``` +## Multiple Arguments + +Some functions require multiple arguments. Arguments can also be required or optional. + +```cc +$msg[Channel ID;Message ID;Option;Additional 1;Additional 2] +``` + +- - ID of channel you want to retrieve information from. +- - ID of the message you want to retrieve information from. +- - What kind of information you want to retrieve. +- - Additional argument. Some options need these to work properly. +- - Additional argument. Some options need these to work properly. + +### Example + +Example of using `$msg` with multiple arguments + + + +!!exec Message content: $msg[$channelID;$messageID;content] + + +Message content: !!exec Message content: $msg[$channelID;$messageID;content] + + diff --git a/content/docs/Legal/meta.json b/content/docs/Legal/meta.json new file mode 100644 index 00000000..66c1b4fd --- /dev/null +++ b/content/docs/Legal/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Legal", + "pages": ["..."], + "defaultOpen": true +} diff --git a/content/docs/Legal/policy.mdx b/content/docs/Legal/policy.mdx new file mode 100644 index 00000000..3f743fd9 --- /dev/null +++ b/content/docs/Legal/policy.mdx @@ -0,0 +1,136 @@ +--- +title: "Privacy Policy" +--- + +**Last Updated:** July 27, 2026 + +We take your privacy seriously and are committed to protecting the information required to operate Custom Command Bot ("the Bot"). This Privacy Policy explains what information we collect, how it is used, how long it is retained, and your rights regarding that information. + +Custom Command Bot is operated by an independent developer ("we", "us", or "our"). + +## Information We Collect + +The Bot only collects information necessary to provide its functionality. + +Depending on the features you use, this may include: + +* Discord User IDs +* Discord Server (Guild) IDs +* Server names +* Channel IDs +* Role IDs +* Message IDs (when required by specific features) +* Server configuration and settings +* Custom command names and command code created by server administrators or other authorized members +* Information intentionally stored through the Bot's variable system by custom commands + +## Dashboard Authentication + +Access to the Custom Command Bot dashboard is provided through Discord OAuth. + +When you authenticate with Discord, we receive information necessary to verify your identity and determine which servers you are authorized to manage. This may include your Discord user ID, username, avatar, and the servers you are permitted to access through Discord. + +We do not receive or store your Discord password. + +## Custom Commands & Variables + +Custom Command Bot allows server administrators and other authorized members to create custom commands that may store information using the Bot's variable system. + +The information stored depends entirely on how those custom commands have been configured. For example, a custom command may choose to store usernames, user IDs, counters, inventories, game progress, moderation data, or other information required by the server. + +User-created stored data may include any information that server administrators or authorized users choose to store through custom commands. We do not routinely monitor or review the contents of user-created stored data except where necessary to maintain the Service, investigate abuse, comply with legal obligations, or protect the security of the Service. + +The Bot does not automatically determine what information is stored through custom commands. Server administrators and authorized members are responsible for the custom commands they create and the information those commands choose to store. + +We recommend that server administrators avoid storing unnecessary personal or sensitive information. + +## Message Content + +The Bot processes message content only as necessary to detect configured command triggers and execute the requested functionality. + +Message content is processed temporarily in memory during command execution and is not stored by us unless a custom command explicitly saves information using the Bot's variable system. + + +## How We Use Your Information + +We use collected information only to: + +* Provide the Bot's features and services. +* Execute custom commands. +* Store server configuration and settings. +* Store information requested by custom commands. +* Maintain the reliability, security, and integrity of the Bot. +* Detect, investigate, and prevent abuse, spam, fraud, or violations of our Terms of Service or Discord's policies. + +We do not sell or rent your personal information. + +We do not share your information with third parties except: + +* When required by law. +* When necessary to protect the security or integrity of the Bot. +* When necessary to comply with Discord's policies or legal obligations. + +We may also disclose information when we reasonably believe it is necessary to enforce our Terms of Service, protect the rights, safety, or security of the Service or others, or respond to valid legal requests. + +# Cookies and Similar Technologies + +The Custom Command Bot dashboard may use cookies and similar technologies to provide essential functionality and improve the user experience. + +Cookies may be used for purposes such as: + +* Maintaining your dashboard login session after authenticating through Discord OAuth. +* Remembering necessary preferences and settings. +* Improving the reliability and security of the dashboard. + +We do not use cookies for advertising or tracking users across third-party websites. + +You may disable cookies through your browser settings. However, disabling certain cookies may prevent parts of the dashboard from functioning correctly. + +## Data Retention + +We retain information only for as long as reasonably necessary to provide the requested service. + +* If the Bot is removed from a server, server-specific data, including custom commands, settings, and variables, is scheduled for deletion within **30 days**. +* Variables that have not been accessed or modified for more than one (1) year are eligible for automatic deletion during routine maintenance. +* Backup deletion follows the normal backup rotation schedule and may not occur immediately after the original data deletion request. + +## Data Storage + +Data is currently hosted on infrastructure provided by Contabo in Germany. If our hosting infrastructure changes in the future, this Privacy Policy will be updated accordingly. + +## Data Security + +We use reasonable technical and organizational measures to protect stored information against unauthorized access, disclosure, alteration, or destruction. + +While we take reasonable steps to protect your information, no method of electronic storage or transmission over the Internet can be guaranteed to be completely secure. + +## Your Rights + +Depending on your location and applicable law, you may have the right to: + +* Request access to information we hold about you. +* Request correction of inaccurate information. +* Request deletion of your information. +* Request information about how your data is processed. + +Server administrators may remove most stored information by deleting custom commands or variables, or by removing the Bot from their server. + +If you would like assistance with a privacy request, please contact us. + +## Children's Privacy + +The Bot is not intended for individuals who are below the minimum age requirement to use Discord in their country or region. + +## Changes to This Privacy Policy + +We may update this Privacy Policy from time to time. Any changes will be reflected by updating the "Last Updated" date above. + +Continued use of the Service after the updated Privacy Policy becomes effective is subject to the revised Privacy Policy. + +## Contact + +If you have any questions, concerns, or requests regarding this Privacy Policy, you may contact us: + +**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) + +**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/content/docs/Legal/tos.mdx b/content/docs/Legal/tos.mdx new file mode 100644 index 00000000..61b0a88c --- /dev/null +++ b/content/docs/Legal/tos.mdx @@ -0,0 +1,289 @@ +--- +title: "Terms of Service" +--- + +**Effective Date:** July 26, 2026 + +Welcome to Custom Command Bot ("the Bot", "we", "our", or "us"). These Terms of Service ("Terms") govern your use of Custom Command Bot, its website, dashboard, and related services (collectively, the "Service"). + +By using or accessing the Service, you agree to these Terms. If you do not agree with these Terms, you may not use the Service. + +Custom Command Bot is independently operated by an individual developer and is not affiliated with or endorsed by Discord Inc. + +# Definitions + +For the purposes of these Terms: + +**"Service"** means Custom Command Bot, including the Discord bot, website, dashboard, APIs, features, and any related services provided by us. + +**"Dashboard"** means the web interface used to manage Discord server configurations, create custom commands, and configure Service features. + +**"User"** means any individual who accesses or uses the Service. + +**"Server Administration"** means the Discord server owner and any users who have been granted access to manage that server through the Dashboard by the server owner or another authorized member of the Server Administration. + +**"Server Configuration"** means any custom commands, code, settings, variables, automations, permissions, and other configuration data created or managed through the Service for a specific Discord server. + +**"Custom Commands"** means user-created commands, scripts, code, templates, or automations created through the Service that define actions performed by the bot. + +**"Variables"** means data values created, stored, or modified through Custom Commands, including user variables, server variables, or other persistent data created through the Service. + +**"User Content"** means any code, text, settings, configurations, variables, or other content submitted, created, or stored by users through the Service. + +**"Discord Data"** means information accessed from Discord through the Discord API or Discord OAuth, including server IDs, user IDs, roles, channels, permissions, and other information required for the Service to function. + +**"Authorized User"** means a user who has been granted permission by the Server Administration to access or manage a server's Dashboard configuration. + +**"Third-Party Services"** means external platforms or services that the Service depends on or interacts with, including Discord. + + +# Changes to These Terms + +We may update these Terms from time to time as the Service changes or as needed for legal, security, or operational reasons. + +When changes are made, the updated Terms will be published with a new effective date. Continued use of the Service after changes become effective means you agree to the updated Terms. + + +# Using the Service + +You may use Custom Command Bot only in compliance with: + +* These Terms. +* Discord's Terms of Service. +* Discord's Developer Terms and Policies. +* Applicable laws and regulations. + +You are responsible for ensuring that your use of the Service is permitted in your location. + +You must not use the Service if your use is prohibited by applicable laws or regulations. + + +# Discord Accounts and Permissions + +The Service may require access to your Discord account or server permissions to provide functionality. + +You are responsible for: + +* Maintaining the security of your Discord account. +* Ensuring you have permission to add and configure the Bot in a server. +* Ensuring users who create custom commands have appropriate authorization. + +You must not use another person's account or permissions without authorization. + + +# Dashboard Access and Server Authorization + +Custom Command Bot provides a web dashboard that allows users to manage server-specific settings, create custom commands, and configure features for Discord servers. + +Users access the dashboard by authenticating through Discord OAuth. We use Discord's authorization system to verify the user's identity and determine which Discord servers they are permitted to manage. + +A user may access a server's dashboard section only if they: + +* Own the Discord server; or +* Have been granted sufficient permissions or authorization by the server's administration. + +By accessing a server through the dashboard, you confirm that you have the necessary authority to manage that server's Custom Command Bot configuration. + +Server administrators are responsible for managing access to their server and ensuring that only trusted users are granted permission to create, edit, or remove custom commands and configurations. + +Actions performed through the dashboard by authorized users are considered actions performed on behalf of that Discord server's administration. + +Dashboard access is determined using information and permissions provided by Discord. We may rely on Discord's authorization and permission information when determining whether a user may access a server's dashboard. + +If your Discord permissions or server access are removed, you may lose access to that server's dashboard and its configuration. Loss of access does not automatically grant you the right to request deletion, transfer, or removal of commands or configurations created for that server. + + +# Custom Commands and User Content + +Custom Command Bot allows server administrators and authorized members to create custom commands and automations. + +You are solely responsible for: + +* The commands you create. +* The code you write. +* The actions performed by your commands. +* Any information collected, processed, or stored by your commands. +* Ensuring your commands comply with applicable laws and Discord policies. + +Custom commands may perform actions such as sending messages, assigning roles, modifying server settings, or storing information through the Bot's variable system. + +We do not routinely review, audit, approve, certify, or guarantee the correctness, security, reliability, safety, or legal compliance of custom commands created by users. + +# Prohibited Uses + +You may not use the Service to: + +* Violate Discord's Terms of Service, Community Guidelines, or Developer Policies. +* Create self-bots or automate user accounts. +* Send spam, unsolicited messages, or malicious content. +* Create scams, phishing systems, or fraudulent services. +* Distribute malware, viruses, or harmful code. +* Attempt to gain unauthorized access to accounts, servers, systems, or data. +* Abuse, overload, or disrupt the Service or Discord infrastructure. +* Store or distribute illegal content. +* Store or distribute content that is hateful, threatening, excessively violent, exploitative, or otherwise unlawful. +* Use the Service to collect personal information without appropriate permission or legal basis. + +We reserve the right to determine whether use of the Service violates these Terms. + + +# Server Administrator Responsibility + +Server owners and their authorized users are responsible for: + +* Managing who has access to create or edit custom commands. +* Reviewing commands created within their server. +* Ensuring commands comply with applicable laws, Discord's Terms of Service, Community Guidelines, Developer Policies, and their own privacy obligations. +* Determining what information is collected, processed, or stored through custom commands. +* Ensuring stored data complies with applicable privacy laws. + +Custom Command Bot provides the tools used to create custom functionality but does not determine or control what information server administrators choose to collect or store through their custom commands. + +If a server administrator allows another person to create or manage commands, the server administration remains responsible for activity performed through that server. + + +# Security and Abuse Prevention + +You must not attempt to: + +* Attempt to copy, reverse engineer, decompile, bypass, interfere with, or otherwise attempt to discover the source code or underlying functionality of the Service, except where permitted by applicable law. +* Circumvent security measures. +* Exploit bugs or vulnerabilities. +* Interfere with normal operation of the Service. +* Access data belonging to other users or servers. + +If you discover a security issue, please report it instead of exploiting it. + + +# Service Availability + +We attempt to keep the Service available and reliable, but we do not guarantee that the Service will always be uninterrupted, error-free, or available. + +We may modify, suspend, or discontinue parts of the Service at any time. +We are not responsible for interruptions or failures caused by events beyond our reasonable control, including failures of Discord, hosting providers, Internet infrastructure, denial-of-service attacks, or other third-party services. + +# Data and Deletion + +Data handling is described in our Privacy Policy. + +Server administrators may remove the Bot from their server at any time. Server-specific data is handled according to the retention periods described in the Privacy Policy. + + +# Suspension and Enforcement + +We reserve the right to suspend, restrict, or terminate access to the Service, with or without prior notice, if we reasonably believe that a user or server has: + +* Violated these Terms. +* Violated Discord's Terms of Service, Community Guidelines, or Developer Policies. +* Used the Service for unlawful, harmful, deceptive, or abusive purposes. +* Threatened the security, stability, or availability of the Service or other users. +* Attempted to abuse, exploit, or circumvent the Service or its intended functionality. + +To protect the Service, Discord, and other users, we may also remove, disable, restrict, or modify individual custom commands, automations, variables, or server configurations that we reasonably believe: + +* Violate these Terms or applicable law. +* Facilitate spam, phishing, scams, malware, or other malicious activity. +* Circumvent Discord's policies or technical limitations. +* Pose a security, operational, or reputational risk to the Service. + +Where appropriate, we may disable or remove specific commands, automations, variables, or configurations without suspending the entire server if doing so is sufficient to resolve the issue. + +Where practical, we may notify the affected server administrator before or after taking action. However, we reserve the right to act immediately when necessary to protect the Service, comply with legal obligations, or comply with Discord's requirements. + +Suspension or termination may result in the loss or deletion of data associated with the affected server or account in accordance with our Privacy Policy. + +# Custom Commands and Server Ownership + +Custom commands, automations, variables, and other server configurations created through the Service are created on behalf of the Discord server for which they are created. + +Ownership and control of such server configurations belongs to the Server Administration, not to the individual user who originally created them. + +The individual user who originally created a server configuration does not retain exclusive ownership or control over that configuration after it has been created for the server. + +By creating, editing, or submitting server configurations through the Service, you acknowledge and agree that: + +* Your contributions become part of that server's configuration. +* The Server Administration may continue to use, modify, copy, transfer, or delete those configurations. +* Leaving the server or losing dashboard access does not entitle you to require deletion, transfer, or removal of those configurations. + +Custom Command Bot will not mediate disputes regarding ownership of server configurations except where required by applicable law. + + +# Intellectual Property + +The Service, including its software, design, branding, documentation, and original materials, remains the property of the Bot operator unless otherwise stated. + +Custom commands, server configurations, and related content created within a Discord server are considered part of that server's configuration and are managed by the server's administrators through the Service. + +By creating or submitting content through the Service, you grant us a non-exclusive, worldwide, royalty-free license to store, process, reproduce, and display that content solely as necessary to operate, maintain, back up, secure, and improve the Service. + +Except as provided in the "Custom Commands and Server Ownership" section, we do not claim ownership of user-created content beyond the limited rights necessary to operate the Service. + +# Payments and Premium Features + +Certain optional features of the Service may require payment. + +Premium subscriptions grant access to additional features of the Service. They do not transfer ownership of the Service or any intellectual property. + +Payments and recurring subscriptions are processed through Ko-fi or other third-party payment providers. We do not collect or store your payment card information. + +Premium benefits remain active while your subscription is active and may be suspended or removed if your subscription expires, is cancelled, refunded, or otherwise terminated. + +Subscription management, billing, cancellations, and payment methods are handled by the applicable payment provider and are subject to that provider's terms and policies. + +Unless otherwise stated, payments are non-refundable except where required by applicable law or expressly provided by us. + + +# Third-Party Services + +The Service relies on third-party platforms, including Discord. + +We are not responsible for the availability, policies, security, or actions of third-party services. + +Your use of third-party services is subject to their own terms and policies. + +The Service may rely on third-party providers for payment processing, such as Ko-fi. Your use of those services is subject to their own terms and privacy policies. + + +# Disclaimer + +The Service is provided on an "as available" basis. + +We do not guarantee that: + +* The Service will always operate without errors. +* Custom commands will always execute as expected. +* Stored data will never be lost. +* The Service will meet every user's requirements. + +You use the Service at your own risk. + + +# Limitation of Liability + +To the maximum extent permitted by applicable law, we are not responsible for indirect, incidental, special, or consequential damages resulting from your use of the Service. + +This includes, but is not limited to: + +* Loss of data. +* Loss of server configurations. +* Incorrect execution of custom commands. +* Service interruptions. +* Actions performed by custom commands created by users. +* Actions taken by server administrators or authorized users. + +# Entire Agreement + +These Terms, together with the Privacy Policy, constitute the entire agreement between you and us regarding your use of the Service. + +# Governing Law + +These Terms are governed by the laws applicable in the jurisdiction where the Service operator resides, unless otherwise required by applicable consumer protection laws. + +# Contact + +If you have questions regarding these Terms, you can contact us: + +**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) + +**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/content/docs/Other/CustomBot.mdx b/content/docs/Other/CustomBot.mdx new file mode 100644 index 00000000..e2c06257 --- /dev/null +++ b/content/docs/Other/CustomBot.mdx @@ -0,0 +1,76 @@ +--- +title: "Setting Up Your Custom Bot" +--- + +This guide will walk you through setting up your own custom bot. This feature is available to users who have achieved Tier 3+ access, either by redeeming it or by winning it in our support server. + +## One-Time Setup Steps + +Follow these steps to create and connect your custom bot. You only need to do this once! + +### 1. Access the Discord Developer Portal + +Go to the [Discord Developer Portal](https://discord.com/developers/applications). This is where you'll create and manage your bot. + +### 2. Create a New Application + +Click the "New Application" button. + +![Create a new application](/images/guide/cb-setup/new-app.png) + +### 3. Name Your Application + +Enter a name for your bot application and click the "Create" button. This name is what your bot will be called on Discord. + +![Enter a name and press the create button](/images/guide/cb-setup/name-your-app.png) + +### 4. Navigate to the Bot Section + +In the left-hand menu, click on the "Bot" section. + +![Go to section bot](/images/guide/cb-setup/nav-to-bot-cat.png) + +### 5. Setup the needed intents for your use case +* If you use `On User Message/Poll Updates` Triggers or using message content/attachment/embeds/polls from other users messages : Enable Message Intent Content. +* If you use `Join/Leave Member/Server Boost` Trigger or Member-cached functions like `$usersWithRole` or Cache All Members for Tier 5: Enable Server Members Intent. +* If you use `$status`/`$membersWithStatus` functions in your codes, enable Presence Intent. +![](/images/guide/cb-setup/setup-intents.png) + +### 6. Generate a Bot Token + +Click the "Reset Token" button. This will generate a new, valid token for your bot. **Keep this token secure! Do not share it with anyone!** + +![](/images/guide/cb-setup/reset-token.png) + +### 7. Copy the Token + +Click the "Copy" button next to the token to copy it to your clipboard. + +![](/images/guide/cb-setup/copy-token.png) + +### 8. Navigate to Premium Section of your server dashboard + +Go to the [Dashboard](https://ccommandbot.com/dashboard) and select the server where you want to use your premium features. + +![](/images/guide/cb-setup/nav-to-prem1.png) + +![](/images/guide/cb-setup/nav-to-prem2.png) + +### 9. Paste the Token and Save + +Paste the copied token into the "Token" input field and click the "Save" button. + +![](/images/guide/cb-setup/paste-token.png) +![](/images/guide/cb-setup/save-btn.png) + +### 10. Invite Your Bot to Your Server + +Click on the "Invite your bot" button. This will take you to a Discord authorization page where you can select the server you want to add your bot to. **Make sure you have the "Manage Server" permission in the server you're inviting the bot to.** + +![](/images/guide/cb-setup/inv-your-bot.png) + +### 11. All Done! + +You're finished! Wait a few minutes for your bot to come online. :tada: + +**Important:** Make sure the main `Custom Command` bot remains in your server. Removing the main bot will prevent you from accessing the dashboard and managing your custom bot. diff --git a/content/docs/Other/curl.mdx b/content/docs/Other/curl.mdx new file mode 100644 index 00000000..3267b20d --- /dev/null +++ b/content/docs/Other/curl.mdx @@ -0,0 +1,37 @@ +--- +title: "Curl Arguments" +--- + +Tired of long, complicated function calls with tons of empty parameters? Curl arguments are here to help! They provide a more readable and intuitive way to pass options to functions, making your code cleaner and easier to understand. + +Instead of using parameter arrays like `$randomText[one;two;three]`, curl arguments allow you to specify options using a key-value format, similar to how you would in a URL. This eliminates the need for placeholder values and improves the overall clarity of your code. + +**Key Benefits:** + +* **Improved Readability:** No more deciphering long strings of semicolons and empty parameters. Curl arguments make it clear what each option is intended for. +* **Simplified Code:** Avoid unnecessary placeholder values for optional parameters. You only need to specify the options you want to change. +* **Reduced Errors:** Easier to see and avoid mistakes when specifying function parameters. + +## Example: Creating a Channel with Curl Arguments + +Let's say you want to create a text channel. Using traditional parameters, you might need to include several empty values for optional settings. With curl arguments, it's much simpler: + +```cc +$createChannel[ + {name=channelName} + {type=text} + {topic=channel topic} +] +``` + +This code clearly defines the channel's name, type, and topic without requiring you to specify values for "return ID" or "NSFW" (or leave them blank with `;;;`). + +## Checking for Curl Support + +Not all functions support curl arguments yet. To find out if a specific function supports them, use the `!!func` command: + +```cc +!!func function name +``` + +This will provide information about the function, including whether curl arguments are supported. Look for a "Curl Support" or similar indicator in the function documentation. If it's supported, you can start taking advantage of this cleaner, more efficient way to pass options! \ No newline at end of file diff --git a/content/docs/Other/embedBuilder.mdx b/content/docs/Other/embedBuilder.mdx new file mode 100644 index 00000000..3556835a --- /dev/null +++ b/content/docs/Other/embedBuilder.mdx @@ -0,0 +1,36 @@ +--- +title: "Creating Embeds with the Embed Builder" +--- + +This guide will walk you through using the Embed Builder within the dashboard to create and send custom embeds to your Discord server. + +## Accessing the Embed Creator + +1. After logging into the dashboard, navigate to the `Embed Creator` tab. + ![](/images/other/embedBuilder/1.png) + +## Customizing Your Embed + +2. In the `Embed Editor` section, you can define all the details of your embed, such as the title, description, color, fields, author, and more. Experiment with the options to create the perfect embed for your needs! + ![](/images/other/embedBuilder/2.png) + ![](/images/other/embedBuilder/embedInfo.png) + +## Selecting a Destination Channel + +3. Once you've configured your embed, choose the channel where you want to send it. Click the channel selection box to reveal a dropdown menu of available channels. + ![](/images/other/embedBuilder/3.png) + +4. Select the desired channel. In this example, we're using `#general`. **Important:** Ensure the bot has permission to view and send messages, including embeds and images, in the selected channel. This usually requires the "View Channel," "Send Messages," "Embed Links," and "Attach Files" permissions. + ![](/images/other/embedBuilder/4.png) + +## Sending Your Embed + +5. To send your embed to the selected channel, click the `Send` button. If you wish to discard your changes, click the orange "Cancel" button. + ![](/images/other/embedBuilder/5.png) + +## Success! + +6. Your embed should now appear in the chosen channel. + ![](/images/other/embedBuilder/6.png) + +Now you can create visually appealing and informative messages for your Discord server using the Embed Builder! \ No newline at end of file diff --git a/content/docs/Other/meta.json b/content/docs/Other/meta.json new file mode 100644 index 00000000..c8b72694 --- /dev/null +++ b/content/docs/Other/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Other Information", + "pages": ["...", "!syntax"] +} diff --git a/content/docs/Other/ratelimits.mdx b/content/docs/Other/ratelimits.mdx new file mode 100644 index 00000000..372f6a05 --- /dev/null +++ b/content/docs/Other/ratelimits.mdx @@ -0,0 +1,58 @@ +--- +title: "Understanding Discord Rate Limits and Bot Cooldowns" +--- + +To ensure fair usage and prevent abuse, Discord implements rate limits on its API. Our bot also uses a cooldown system to manage requests efficiently. This page explains how these limits work and how they might affect your custom commands. + +## What are Cooldowns and Limits? + +Think of cooldowns and limits as restrictions designed to prevent the bot from being overwhelmed or misused. They control how frequently certain actions can be performed. + +* **Cooldown:** A waiting period before a function can be used again with the same inputs (e.g., by the same user, in the same channel, or in the same guild). + +* **Limit:** A maximum number of times a function can be called within a specific context (e.g., within a single custom command). + +## Function Cooldowns + +Many functions have a built-in cooldown period. This means that after using the function, there will be a delay before it can be used again with the same input data. + +**What happens when a function is on cooldown?** + +The bot's behavior depends on the function and its configuration: + +* **Wait and Execute:** The bot waits for the cooldown to expire and then executes the function. +* **Error Message:** The bot sends an error message indicating that the function is on cooldown. +* **Silent Cancellation:** The bot cancels the execution without any warning message. + + + +You can use the command `!!func function name` to check the cooldown period (if any) of a specific function. This will help you understand how long you need to wait before using the function again. + + + +## Function Limits + +Even with cooldowns in place, a function can only be called a limited number of times within a single custom command. + +**Function Limit:** A function with cooldown can be called a maximum of **5 times** within a single custom command. + +If this limit is reached, the bot will silently cancel the execution of the function. + +## Execution Limits + +These limits control how many custom commands can run simultaneously and how quickly they can be triggered. + +* **Parallel Execution Limit:** The bot supports up to **5 parallel executions** of the same custom command. + +* **Execution Cooldown:** The same custom command can only be triggered **once every 5 seconds**. + +## Premium Benefits (Tier 3/4/5) + +Premium tiers (3, 4, and 5) allow you to run your own dedicated bot instance. This comes with significantly relaxed limitations, as your bot runs in an isolated environment. + +**Removed/Increased Limits for Premium Tiers:** + +* **Function Cooldown:** Removed entirely. +* **Function Limit:** Hard capped to 20 calls per custom command. +* **Execution Limits:** Hard capped to 60 parallel executions. +* **Execution Cooldown:** Hard capped to 0.5 seconds. \ No newline at end of file diff --git a/content/docs/Other/troubleshooting.mdx b/content/docs/Other/troubleshooting.mdx new file mode 100644 index 00000000..4f1e41e1 --- /dev/null +++ b/content/docs/Other/troubleshooting.mdx @@ -0,0 +1,38 @@ +--- +title: "Troubleshooting" +--- + +Our bot's advanced features mean users may encounter unique issues. This section addresses common problems, ordered from most frequent to less frequent. + +Each problem is presented as a question, followed by troubleshooting steps and the trigger type. + +## My command doesn't trigger + + + +**Possible Causes:** + +* **Incorrect Permission Level:** Have you set the minimum permission level for the command execution to `None`? + + * **No:** Change the permission level to `None`, save the changes, and try again. + + * **Yes:** Continue to the next possible cause. + +* **Special Characters in Trigger:** Does your command trigger contain any [special characters](../CodeReferences/specialCharacters)? Special characters can sometimes interfere with trigger recognition. + +## The bot failed to assign a role + +**Troubleshooting Steps:** + +1. **Insufficient Bot Permissions:** Ensure the bot has sufficient permissions to assign roles. Granting the bot Administrator permissions is the easiest way to resolve permission issues. + +2. **Role Hierarchy:** The bot's role (@Custom Command) must be higher in the server's role hierarchy than: + * The role the bot is trying to assign. + * All roles the member already has. + + You can adjust the role hierarchy in your Discord server settings. + + +**Still having trouble?** + +If these steps don't resolve the issue, please reach out to our staff on the [support server](https://ccommandsbot.com/join) for personalized assistance. \ No newline at end of file diff --git a/content/docs/Other/useful.mdx b/content/docs/Other/useful.mdx new file mode 100644 index 00000000..d10eb65a --- /dev/null +++ b/content/docs/Other/useful.mdx @@ -0,0 +1,63 @@ +--- +title: "Useful Information" +--- + +This page provides helpful information about the bot and this documentation itself. Let's get you started! + +## Understanding the Docs + +### Function Parameters Explained + + + + +Parameters are values that a function needs to operate correctly. Think of them as ingredients for a recipe. Let's look at the function `$giveRoles[userid;roleid]` as an example. + +* **Parameter 1: `userid`** - This is the unique ID of the user you want to give the role to. You can get this ID using the `$authorID` function, which returns the ID of the command executor. + +* **Parameter 2: `roleid`** - This is the ID of the role you want to give. You can copy the role ID directly from Discord or use the `$roleID[rolename]` function to get the ID by the role's name. + + + +#### Parameter Examples + +* **Multiple Parameters:** `$giveRoles[authorid;roleid1;roleid2;...]` + + * The `...` indicates that the function can accept multiple parameters of the same type (in this case, `roleid`). Each parameter is separated by a semicolon (`;`). + +* **Optional Parameters:** `$random[min;max;allowDecimals (yes/no)(optional, default=no)]` + + * `(optional)` means that the parameter is not required. + * `default=no` indicates the default value for the optional parameter. If you don't provide a value, the function will assume the default value (`no` in this case). + * You can simply omit the optional parameter if you want to use the default. + +### How Functions Work + +## Functions + +A function is a fundamental building block of your code. It performs a specific action. For example, to send a message to a channel, you might use the ``$channelSendMessage`` or ``$sendMessage`` function. To kick a member, you'd use ``$kick``. + +### Taking the Next Step: Triggers + +## Triggers + +Now that you understand the basic components, you need to choose a trigger. A trigger defines what action causes your code to run. + +| Trigger Type | Description | +| :------------------------------------------- | :------------------------------------------------------------------------------------------------------ | +| [On User Message](/Trigger/word_new) | Executes when a user sends a message containing a specific word or phrase. | +| [On Join/Leave](/Trigger/joinorleave) | Executes when a user joins or leaves your server. | +| [On Reaction](/Trigger/reaction) | Executes when a user reacts to a message. | +| [Voice](/Trigger/voicecondecon) | Executes when a user connects to or disconnects from a voice channel. | +| [Timed or Interval](/Trigger/time) | Executes repeatedly at a set interval or at a specific time. | +| [Button](/Trigger/button) | Executes when a user clicks a Discord button. | +| [Role add/remove](/Trigger/roleaddremove) | Executes when a user receives or loses a role. | +| [On Upvote](/Trigger/upvote) | Executes when someone upvote in Top.gg. | +| [User Command (Context Menu)](/Trigger/app_cmd_user) | Executes when someone select user command on the user. | +| [Message Command (Context Menu)](/Trigger/app_cmd_message) | Executes when someone select message command on the selected message. | + +| [Library](/Trigger/library) | Create A library | + +### Congratulations! Ready to Create? + +Now that you grasp the basics, let's create your first command! Head over to [this page](/Guide/1.create). \ No newline at end of file diff --git a/content/docs/Other/welcomer.mdx b/content/docs/Other/welcomer.mdx new file mode 100644 index 00000000..325be177 --- /dev/null +++ b/content/docs/Other/welcomer.mdx @@ -0,0 +1,47 @@ +--- +title: "Setting Up Welcomer" +--- + +Welcome to the Welcomer setup guide! This feature allows you to automatically send a custom message when a new member joins your server or when a member leaves. Let's walk through the process step-by-step. + +1. **Access the Welcomer Tab:** + + First, navigate to the dashboard and click on the `welcomer` tab. This will bring you to the Welcomer settings page. + + ![](/images/other/welcomer/1.png) + +2. **Configure Member Join/Leave Settings:** + + Within the Welcomer tab, you'll find a section labeled `Member Join/Leave`. This is where you customize the messages for when members join or leave your server. Set your desired custom details in this section, such as the welcome message, member goodbye message, and image. + + ![](/images/other/welcomer/2.png) + +3. **Select a Channel:** + + Next, you need to specify the channel where the welcome and leave messages will be sent. Click on the channel selection box. A dropdown menu will appear, displaying the available channels. + + ![](/images/other/welcomer/3.png) + +4. **Choose Your Channel:** + + Select the channel you want the messages to be sent to. In this example, `#general` is selected. You can choose any channel that your bot can *see* and has the necessary permissions to *send messages*. + + **Important:** Ensure the bot has the "Embed Links" and "Attach Files" permissions in the selected channel. This is crucial for the bot to be able to send rich embedded messages and images without any issues. + + ![](/images/other/welcomer/4.png) + +5. **Save or Deactivate:** + + * **Save:** Once you've configured your settings and chosen a channel, click the `Save` button to save your changes. Your Welcomer feature is now active! + + * **Deactivate:** If you want to temporarily disable the Welcomer, simply click the red "Deactivate" button. + + ![](/images/other/welcomer/5.png) + +6. **Example Outcome:** + + After saving, your Welcomer configuration should look similar to this, reflecting the channel and custom settings you've chosen: + + ![](/images/other/welcomer/6.png) + +That's it! You've successfully configured the Welcomer feature. New members joining or members leaving will now receive your personalized messages in the specified channel. Remember to adjust the settings as needed to keep your community welcoming and engaged. \ No newline at end of file diff --git a/content/docs/Templates/eco_bal.mdx b/content/docs/Templates/eco_bal.mdx new file mode 100644 index 00000000..17dec588 --- /dev/null +++ b/content/docs/Templates/eco_bal.mdx @@ -0,0 +1,19 @@ +--- +title: "Economy - Balance" +--- + +## Info: +A command for checking your economy balance + +## Configuration: +Trigger Type: `Message`
+Trigger: `/!(bal|balance)/gi`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `None`
+ +## Token: +Clone by using this command in your own server: `!!clone vFHnD` + +**Tags:** diff --git a/content/docs/Templates/eco_rob.mdx b/content/docs/Templates/eco_rob.mdx new file mode 100644 index 00000000..10625165 --- /dev/null +++ b/content/docs/Templates/eco_rob.mdx @@ -0,0 +1,19 @@ +--- +title: "Economy - Rob" +--- + +## Info: +A command for robbing someone + +## Configuration: +Trigger Type: `Message`
+Trigger: `/!(rob|robbery)/gi`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `None`
+ +## Token: +Clone by using this command in your own server: `!!clone XC5sK` + +**Tags:** diff --git a/content/docs/Templates/mod_ban.mdx b/content/docs/Templates/mod_ban.mdx new file mode 100644 index 00000000..907d3af6 --- /dev/null +++ b/content/docs/Templates/mod_ban.mdx @@ -0,0 +1,26 @@ +--- +title: "Moderation - Ban" +--- + +## Info: +A command for banning members from your server. + +## Configuration: +Trigger Type: `Word`
+Trigger: `!ban`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `None`
+ +## Clone: +Clone by using this command in your own server: `!!clone VyCfP` + + + +Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters + + + + +**Tags:** diff --git a/content/docs/Templates/mod_joinGate.mdx b/content/docs/Templates/mod_joinGate.mdx new file mode 100644 index 00000000..458b202e --- /dev/null +++ b/content/docs/Templates/mod_joinGate.mdx @@ -0,0 +1,19 @@ +--- +title: "Moderation - Captcha Verification" +--- + +## Info: +A command for verification before the user can join the server. + +## Configuration: +Trigger Type: `On Join/Leave`
+Trigger: `add`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `YOUR STAFF CHAT`
+ +## Clone: +Clone by using this command in your own server: `!!clone 5Tr2e` + +**Tags:** diff --git a/content/docs/Templates/mod_mute.mdx b/content/docs/Templates/mod_mute.mdx new file mode 100644 index 00000000..52390d4c --- /dev/null +++ b/content/docs/Templates/mod_mute.mdx @@ -0,0 +1,25 @@ +--- +title: "Moderation - Mute" +--- + +## Info: +A command for muting members from your server. + +## Configuration: +Trigger Type: `Word`
+Trigger: `/!(mute|shut)/gi`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `None`
+ +## Clone: +Clone by using this command in your own server: `!!clone Otk6C` + + + +Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters + + + +**Tags:** diff --git a/content/docs/Templates/mod_warn.mdx b/content/docs/Templates/mod_warn.mdx new file mode 100644 index 00000000..3b4ab6a0 --- /dev/null +++ b/content/docs/Templates/mod_warn.mdx @@ -0,0 +1,25 @@ +--- +title: "Moderation - Warn" +--- + +## Info: +A command for warning members from your server. + +## Configuration: +Trigger Type: `Word`
+Trigger: `/!(warn|warning)/gi`
+Min. Perms: `None`
+Ignored Roles: `None`
+Run Only In: `None`
+Channel Used: `None`
+ +## Clone: +Clone by using this command in your own server: `!!clone lpDsX` + + + +Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters + + + +**Tags:** diff --git a/content/docs/Trigger/1.triggers.mdx b/content/docs/Trigger/1.triggers.mdx new file mode 100644 index 00000000..bd4e1207 --- /dev/null +++ b/content/docs/Trigger/1.triggers.mdx @@ -0,0 +1,89 @@ +--- +title: "Triggers showcase" +--- + +Here's a quick preview of all available triggers: + +## On User Message + +[Triggers on specific words/patterns](/Trigger/word_new) +![Word](https://i.imgur.com/zQtDgDM.png) + +## Reaction + +[Fires once someone reacts to a message](/Trigger/reaction) +![](https://i.imgur.com/h1pe28J.gif) + +## Button + +[Detects users clicking buttons sent by the bot](/Trigger/button) +![](https://i.imgur.com/QrxFg8d.png) + +## Menu + +[Activates when someone confirms their choice in menu](/Trigger/menu) +![](https://i.imgur.com/7wZLMIq.gif) + +## Slash command + +[Responds to a discord slash command created with the bot](/Trigger/slash) +![](https://i.imgur.com/Hspy46H.gif) + +## Modal + +[Triggers on submittion of a modal (form) if that modal was sent by the bot](/Trigger/modal) +![](https://i.imgur.com/ON9e1D4.png) + +## Channel + +[Detects channels being added or removed](/Trigger/channel) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105138748414492772/channel-trigger.gif) + +## Role + +[Triggers on role assignment](/Trigger/roleaddremove) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105149730553614486/voice-trigger.gif) + +## Timed event + +[Executes the code at a set time](/Trigger/time) +![](https://cdn.discordapp.com/attachments/1105135517055594508/1105141376083038240/image.png) + +## Interval + +[Repeatedly executes the code once in a specific time (e.g every hour)](/Trigger/time) +![](https://cdn.discordapp.com/attachments/1100128432395927765/1116042286812385370/image.png) + +## Voice + +[Fires of when user leaves or joins a voice channel](/Trigger/voicecondecon) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105149730553614486/voice-trigger.gif) + +## Server boost + +[Detects people boosting the server](/Trigger/serverboost) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105142982270783587/image.png) + +## Join or Leave + +[Triggers when someone joins or leaves the server](/Trigger/joinorleave) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105143572510027806/image.png) + +## On Upvote + +[Triggers when someone upvote in Top.gg.](/Trigger/upvote) + +## User Command + +[Triggers when user command is selected from the user's context menu.](/Trigger/app_cmd_user) + +## Message Command + +[Triggers when user command is selected from the message's context menu.](/Trigger/app_cmd_message) + +## Library + +[A code which can be imported in any other code](/Trigger/library) +![](https://cdn.discordapp.com/attachments/957286111250624552/1105145858581872750/image.png) + +In this example $includeLibrary has been used to import a library called `tools` which contained a custom $embedMsg function. diff --git a/content/docs/Trigger/app_cmd_message.mdx b/content/docs/Trigger/app_cmd_message.mdx new file mode 100644 index 00000000..fce0c135 --- /dev/null +++ b/content/docs/Trigger/app_cmd_message.mdx @@ -0,0 +1,96 @@ +--- +title: "On Message Command (Context Menu)" +--- + +## Basic Information + +This trigger runs when a user selects your custom command from a **message's context menu**. + +The command is triggered by the user who selected the action, while the selected message becomes the **target** of the command. + +For example, if `@Mido` right-clicks a message from `@Zero` and selects your custom command: + +* `$userID` → User ID of Mido, the user who triggered the command +* `$eventTargetID` → Message ID of the selected message +* `$message` → The selected message content +* `$commandName` → The name of the context menu command + +## Syntax + +The trigger value is the **name of the context menu command**. + +For example: + +```text +Report Message +``` + +The command will appear as **Report Message** in the message's context menu. + +## Example + + +Create a new custom command and set its **Trigger Type** to **On Message Command (Context Menu)**. + +Set the trigger to: + +```text +Report Message +``` + +You can then use the selected message's ID to retrieve information about the message or perform actions related to it. + +For example: + +```cc +$interactionReply[Message reported successfully!] +``` + +![](/images/guide/app-msg-cmd/app_user_cmd_example.png) + +The selected message can be accessed using `$eventTargetID` or `$messageID`. + + +You can also use `$msg` to get information about the selected message, such as its author or content. + +For example: + +```cc +$interactionReply[Message by <@$msg[$eventTargetID;author]> has been reported!] +``` + +If `@Mido` selects **Report Message** on a message sent by `@Zero`, the command can access Zero's message and respond accordingly. + +### That's it! 🎉 + +### Command Limits + +Discord allows a maximum of **15 Message context-menu commands per server**. + +The command name must also be **unique among Message context-menu commands in that server**. + +For example, you can have: + +```text +Report Message +Delete Message +Quote Message +Translate Message +``` + +but you cannot register two Message context-menu commands with the same name. + + +## Some functions related to On Message Command + +`$userID`: Returns the ID of the user who triggered the context menu command. + +`$eventTargetID`: Returns the ID of the message selected from the context menu. + +`$messageID`: Returns the ID of the message selected from the context menu. + +`$commandName`: Returns the name of the context menu command that was triggered. This is the same as the command's trigger value. + +`$interactionReply`: Sends a reply to the context menu interaction. + +`$msg`: Provides information about the selected message, such as its author, content, and other message properties. diff --git a/content/docs/Trigger/app_cmd_user.mdx b/content/docs/Trigger/app_cmd_user.mdx new file mode 100644 index 00000000..4b2d1f82 --- /dev/null +++ b/content/docs/Trigger/app_cmd_user.mdx @@ -0,0 +1,80 @@ +--- +title: "On User Command (Context Menu)" +--- + +## Basic Information + +This trigger runs when a user selects your custom command from another user's **context menu**. + +The command is triggered by the user who selected the action, while the selected user becomes the **target** of the command. + +For example, if `@Mido` right-clicks `@Zero` and selects your custom command: + +* `$userID` → User ID of Mido, the user who triggered the command +* `$eventTargetID` → User ID of Zero, the selected target user +* `$commandName` → The name of the context menu command + +![](/images/guide/app-user-cmd/app_cmd_example.png) + +## Syntax + +The trigger value is the **name of the context menu command**. + +For example: + +```text +Promote User +``` + +The command will appear as **Promote User** in the user's context menu. + +## Example + +Create a new custom command and set its **Trigger Type** to **On User Command (Context Menu)**. + +Set the trigger to: + +```text +Promote User +``` + +You can then use the target user's ID to perform actions on them. + +For example: + +```cc +$giveRoles[$eventTargetID;Supporter] +$interactionReply[Promoted $mention[$eventTargetID] to Supporter!] +``` + +If `@Mido` selects **Promote User** on `@Zero`, the command will give the `Supporter` role to Zero. + +### That's it! 🎉 + +### Command Limits + +Discord allows a maximum of **15 User context-menu commands per server**. + +The command name must also be **unique among User context-menu commands in that server**. + +For example, you can have: + +```text +Promote User +Ban User +View Profile +Give Supporter +``` + +but you cannot register two User context-menu commands with the same name. + + +## Some functions related to On User Command + +`$userID`: Returns the ID of the user who triggered the context menu command. + +`$eventTargetID`: Returns the ID of the user selected from the context menu. + +`$commandName`: Returns the name of the context menu command that was triggered. This is the same as the command's trigger value. + +`$interactionReply`: Send the reply of the user command menu action diff --git a/content/docs/Trigger/button.mdx b/content/docs/Trigger/button.mdx new file mode 100644 index 00000000..ea54b945 --- /dev/null +++ b/content/docs/Trigger/button.mdx @@ -0,0 +1,58 @@ +--- +title: "Button Click" +--- + +This trigger type will detect when a user clicks a button. +The button has to be sent by the bot. + +#### Example of a button: +> ![](https://media.discordapp.net/attachments/772051120368910371/880527140817367070/first-button.gif) + + + +## Syntax +In order for a button command to work, there must be a button ID specified. Here's how you can provide it: + +| Name | Syntax | Example | Explanation | +| --- | --- | --- | --- | +| Single ID | `button ID` | `staff-app` | Detects a button with "staff-app" ID | +| Multiple IDs | `buttonID\|buttonID` | `Apple\|Banana\|Orange` | Matches a buttons with IDs: "Apple", "Banana", or "Orange" | +| Regex | `/RegExp/` | `/User-\d{18,}/` | Will trigger on any button following the pattern "User-ID" like "User-434342521997492224" | + + + + +All button IDs are CASE SENSITIVE, so a if a command doesn't trigger, check the capitalization! + + + + + +Button commands use regex to match the button ID, so commands with IDs with similiar beginnings may interfere. + +#### For Example: +Let's say we have two buttons with the following IDs: + +* `test` +* `testone` + +If we had a command `Button: test` both buttons will trigger it. + +##### Resolving the Problem +Just change your id to `^id$` +In regex ^ and $ are used to match the start and end of the string. + + + +### Related Functions +* `$button` - sends a button +* `$buttonID` - returns the button id +* `$buttonEmoji` - returns the button emoji +* `$buttonLabel` - returns the button label +* `$buttonURL` - returns the button url +* `$buttonStyle` - returns the button style +* `$buttonIsDisabled` - returns whetheer the button disabled + +## More Info + +Do you want to know more about the bot's syntax? You can check out [this](/Other/syntax) page to learn more! diff --git a/content/docs/Trigger/channel.mdx b/content/docs/Trigger/channel.mdx new file mode 100644 index 00000000..249e8652 --- /dev/null +++ b/content/docs/Trigger/channel.mdx @@ -0,0 +1,41 @@ +--- +title: "Channel add/remove" +--- + +## Syntax +Use this syntax to let the bot trigger when a channel is added or removed or both + +` ` (empty) -> trigger when channel is removed or added + +`add` -> trigger when a channel is created + +`add=category id` -> trigger when a channel is being created in category with id `category id` + +`add, channel type` -> trigger when new channel/thread of certain type created, such as `post, text, voice, category,..` + + +`remove` -> trigger when a channel is removed +`remove, channel type` -> trigger when certain type of channel is being removed like `post, text, voice, category` + +`remove=category id` -> trigger when a channel is being deleted in category with id `category id` + + + +You can see the whole list [here.](/CodeReferences/ref.channel_types) + + + +## Related Functions +The following list is functions that you might need: + +`$eventChannelID`: will return the channel id that got created/removed + +`$eventChannelParent`: will return the channel's category id + +## Example +### Let's make a command with `add` as value to only trigger when someone create channel +### and post it in `log` channel +![Example Image](https://i.imgur.com/yCoWNFr.png) + +### the output when i create a channel named `newly-born` +![Output Image](https://i.imgur.com/R4bgKyv.png) diff --git a/content/docs/Trigger/joinorleave.mdx b/content/docs/Trigger/joinorleave.mdx new file mode 100644 index 00000000..e152cc63 --- /dev/null +++ b/content/docs/Trigger/joinorleave.mdx @@ -0,0 +1,54 @@ +--- +title: "On Join/Leave" +--- + +This trigger type will trigger when a user joins or leaves the server depending on your configuration. + + + +Custom bots using Tier 3+ are required to have the `Guild Members` intent enabled for this trigger to work. + + + +## Example + +Select when to trigger, and choose a channel where this command will be executed. + +![](/images/triggers/join-leave/0.png) + +Enter code: + +```cc +Hello $displayName! Welcome to our server. +``` + +## Testing + +Wait for a user to join and see if it worked! + + + +Hello Member! Welcome to our server. + + + + + +For member joins/leaves you can use `!!emit` command to trigger the On Join/Leave trigger. + + + + + +!!emit uadd + + +Hello Member! Welcome to our server. + + + + + + +For Tier 3+, This trigger require `Server Members Intent` enabled for your custom bot + \ No newline at end of file diff --git a/content/docs/Trigger/library.mdx b/content/docs/Trigger/library.mdx new file mode 100644 index 00000000..3d091d3d --- /dev/null +++ b/content/docs/Trigger/library.mdx @@ -0,0 +1,36 @@ +--- +title: "Library" +--- + +## Basic Information +Library is one of the unique triggers, that doesn't get triggered by events in your server. A library can be included (referenced) in other commands so you can use the code in it after calling `$includeLibrary[Library name]`. + +The goal of this trigger is simply sharing code, functions or objects across multiple custom commands (see the example below). + +## Syntax +The value of the trigger is the `Library name`. + +## Example +### Create your library that contains users' information +> Note that the library name is `users`. We will use it in next step. + +![](https://i.imgur.com/93WZesG.png) + +### Create a normal word command `whois` +First, let's include the library, with `$includeLibrary`. +After including, we can directly use the object defined in the library and retrieve some information to display. + +![](https://i.imgur.com/KQbkjrS.png) + +### Output +![](https://i.imgur.com/v9DT5xR.png) + +## What is the point? +In this example the object is only used in a single custom command. But at some point you might want to add another custom command using the same object, e.g. `listusers` sending a message with all users in it. When the object changes, e.g. you want to add another user to it, then you'll have to update the object in all custom commands accordingly. This takes time and there's a chance errors get introduced or one of the custom commands using this object is missed and now uses a different object. With a library you can use the same object across all these commands without having to copy it to each. Updating the object is done in a single place and all custom commands referencing (including) the library `users` will use the updated object at the same time. + +In the same way you can also define functions in a library to share code across multiple custom commands. + +That demonstrates a library's usefulness. + +## Some functions related to Library +`$includeLibrary`: Include your library diff --git a/content/docs/Trigger/menu.mdx b/content/docs/Trigger/menu.mdx new file mode 100644 index 00000000..8675533e --- /dev/null +++ b/content/docs/Trigger/menu.mdx @@ -0,0 +1,34 @@ +--- +title: "Menu Interaction" +--- + +## Basic Information +This trigger type will trigger when a user selects an option in a menu. + +## Syntax +the value is the menu id, for example: + +`test` -> will trigger only when a user selects an option in a menu with id `test` + +`menu_1|menu_2` -> will trigger only when a user selects an option in a menu with id `menu_1` or `menu_2` + +## Example +### let's first send a menu (with id mymenu) with some options using `$selectMenu` +![](https://i.imgur.com/TqPNG4N.png) + +### let's make a new command to respond when user select an option in this menu +Trigger type to be `Menu`, Trigger value to be the menu id, in this case `mymenu` + +Now to know which option the user selected, we will use a function `$eventSelected` + +![](https://i.imgur.com/G41cLKl.png) + +### now save and let's test by selecting rake +![](https://i.imgur.com/ZulHZJz.gif) + +### that's it! :tada: + +## Some functions related to Menu Trigger +`$eventSelected`: Return the option's value that user selected + +`$menuId`: Return the menu id that triggered the command diff --git a/content/docs/Trigger/meta.json b/content/docs/Trigger/meta.json new file mode 100644 index 00000000..9a774247 --- /dev/null +++ b/content/docs/Trigger/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Trigger Types", + "pages": ["..."] +} diff --git a/content/docs/Trigger/modal.mdx b/content/docs/Trigger/modal.mdx new file mode 100644 index 00000000..7c01002e --- /dev/null +++ b/content/docs/Trigger/modal.mdx @@ -0,0 +1,49 @@ +--- +title: "Modal (Form) Interaction" +--- + +## Basic Information +This trigger type will trigger when a user submits a modal. + +## Syntax +the value is the modal id, for example: + +`modal_1` -> will trigger only when a user submits a modal with id `modal_1` + +`modal_1|modal_2` -> will trigger only when a user submits a modal with id `modal_1` or `modal_2` + +## Example +### let's first send a button (with id apply-form) using `$button` +![](https://i.imgur.com/Pmvl0XZ.png) + +### let's make a command to send a modal (with id mymodal) when user click the button using `$modal` +![](https://i.imgur.com/T4fpwhF.png) + +#### And that's what will happen when user click on the button +![](https://i.imgur.com/Z6fbIsU.png) + +### now let's make a new command to respond to the modal submit +Trigger type to be `Modal`, Trigger value to be the modal id, in this case `mymodal` + +To get what user input in the modal, we will use `$modalAnswer` + +![](https://i.imgur.com/nWI9q9E.png) + +### now save and test by submitting the modal +![](https://i.imgur.com/val8aUC.png) + +### that's it! :tada: + +## Some functions related to Modal Trigger +`$modalID`: Return the modal's id that triggered the command + +`$modalAnswer`: Return a data user input in submitting the modal + + + +You need to send a modal with `$modal` within 1 second of button/menu/slash execution + + + +**Tags:** + diff --git a/content/docs/Trigger/poll.mdx b/content/docs/Trigger/poll.mdx new file mode 100644 index 00000000..3f59f168 --- /dev/null +++ b/content/docs/Trigger/poll.mdx @@ -0,0 +1,21 @@ +--- +title: "Poll Updates Trigger" +--- + +It trigger when a changes happen to a poll, like when it ends + +## When Poll End +To make a command to trigger when a poll ends. + +### Example +* Make a new command and select trigger type to be "Poll Updates" +![](https://i.imgur.com/NpwFuNZ.png) + +* for trigger, select "When Poll Ends" +![](https://i.imgur.com/ZwUoy2i.png) + +* for code, you can get the poll information with `$poll`, here is an example +![](https://i.imgur.com/gWLjPrS.png) + +### Output +![](https://i.imgur.com/4SbvPJL.png) diff --git a/content/docs/Trigger/reaction.mdx b/content/docs/Trigger/reaction.mdx new file mode 100644 index 00000000..3d866e02 --- /dev/null +++ b/content/docs/Trigger/reaction.mdx @@ -0,0 +1,68 @@ +--- +title: "User Reaction" +--- + +## Introduction +triggers when user react/unreact with certain emoji + +## Trigger When User React With Emoji +### Single Emoji +To set it to trigger when user react with a certain emoji (i.e 👍), set trigger to: add, emoji\ +Example: +![](https://i.imgur.com/PZEM5gu.png) + +### Multiple Emojis +To trigger on multiple emojis, set trigger to: add, Emoji1|Emoji2|Emoji3..\ +For example, to set it to trigger on :+1: and :-1:: +![](https://i.imgur.com/REenf8E.png) + +### Using Custom Emoji +You can use the custom emoji name like `wave` or the id like `123456` + +## Trigger When User Remove Reaction +### Single Emoji +To set it to trigger when user remove his reaction of certain emoji (i.e 👍), set trigger to: remove, emoji\ +![](https://i.imgur.com/KaucN95.png) + +### Multiple Emojis +To trigger on multiple emojis, set trigger to: remove, Emoji1|Emoji2|Emoji3..\ +For example, to set it to trigger on :+1: and :-1:: +![](https://i.imgur.com/dmLSHrT.png) + +## Trigger When User React/Unreact +### Single Emoji +To set it to trigger when user react with certain emoji (i.e 👍), set trigger to: `emoji`\ +Example: +![](https://i.imgur.com/zm0pjt2.png) + +### Multiple Emojis +To trigger on multiple emojis, set trigger to: Emoji1|Emoji2|Emoji3..\ +For example, to set it to trigger on :+1: and :-1:: +![](https://i.imgur.com/jxmlsg6.png) + +## Trigger On React On Specific Message +To make the bot to trigger only when someone react/unreact on specific message, you can set it by adding `=message id` to the trigger\ +example 1 (on react): `add, 👍=123456790` +example 2 (on unreact): `remove, 👍=123456790` + +## Example 1: Reaction Role +Let's design simple reaction role command, we will set it to give user role `Role1` when he reacts with :+1: +### Steps +1. Send your message +![](https://i.imgur.com/CGYgmH6.png) + +2. Copy the message ID (in this example it's 1091151883432890408) +![](https://i.imgur.com/Vh8Gy55.png) + +3. Create reaction command and set trigger:`add, 👍=1091151883432890408` +![](https://i.imgur.com/l35avTX.png) + +4. Set the code to be: `$giveRoles[$authorID;Role1]` +![](https://i.imgur.com/N16xPAa.png) + +5. Test it by reacting with :+1: + +That's it :tada: + +## Example 2: I Agree +![](https://cdn.discordapp.com/attachments/772051120368910371/882201196000084018/first_reaction.gif) diff --git a/content/docs/Trigger/roleaddremove.mdx b/content/docs/Trigger/roleaddremove.mdx new file mode 100644 index 00000000..d2110063 --- /dev/null +++ b/content/docs/Trigger/roleaddremove.mdx @@ -0,0 +1,87 @@ +--- +title: "Role Given/Taken" +--- + +This trigger runs when someone gets or loses a role. + + +## Role given +Let's make a command, which will log everytime someone receives a Role1 +1. Set the trigger to `add, Role1` + +![](https://i.imgur.com/MevZIW3.png) + +2. Set the code to: +```cc +$username received $roleName role +``` +![](https://i.imgur.com/WezSkrK.png) + +3. Set channel used to any channel you want the message to be sent to + +![](https://i.imgur.com/sUgGUAc.png) + +#### Output (When user get Role1): +![](https://i.imgur.com/0PYZ2pA.png) + + +## Role taken +Here's how to detect a specific role being taken from anybody. + +1. Set Trigger Value: `remove, Role1` + +![](https://i.imgur.com/dt0kSdJ.png) + +2. Set code to: `$roleName` Role was removed from $mention + +![](https://i.imgur.com/yqZAk54.png) + +3. Set channel used to any channel you want the message to be sent to + +![](https://i.imgur.com/sUgGUAc.png) + +#### Output (Role1 get removed from user): +![](https://i.imgur.com/UbKVguz.png) + +## Mutliple roles +You can make trigger on multiple roles by using this format: `Role1|Role2|Role3` +Like this example +1. Set Trigger Value: `add, Role1|Role2` + +Which means trigger when user receive role `Role1` or `Role2` + +![](https://i.imgur.com/3X3aFyJ.png) + +2. Set code to: $username received $roleName Role + +![](https://i.imgur.com/WezSkrK.png) + +3. Set channel used to any channel you want the message to be sent to + +![](https://i.imgur.com/sUgGUAc.png) + +#### Output (When user get Role1 or Role2): +![](https://i.imgur.com/UpUZYbA.png) + + +## Summary +As you already know how the role trigger works, here is a summary of this trigger. + +Role trigger will work with no input at all, but you can restrict the command to be executed meet some conditons: +| Syntax | Explanation | +| --- | --- | +|![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512115627925564/image.png) | Command will trigger regardless of what role has been given or taken | +| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512172456542298/image.png) | Detects when someone gets or loses "Member" role | +| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512354392866816/image.png) | Works if any role has been assigned | +| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512392464576602/image.png) | Activates when someone loses any role | +| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512279751036989/image.png) | Triggers when some gets role with 1013004735193808988 ID | +| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512476895920288/image.png) | Fires off when someone loses "Admin" role | + +### Role input +To specify a role you can either use an ID or it's name. +But be aware, all role names are case sensitive, so a if a command doesn't trigger, check the capitalization! + +### Multiple roles +You can make your command trigger on any provided roles by putting role names/ids separated by "|". + +For example `Admin|Moderator`, will take effect either on Admin or Moderator role. diff --git a/content/docs/Trigger/scheduled_event.mdx b/content/docs/Trigger/scheduled_event.mdx new file mode 100644 index 00000000..80a4c964 --- /dev/null +++ b/content/docs/Trigger/scheduled_event.mdx @@ -0,0 +1,53 @@ +--- +title: "Scheduled Event Updates Trigger" +--- + +It trigger when a changes happen to a scheduled event, like when it starts + +## Trigger Actions +### When Event Created +To make a command to trigger when an event created. + +#### Steps +* Make a new command from dashboard +* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Created" +![](https://i.imgur.com/Jo8zSbo.png) + +#### Output +![](https://i.imgur.com/u6PHB6f.png) + +### When Event Starts +To make a command to trigger when an event starts. + +#### Steps +* Make a new command from dashboard +* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Starts" +![](https://i.imgur.com/5yBYc22.png) + +#### Output +![](https://i.imgur.com/lyQvg2L.png) + +### When Event Ends +To make a command to trigger when an event ends. + +#### Steps +* Make a new command from dashboard +* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Ends" +![](https://i.imgur.com/U2Jc4Pt.png) + +#### Output +![](https://i.imgur.com/vQheImh.png) + +### When Event Cancelled +To make a command to trigger when an event got cancelled. + +#### Steps +* Make a new command from dashboard +* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Cancelled" +![](https://i.imgur.com/st8K9tb.png) + +#### Output +![](https://i.imgur.com/u6PHB6f.png) + +## Multiple Actions +You can select multiple actions at once, if you want to trigger when any action got detected. \ No newline at end of file diff --git a/content/docs/Trigger/serverboost.mdx b/content/docs/Trigger/serverboost.mdx new file mode 100644 index 00000000..161d015c --- /dev/null +++ b/content/docs/Trigger/serverboost.mdx @@ -0,0 +1,20 @@ +--- +title: "On Server Boost" +--- + +This trigger will trigger when someone boosts or removes boost from your server. + +![](/images/triggers/boost/0.png) + +## User boost the server + +Triggers when user boosts your server. + +## User unboost the server + +Triggers when user unboosts your server. + + + +For Tier 3+, This trigger require `Server Members Intent` enabled for your custom bot + \ No newline at end of file diff --git a/content/docs/Trigger/slash.mdx b/content/docs/Trigger/slash.mdx new file mode 100644 index 00000000..6733ee22 --- /dev/null +++ b/content/docs/Trigger/slash.mdx @@ -0,0 +1,116 @@ +--- +title: "Slash Command" +--- + +# Introduction +triggers when a user uses a slash command. This needs to be a slash command from the bot. + +## Creating a slash command +In this example we will create an `/avatar` command, that shows the user's avatar +![](https://i.imgur.com/MtHPQWd.png) + +### Steps +1. Go to dashboard, your server page, click on Slash Command Builder +![](https://i.imgur.com/L2dnA5D.png) + +2. Click `Create` +![](https://i.imgur.com/GlwHeER.png) + +3. Fill the slash name and description +![](https://i.imgur.com/LL52VH2.png) + +4. To add user option, to the slash, select from the option menu +![](https://i.imgur.com/q2BEFHo.png) + +5. Select the User option (make sure background is blue) +![](https://i.imgur.com/O2W1v6N.png) + +6. Fill the option name, description, remember this name, we will use it later +![](https://i.imgur.com/XHGMvnM.png) + +7. Click `Deploy Command/Save` +![](https://i.imgur.com/PwJ8kLv.png) + +8. Create a new custom command, select type to be `Slash Command` and select your slash command from the dropdown in `Trigger` +![](https://i.imgur.com/YF6EfSY.png) + +9. Set the code to be executed when the slash command is used + + + + +```cc + $let[user_id;$getOption[user]] + $interactionReply[ + {title:Avatar of $usertag[$user_id]} + {image:$userAvatar[$user_id]} + ] +``` + + + + +10. go to your server and use the command as follows: +![](https://i.imgur.com/XZTeNVO.png) + + +## Output +![](https://i.imgur.com/MtHPQWd.png) + + +## Code Explanation +### Retrieving the option from user +When a user uses the command like in Step 10, we can retrieve the option through the `$getOption` function: +```cc +$getOption[option name] +``` +In our example `option name` is `user` from step 6\ +then the user id will be stored in a temporary variable named`user_id` using `$let`, this way we can recall it later in the code through `$user_id`: +```cc + $let[user_id;$getOption[user]] +``` + +### Sending Message +Next, to send a message with [$interactionReply[message]](/Interaction/interactionReply)\ +Here we will send an embed with a title and image using \{title} and \{image} [Curl Message Format](/CodeReferences/ref.message_curl_format): +```cc +$interactionReply[ + {title:Embed Title} + {image:Embed Image} +] +``` + +1. In title we want to set it to: Avatar of Mido#1234\ +To get the username `Mido#1234` we will use [$userTag[user id]](/Member/userTag), to specifiy the user we will use `$user_id`: +```cc +Avatar of $userTag[$user_id] +``` + +2. In Image to retrieve the user avatar, we will use [$userAvatar[user id]](/Member/userAvatar): +```cc +$userAvatar[$user_id] +``` + +Whole code: +```cc + $let[user_id;$getOption[user]] + $interactionReply[ + {title:Avatar of $usertag[$user_id]} + {image:$userAvatar[$user_id]} + ] +``` + + +## Example 2: Sending Private Message +Let's modify the previous code, to make him reply in private to user instead like this: +![](https://i.imgur.com/SsFJHfv.png) + +$interactionReply accept 2 inputs by default: message, ephemeral\ +in the previous example we only used the first message, and 2nd input was by default `no`\ +To send the message in private we have to set the 2nd input `ephemeral` to `yes` +![](https://i.imgur.com/I2ZuKB5.png) + +That's it, Save and test it out + +### Output +![](https://i.imgur.com/SsFJHfv.png) diff --git a/content/docs/Trigger/time.mdx b/content/docs/Trigger/time.mdx new file mode 100644 index 00000000..cfb08308 --- /dev/null +++ b/content/docs/Trigger/time.mdx @@ -0,0 +1,47 @@ +--- +title: "Timed or Interval" +--- + +## Interval: Basic Information +This trigger type will execute a command once per x time. + +#### Example of an interval trigger: + +![](https://cdn.discordapp.com/attachments/772051120368910371/880525770710220872/first-interval.gif) + +## Timed Event: Syntax +Use this syntax to let the bot know how long it should wait until execution! + +You can specify any time in the following format: + +``` +1s -> execute after 1 second +1m -> execute after 1 minute +1h -> execute after 1 hour +1d -> execute after 1 day +1y -> execute after 1 year +``` + +## Interval: Syntax +Use this syntax to let the bot know how long it should wait until the next command execution! + +You can specify any time in the following format: + +``` +1s -> execute after 1 second +1m -> execute after 1 minute +1h -> execute after 1 hour +1d -> execute after 1 day +1y -> execute after 1 year +``` + + + + +Set a channel used, otherwise errors will not be sent anywhere! This makes bug fixing really difficult! + + + +## More Info + +Do you want to know more about the bot's syntax? You can check out [this](/Other/syntax) page to learn more! diff --git a/content/docs/Trigger/timeout.mdx b/content/docs/Trigger/timeout.mdx new file mode 100644 index 00000000..b9a57327 --- /dev/null +++ b/content/docs/Trigger/timeout.mdx @@ -0,0 +1,13 @@ +--- +title: "On Timeout" +--- + +This trigger fires whenever a member's timeout status changes. + +## User Timeout Set + +Activates when a member is placed in a timeout. + +## User Timeout Removed + +Activates when a timeout is removed from a member. diff --git a/content/docs/Trigger/upvote.mdx b/content/docs/Trigger/upvote.mdx new file mode 100644 index 00000000..45b78a86 --- /dev/null +++ b/content/docs/Trigger/upvote.mdx @@ -0,0 +1,42 @@ +--- +title: "On Upvote" +--- + +## Basic Information + +This trigger runs when a user votes for the bot using a server referral link + +To trigger this event, the user **must be a member of the server at the time of voting**. + +## Syntax + +This trigger does not use a trigger value. + +## Example + +Create a new custom command and set its **Trigger Type** to **On Upvote**. + +Copy the link displayed to use it in other commands. You can then reward the voter, thank them, or perform any other action. + +For example: + +```cc +$giveRoles[$userID;Supporter] +Thanks for supporting the server, <@$userID>! ❤️ +``` + +### That's it! 🎉 + + + +You can test this trigger using the `!!emit upvote` command. + + + +## Some functions related to On Upvote + +`$userID`: Returns the ID of the user who voted. + +`$upvoteReferralUserID`: Returns the ID of the user whose referral link was used, if any. + +`$upvoteTime`: Returns the Unix timestamp (milliseconds) when the vote was received. diff --git a/content/docs/Trigger/voicecondecon.mdx b/content/docs/Trigger/voicecondecon.mdx new file mode 100644 index 00000000..181e28a5 --- /dev/null +++ b/content/docs/Trigger/voicecondecon.mdx @@ -0,0 +1,38 @@ +--- +title: "Voice Join/Leave" +--- + +## Basic Information +This trigger type will trigger when a user joins or leaves a voice channel. + +#### Example of a voice join trigger: + +![](https://cdn.discordapp.com/attachments/772051120368910371/882213865201475614/first_voice.gif) + + +## Main Syntax +Use this syntax to let the bot trigger when a user joins/leaves a voice channel! + +`join` -> the command will trigger when a voice channel is joined + + +`leave` -> the command will trigger when a member left a voice channel + +`join/leave=voice channel id` -> will only trigger when user joins/leaves this specific voice channel + + + +Because this is a special event type, you CANNOT use `$channelID` to return the channel that was joined! Use `$voiceChannelID` instead + + + + + + +Set a channel used, otherwise errors will not be sent anywhere! This makes bug fixing really difficult! + + + +## More Info + +Do you want to know more about the bot's syntax? You can check out [this](/Other/syntax) page to learn more! diff --git a/content/docs/Trigger/word.mdx b/content/docs/Trigger/word.mdx new file mode 100644 index 00000000..9077c2c6 --- /dev/null +++ b/content/docs/Trigger/word.mdx @@ -0,0 +1,370 @@ +--- +title: "Word Trigger" +--- + + + +This trigger is depreciated, consider using then new 'On User Message' trigger, [Learn more](./word_new.mdx). + +Word commands, also known as message commands are executed when the bot receives a text message. + +## Basic word command +Let's create a word command with a trigger `!ping`, this means the command will be triggered whenever someone sends a message starting with `!ping`. +In the code part we will type `pong!`, so the bot will respond with it. + +![Word example](https://i.imgur.com/0ndhYaw.png) + + + +!ping + + +pong! + + + +## Using parameters +A crucial feature of the word type are parameters. They are data provided when executing the command. + +Let's say we had a `?hug` command, which users can use to hug other users. +In that case we would want users to select a user by mentioning him. + +#### Usage +The mention will be the `parameter 1`, because users will mention their victim right after the ?hug keyword. + + +?hug fajfaj + + + +#### Setup +Parameters can be retrieved using the `$message` function, we will use it to get the user mention: + +![?hug code](https://i.imgur.com/zXDpUmI.png) + +#### Result +Here's how the final command should look like: + + +?hug fajfaj + + +Member hugs fajfaj + + + +## Case insensitivity +Sometimes we don't want to bother users with using correct capitalisation. + +#### How does it work? +Case sensivity can be disabled by adding `|i` after the trigger. In our case `?hello` will be changed to `?hello|i` + +#### Example +Here's how to make a case insensitive `?hello` command, that will respond with a simple `Hello @user` message. + +![?hello command](https://cdn.discordapp.com/attachments/1100128432395927765/1100823468720795678/hello.png) + +Let's test different variations: + + + +?hello + + +Hello Member! + + +?HELLO + + +Hello Member! + + +?HeLLo + + +Hello Member! + + + + +Works perfectly! + +## Multiple words +Sometimes we want the bot to trigger on multiple words, by separating them with `|` + +Let's say we want our [Hug command](#using-parameters) to trigger on: ?hug, ?abrazo, and ?étreinte. + +#### How can we do that? +We can do that with the following trigger: +```cc +?hug|?abrazo|?étreinte +``` + +![](https://cdn.discordapp.com/attachments/1100128432395927765/1100827624978260059/hugcmd.png) + +Let's test it out: + + + +?hug fajfaj + + +Member hugs fajfaj + + +?abrazo fajfaj + + +Member hugs fajfaj + + +?étreinte fajfaj + + +Member hugs fajfaj + + + +Works as expected! + +## Regex match +The word trigger can also contain regex expressions for various dynamic triggers. + + + +Don't worry if you don't know what it is. Regex is a pretty advanced topic, and is not necessary in most cases. + +However if you want to learn more about regex, you can learn it from some internet guides [like this one](https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285) and regex playgrounds [like this one](https://regex101.com). + + + +### Ping detector +Regex has thousands of use cases, but here we will discuss using regex to trigger on a mention anywhere in the message. + +#### User mentions +Bots can only see mentions as a string like: `<@434342521997492224>`, or `<@!434342521997492224>`, so we have to design our expression to catch this form. + +#### Trigger +Here is the expression which we are going to use: +* `?` - the previous character is optional +* `\d` - any number +* `{18,}` - the previous character has to appear 18 or more times + +```regex +/<@!?\d{18,}>/ +``` +You need to add a forward slash before and after your expression, otherwise the bot will only reply when you literally send `<@!?\d{18,}>` in your message + +![Ping detector](https://i.imgur.com/TwgDMNI.png) + +Let's try sending some mentions: + + + +Hey fajfaj! How is it going? + + +You've pinged someone! + + +Mido, have you found your chocolate yet? + + +You've pinged someone! + + + +It detects all of them! + +## Trigger when a message has attachment +This can be done using `%has_attachment%` as trigger, it makes the command execute when a message contains an attachment. + +### Example +![](https://i.imgur.com/41Q7lMg.png) + +### Output +![](https://i.imgur.com/aaP2nVM.png) + +## Trigger when pinned message is sent +This can be done using `%pin%` as trigger, it makes the command execute when discord send a message when a message get pinned. + +### Example +![](https://i.imgur.com/VNhSEQ2.png) + +### Output +![](https://i.imgur.com/YxFWWym.png) + +## Trigger when thread is created +This can be done using `%thread_created%` as trigger, it makes the command execute when discord send a message when a thread get created. + +### Example +![](https://i.imgur.com/VhBExwB.png) + +### Output +![](https://i.imgur.com/WszJWXs.png) + +## Trigger when a poll is sent +This can be done using `%has_poll%` as trigger, it makes the command execute when a user send a poll. + +### Example +![](https://i.imgur.com/2tDlcML.png) + +### Output +![](https://i.imgur.com/BLj6YY3.png) + +## Trigger on Discord AutoMod Action +This can be done using `%automod_action%` as trigger, it makes the command execute when a user triggers a Discord AutoMod rule. The user who is flagged is the command executor. + +### Example +![](https://i.imgur.com/dCld7bp.png) + +### Output +![](https://i.imgur.com/YiF8lMH.png) + + +## Any message +From time to time you may not know what the message content will be, you can make cc trigger to any message sent in a channel. + +### How does it work? +This can be done using `%all%` trigger, it makes the command execute regardless of the content. + +### Message complimenter +Let's make a command which will randomly compliment every sent message to a specific channel. + +To randomize the output, we will use `$randomText` function, and to restrict the channels we will use the `Run only in` dropdown menu: + +![Message complimenter](https://cdn.discordapp.com/attachments/957286111250624552/1100843662801379389/msgcompliment.png) + +Let's see if we get any compliments: + + + +How is it going? + + +Cool message! + + +Does anyone here have a monkey as a pet? + + +Wonderful punctuation! + + + +Amazing, we've just got complimented by the bot automatically. + +### 🎉 Congratulations +If you read all of the information above, you became a real word trigger master! + +## Summary +As we got through all the examples, here's a summary of the word trigger: + +| Name | Syntax | Example | Explanation | +| - | - | - | - | +| Word | `word` | `!ping` | Triggers on a message starting with !ping | +| Multiple words | `word\|word...` | `!ban\|!unfriend\|!gulag` | Fires off on !ban, !unfriend or !gulag | +| Case insensitive | `word\|i` | `apple\|i` | Matches with apple and any case variations like ApPLe | +| Regex | `/RegExp/` | `/<@&\d{18,}>/` | Detects a user mention anywhere in a message | +| Any message* | `%all%` | `%all%` | Triggers on **ANY** message | +| Message Pin | `%pin%` | `%pin%` | Triggers on Discord system pin message | +| Thread Creation | `%thread_created%` | `%thread_created%` | Triggers on Discord system thread creation message | +| Message with Attachment | `%has_attachment%` | `%has_attachment%` | Triggers when user's message has an attachnment | +| Message With Poll | `%has_poll%` | `%has_poll%` | Triggers when a user sends a poll | +| Automod Action | `%automod_action%` | `%automod_action%` | Triggers when a user violates Discord AutoMod rules | + + + +In word trigger (besides Regex) you are not allowed to put more than one word. All other words are interpreted as parameters, and cannot overlap with the trigger. + + + + + +Using `%all%` will result in a slight spam of cooldown messages, and might occasionally override your other commands. + +We strongly advise you to set the `Run only in` dropdown menu to specific channel(s). + +To get rid of the cooldown messages completely, you can either set a channel slowmode, or get yourself a [premium bot](https://ccommandbot.com/perks). + + + + +### Continue reading +Here are some pages that might come in handy if you still have some doubts about the word trigger: +* [!report](/Tutorials/3.report) - word command tutorial +* `$message` - loading parameters +* `$msg` - to load info about the message + + + + +{/* ## User Inputs +Now, let's make another command `?hug @user`, this command should give a hug to another user. + +let's create a new command and set the trigger settings as below:\ +![](https://i.imgur.com/iK8yRXP.png) + +as for code, let's make it simple response like: `$mention hugs someone`:\ +![](https://i.imgur.com/GGFKqVR.png) + +here is the result: +![](https://i.imgur.com/BK8qolm.png) + +but how we can take the mentioned user and replace `someone` with `@user`? + +you can do that through `$message` function, this function return you any word the user for example:\ +if user sent: ?cmd This bot is amazing! +> $message[1] will be replaced with `this`\ +$message[2] will be replaced with `bot`\ +$message[3] will be replaced with `is`\ +$message[4] will be replaced with `amazing!` + +and so on, so for command `?hug @user` +to get the `@user` part we will use $message[1] + +so code will be: +![](https://i.imgur.com/FCfSQVr.png) + + +let's test it out: +![](https://i.imgur.com/SXdOdM0.png) + +Yay! */} + +{/* Section below covered with trigger|trigger */} + + +{/* Will be moved to tutorials */} +{/* ## Example: Report Command +let's assume we want to make a report command, where user can report other with a reason like: `?report @user ` + +so trigger setting will be like this: +![](https://i.imgur.com/4cGQdgN.png) + +as for code, we will use `$message[1]` to get `@user` +and `$message[2]` to get `` + +like this: +![](https://i.imgur.com/i45qJkX.png) + +let's try it out: +![](https://i.imgur.com/sMolPyQ.png) + +Oh, it didn't work as expected, why is that? +simply because $message[2] will get us the 2nd word, which indeed `he's`, so how we can get the rest of the phrase + +you can do so through `$message[2+]`, which means get 2nd word and what after it, so code after adjusting: +![](https://i.imgur.com/gmoZ074.png) + +let's try it out: +![](https://i.imgur.com/KZBeAVT.png) + +Yay! works well. */} + + +For Tier 3+, This trigger require `Message Content Intent` enabled for your custom bot + + + diff --git a/content/docs/Trigger/word_new.mdx b/content/docs/Trigger/word_new.mdx new file mode 100644 index 00000000..ce33e65f --- /dev/null +++ b/content/docs/Trigger/word_new.mdx @@ -0,0 +1,505 @@ +--- +title: "On User Message Trigger" +--- + +Message triggers allow you to execute a custom command when a message matches a specific condition. + +message triggers can detect different types of messages, such as messages starting with specific text, messages containing attachments, polls, mentions, Discord system messages, and more. + +## Example +![](/images/guide/word-new-trigger/word_new_contains.png) + +## How message triggers work + +When creating a message trigger, you can choose how the message should be matched. + +The available options are: + +| Type | Description | +| ---------------------------------- | ---------------------------------------------------------- | +| **Starts with** | Triggers when the message starts with the specified text | +| **Ends with** | Triggers when the message ends with the specified text | +| **Contains** | Triggers when the message contains the specified text | +| **Advanced (Regex)** | Uses a regular expression to match the message | +| **Contains attachment** | Triggers when the message contains an attachment | +| **Discord Pin Message** | Triggers when Discord sends a pin notification | +| **Discord Thread Created Message** | Triggers when Discord sends a thread creation notification | +| **Contains Poll** | Triggers when the message contains a poll | +| **Has User Mention/Ping** | Triggers when a user is mentioned in the message | +| **Forwarded Message** | Triggers when a message is forwarded | +| **Discord Automod Action Message** | Triggers when Discord AutoMod takes action on a message | +| **Every Message** | Triggers on every message | + + +## Starts with + +The **Starts with** option triggers when a message begins with the specified text. + +For example, if the trigger is: + +```cc +!hello +``` + +and if the response code is +```cc +Hello $username! +``` + +The command will trigger when a message starts with `!hello`. + + + +!hello + + +Hello Member! + + +!hello everyone + + +Hello Member! + + + +However, a message where `!hello` appears later will not trigger the command. + + + +Hey !hello + + + +This is useful for traditional commands such as `!help`, `?report`, or `!hug`. + + +## Ends with + +The **Ends with** option triggers when a message ends with the specified text. + +For example, with the trigger: + +```cc +good morning +``` + +and if the response code is +```cc +Good morning, $username! +``` + +The command will trigger when the message ends with `good morning`. + + + +Everyone, good morning + + +Good morning, Member! + + +Good morning + + +Good morning, Member! + + + +A message where the text appears in the middle will not trigger the command. + + + +Good morning everyone! + + + + +## Contains + +The **Contains** option triggers when the specified text appears anywhere in the message. + +For example, using: + +```cc +banana +``` + +and if the response code is +```cc +🍌 Banana detected! +``` + +will trigger whenever `banana` appears in the message. + + + +I really like bananas! + + +🍌 Banana detected! + + +Does anyone have a banana? + + +🍌 Banana detected! + + + +The text does not need to be at the beginning or end of the message. + + +## Advanced (Regex) + +The **Advanced (Regex)** option allows you to use regular expressions for more advanced matching. + +Regex is useful when a normal text match is not enough. + +For example, the following expression detects a Discord user mention: + +```regex +/<@!?\d{18,}>/ +``` + +and if the response code is +```cc +You have mentioned $username[$mentioned]! +``` + +This can detect mentions such as: + + + +Hey Mido! + + +You have mentioned Mido! + + + +Regex can be used to create much more advanced message matching rules. + + + +Regex, short for **regular expression**, is a way of describing patterns in text. + +It is an advanced feature and is not required for most message triggers. If you only need to detect a specific word or phrase, **Starts with**, **Ends with**, or **Contains** will usually be easier. + + + + +## Contains attachment + +The **Contains attachment** option triggers when a message contains an attachment. + +This can be useful for creating commands that automatically react to images, files, videos, or other uploaded attachments. + +For example: + + + +Check out this image! +[attachment: image.png] + + +Nice image! + + + +The message does not need to contain any particular text. + + +## Discord Pin Message + +The **Discord Pin Message** option triggers when Discord sends a system message indicating that a message was pinned. + +For example: + + + +[Discord system message: A message was pinned] + + +A message was pinned! + + + +This can be useful for automatically responding when someone pins a message. + + +## Discord Thread Created Message + +The **Discord Thread Created Message** option triggers when Discord sends a system message indicating that a thread was created. + +For example: + + + +[Discord system message: A thread was created] + + +A new thread has been created! + + + +This can be useful for automatically responding to newly created threads. + + +## Contains Poll + +The **Contains Poll** option triggers when a message contains a Discord poll. + +For example: + + + +Which game should we play? + +[Poll] +Minecraft +Fortnite +Terraria + + +Thanks for creating a poll! + + + +The command does not need to know the poll's question or answers. + + +## Has User Mention/Ping + +The **Has User Mention/Ping** option triggers when a message contains a mention of a Discord user. + +For example: + + + +Hey Mido, check this out! + + +Someone was mentioned! + + + +The mention can appear anywhere in the message. + +For example, all of these can trigger the command: + + + +Mido hello! + + +Hello Mido! + + +Can someone help Mido? + + + + +## Forwarded Message + +The **Forwarded Message** option triggers when a message contains a forwarded Discord message. + +For example: + + + +[Forwarded message] + +This is the original message. + + +A message was forwarded! + + + +This allows you to create commands that react specifically to forwarded messages without needing to inspect their text. + + +## Discord AutoMod Action Message + +The **Discord AutoMod Action Message** option triggers when Discord AutoMod takes action on a message. + +For example, when a user sends a message that violates an AutoMod rule: + + + +This message triggered AutoMod + + +AutoMod has detected a violation. + + + +The user who triggered the AutoMod action is considered the executor of the command. + +This allows you to build custom responses or logging systems around Discord AutoMod actions. + + +## Every Message + +The **Every Message** option triggers for every message received by the bot. + +It does not matter what the message contains. + +For example, a command configured with **Every Message** could automatically respond to messages: + + + +Hello everyone! + + +Have a great day! + + +Does anyone want to play? + + +Have a great day! + + + +This can be useful for automatic responses, message logging, counters, or other systems that need to process every message. + + + +An **Every Message** trigger can execute very frequently in an active server. + +If you only want the command to run in specific channels, use the **Run only in** option to restrict where the command can execute. + +You should also consider using cooldowns to prevent excessive executions. + + + + +## Parameters + +Message parameters are separated by spaces and can be accessed using the `$message[]` function. + +For example, if a user sends: + +```cc +!hug @user +``` + +The message is split into parameters: + +* `$message[1]` → `!hug` +* `$message[2]` → `@user` + +Each parameter is assigned a number based on its position in the message: + +```cc +!hug hello world + │ │ │ + │ │ └── $message[3] + │ └──────── $message[2] + └───────────── $message[1] +``` + +You can also use `+` to get a parameter **and everything after it**. + +For example: + +```cc +!announce Hello everyone, welcome! +``` + +* `$message[1]` → `!announce` +* `$message[2]` → `Hello` +* `$message[2+]` → `Hello everyone, welcome!` +* `$message[3+]` → `everyone, welcome!` + +This is useful when you want to accept a message or sentence as a single parameter. + +For example: + +```cc +!hug @user +!report @user spam in the chat +!announce Hello everyone, welcome to the server! +``` + +For `!report @user spam in the chat`, you could use: + +```cc +$message[2] → @user +$message[3+] → spam in the chat +``` + +In short: + +```cc +$message[1] → first word +$message[2] → second word +$message[3] → third word +$message[n] → nth word + +$message[2+] → second word + everything after it +$message[3+] → third word + everything after it +``` + + + +## Combining message conditions + +The different trigger types are designed for different kinds of message detection. + +For example: + +| Goal | Recommended type | +| -------------------------------- | ---------------------------------- | +| Message starts with `!help` | **Starts with** | +| Message ends with `thanks` | **Ends with** | +| Message contains `hello` | **Contains** | +| Detect a complex pattern | **Advanced (Regex)** | +| Detect uploaded files | **Contains attachment** | +| Detect Discord pin notifications | **Discord Pin Message** | +| Detect newly created threads | **Discord Thread Created Message** | +| Detect polls | **Contains Poll** | +| Detect user mentions | **Has User Mention/Ping** | +| Detect forwarded messages | **Forwarded Message** | +| Detect AutoMod actions | **Discord AutoMod Action Message** | +| Process every message | **Every Message** | + +Choose the simplest option that matches what you are trying to detect. Regex should generally only be used when the other matching options cannot accomplish the desired behavior. + +## Summary + +| Name | Example | Explanation | +| ---------------------------------- | ---------------- | ---------------------------------------------------------- | +| **Starts with** | `!hello` | Triggers when the message starts with the specified text | +| **Ends with** | `hello` | Triggers when the message ends with the specified text | +| **Contains** | `hello` | Triggers when the message contains the specified text | +| **Advanced (Regex)** | `/<@!?\d{18,}>/` | Uses a regular expression to match messages | +| **Contains attachment** | — | Triggers when a message contains an attachment | +| **Discord Pin Message** | — | Triggers when Discord sends a pin notification | +| **Discord Thread Created Message** | — | Triggers when Discord sends a thread creation notification | +| **Contains Poll** | — | Triggers when a message contains a poll | +| **Has User Mention/Ping** | — | Triggers when a message mentions a user | +| **Forwarded Message** | — | Triggers when a message contains a forwarded message | +| **Discord AutoMod Action Message** | — | Triggers when Discord AutoMod takes action | +| **Every Message** | — | Triggers for every message | + + + +For normal text matching, prefer **Starts with**, **Ends with**, or **Contains**. Use **Advanced (Regex)** when you need more complex patterns, and use the specialized message types when you want to detect Discord-specific message features. + + + + + +For Tier 3+, this trigger **requires** the `Message Content Intent` to be enabled for your custom bot when using the following trigger settings: +* `Starts with` +* `Ends with` +* `Contains` +* `Advanced (Regex)` +* `Contains attachment` +* `Contains Poll` + + \ No newline at end of file diff --git a/content/docs/Tutorials/1.ping.mdx b/content/docs/Tutorials/1.ping.mdx new file mode 100644 index 00000000..6e54b174 --- /dev/null +++ b/content/docs/Tutorials/1.ping.mdx @@ -0,0 +1,29 @@ +--- +title: "Ping command" +--- + +Let's make a simple ping command, where you send a command `ping` and the bot replies with `pong` + +# Steps +## #1 Creating Command +Your first step, will be creating a new custom command, check this [page](/Guide/1.create#creating-custom-command) + +## #2 Trigger Settings +In the trigger settings +1. Select the Type to be `Word`, you can know more about this trigger [here](/Trigger/word) +2. Set the Trigger to be `ping` + +![](https://i.imgur.com/o5UIcB5.png) + + +This means, it will run this command when a user sends `ping` + +## #3 Response +To make the bot reply with `pong` when this command is run, we simply write `pong` in the code section +![](https://i.imgur.com/WtNpGdM.png) + +## Test time +Save the command and go to your server and send `ping` +![](https://i.imgur.com/smxmtfA.png) + +Congratulations :tada: diff --git a/content/docs/Tutorials/2.staff-app.mdx b/content/docs/Tutorials/2.staff-app.mdx new file mode 100644 index 00000000..7e760824 --- /dev/null +++ b/content/docs/Tutorials/2.staff-app.mdx @@ -0,0 +1,129 @@ +--- +title: "Staff application" +--- + +In this guide you will learn how to make a form using **discord modals**. + +Here's how it's going to look like: +![Video preview](https://cdn.discordapp.com/attachments/957286111250624552/1100134419131531304/staff-app.gif) + +## 1. Button sending +Let's send a button users will use to open up the form. + +The button will be `blurple`, have a label `Apply` and an id `staff-app`. +```cc +!!exec $button[Apply;blurple;staff-app] +``` + +![Button preview](https://cdn.discordapp.com/attachments/957286111250624552/1100143691835916388/image.png) + +## 2. Button handling +Once we have our button ready, let's make a command to handle it. + +#### Trigger +It will have a `button` type, and a trigger `staff-app` *(the ID we set in the previous step)* +![Button trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100140031772995646/image.png) + +#### Code +The button is meant to send a modal upon clicking, so let's use **$modal** to deploy a form with three options: +* Position +* Reason +* Pronouns + +```cc +$modal[ + {title=Staff application} + {id=staff-app} + + {input= + {name=Position} + {ph=What position would you like to apply for?} + {id=position} + {type=short} + {min=5} + {max=100} + } + + {input= + {name=Reason} + {ph=Why do you apply?} + {id=reason} + {type=long} + {min=20} + } + + {input= + {name=Pronouns} + {ph=What pronouns do you use?} + {id=pronouns} + {type=short} + {required=no} + } +] +``` + +## 3. Modal handling +As you may have noticed, after clicking the button modal appears, but submitting it doesn't do anything. +We'll now create a command to catch all the submitted forms. + +#### Trigger +In order to detect submitted forms, we need to set the type to `Modal`, and trigger to `staff-app` *(Which is our modal ID)* +![Modal trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100142660448165960/image.png) + +#### Code +Once we catch a submitted form, we need to do a few things: +1. Load user's answers +2. Send a report to a different channel +3. Confirm the submission with an interaction reply + +```cc + +// Save answers to different variables +$let[position;$modalAnswer[1]] +$let[reason;$modalAnswer[reason]] +$let[pronouns;$modalAnswer[pronouns]] + +// Send message to #staff-applications +$channelSendMessage[$channelID[staff-applications]; + + {author:$usertag:$authorAvatar} + {title:Staff application} + {description:$mention has submitted the staff application} + {field:Position:$position} + {field:Reason:```$reason```} + + // Attach pronouns section only if provided + $if[$get[pronouns]!=] + {footer:Pronouns\: $pronouns} // : has been escaped using a backslash + $endIf + +] + +// Send an ephemeral interaction reply +$interactionReply[Thank you for your submission;yes] +``` + + + +Here's a list of functions used and pages mentioned in this tutorial. +We recommend you to continue reading about anything that seems unclear to you: +| Page or function | Description | +|--------- | --------- | +| `$button` | send a button | +| [Button trigger](/Trigger/button) | detect button clicks | +| `$modal` | deploy a modal | +| [Modal trigger](/Trigger/modal) | catch submitted modals | +| `$let` | define a temporary variable | +| `$get` | retrive a temporary variable | +| `$modalAnswer` | get user's answer | +| `$channelSendMessage` | send a message in a different channel | +| `$channelID` | find a channel by it's name | +| `$if` | conditional statement | +| [Complete embed](/Text/Embed/example) | create an embed | +| `$interactionReply` | send interaction reply | + + + + +### 🎉 Congratulations! +You've made a complete staff application system! diff --git a/content/docs/Tutorials/3.report.mdx b/content/docs/Tutorials/3.report.mdx new file mode 100644 index 00000000..1fccec20 --- /dev/null +++ b/content/docs/Tutorials/3.report.mdx @@ -0,0 +1,67 @@ +--- +title: "Report command" +--- + +Here's a step-by-step instruction on how to create a simple report command. + +## 1. Setting trigger +Users are meant to report using a word command `!report`, so let's set a corresponding trigger + +![!report trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100494691721560116/image.png) + +## 2. Getting user ID +Let's begin by loading the ID of provided user. For that we will use a combination of two functions: + +* `$message` - to load user input +* `$findMember` - to get the id regardless of input format + +and save them in a `$let` variable. +```cc +// $message[1] returns the first parameter +// $findMember[...;no] returns user id or undefined +$let[reportedUser;$findMember[$message[1];no]] +``` + +## 3. Loading reason +Users should be able to describe what behavior they want to report, let's save the rest of parameters to a new variable. +```cc +$let[reason;$message[2+]] +``` + +## 4. Send report +As we have all data stored and ready, we will procceed to send the report. For that we will use: + +* `$channelID` - to change channel name to ID +* `$channelSendMessage` - to send a message to a different channel + +```cc +$let[reportsChannel;$channelID[reports]] +$channelSendMessage[$reportsChannel;$mention has reported <@!$reportedUser>, for: $reason. +] +``` + +## 5. Confirmation message +So far, the command is sending a correct message to a different channel. Let's also send a message to the reporting user. +```cc +$mention you report has been submitted, thank you for keeping our community safe. +``` + +### Result + + +!report fajfaj breaking server rule #5 + + +Member your report has been submitted, thank you for keeping our community safe. + + + +Meanwhile in #reports + + +Member has reported fajfaj, for breaking server rule #5 + + + +### 🎉 Congrats! +You've passed the course with grade A! diff --git a/content/docs/Tutorials/4.collect.mdx b/content/docs/Tutorials/4.collect.mdx new file mode 100644 index 00000000..ebc68d49 --- /dev/null +++ b/content/docs/Tutorials/4.collect.mdx @@ -0,0 +1,103 @@ +--- +title: "Collect reward" +--- + +In this guide, you will learn how to create a one-time use command that allows users to collect a money reward. + +## 1. Create a command + +The first step is to create a new command, which you can learn to do in [this guide](/Guide/1.create). + +## 2. Set a trigger + +Users will collect their reward by using the `!collect` command, so let's set that up as the trigger: + +![Trigger](https://cdn.discordapp.com/attachments/957286111250624552/1102554279417495583/image.png) + +## 3. Craft the code + +Now that we have the initial setup done, it's time to make the command actually work. + + + +* `$getUserVar` - to load the user's balance +* `$let` - to temporarily store the balance +* `$math` - to calculate new balance +* `$setUserVar` - to set the new balance + + + +### Prize + +The reward that users will receive is 100$ with the [economy command from the community](/Guide/4.template). Since the economy uses the `money` user var to store a user's balance, we will contribute to that var. + +### Getting user var + +Let's get a user's balance and store it in a temporary variable called `bal`: + +```cc +$let[bal;$getUserVar[money]] +``` + +### Calculating new balance + +Next, we'll add 100$ to the balance: + +```cc +$let[bal;$math[$bal+100]] +``` + +### Saving the new balance + +Now that we have the new balance, let's overwrite the current balance with the new one: + +```cc +$setUserVar[money;$bal] +``` + +At this point, the command will successfully increase the balance, but we want to ensure that users can only collect the reward once. + +### Setting a variable + +In order to prevent users from collecting multiple rewards, we need to save information about whether each user has already used the command. + +```cc +$setUserVar[hasCollected;true] +``` + +### Adding a condition + +Now that we have a variable called `hasCollected` that returns whether the user has already collected the reward, let's use it to prevent users from collecting the same reward multiple times by putting this code at the beginning of the command: + +```cc +$onlyIf[$getUserVar[hasCollected]!=true;You cannot collect the same reward more than once!] +``` + +### Final result +![Setup preview](https://cdn.discordapp.com/attachments/957286111250624552/1102577377688698920/collect.png) + +Let's see if it works correctly + + + +!collect + + +Enjoy your 100$ reward! + + +!collect + + +You cannot collect the same reward more than once! + + + + + +You may not always limit executions to one per user, you can use other vars like `server vars` to restrict the command to one execution per server. + + + +### 🎉 Congrats! +You've learned how to make a command that can be used only one time! diff --git a/content/docs/Tutorials/5.confession.mdx b/content/docs/Tutorials/5.confession.mdx new file mode 100644 index 00000000..88d1b740 --- /dev/null +++ b/content/docs/Tutorials/5.confession.mdx @@ -0,0 +1,69 @@ +--- +title: "Simple Slash Command: Confession" +--- + +In this guide, you will learn how to make a simple slash command called `/confess`, where user can use to send a confession in a beautiful embed like this: +![](https://i.imgur.com/kJwJ9Fi.png) + +## 1. Create a command +The first step is to create a new slash command: +* Head to your server in [dashboard](https://ccommandbot.com/dashboard) +* Click `Slash Command Builder` +* Construct the confess command (follow the next GIF) +![](https://i.imgur.com/1IUUCn9.gif) + +## 2. Responding To Code +Next, Let's write the code that will respond when user runs the slash command: +* Head to your server in [dashboard](https://ccommandbot.com/dashboard) +* Click `Manage Your Commands` +* Click `Create` +* In Command Settings, select the Trigger Type to be "Slash Command", then select `/confess` +* For Code: + * To respond to the user, you can do so with `$interactionReply[message]` where message is the text you would like to display: + > For example: $interactionReply[Hello World] + * To receive user input of confession, we can use $getOption[option name], where `option name` is same option name we used while building the slash command which is `message` + > For example: $getOption[message] + * So we would combine both and code would look like: +```cc +$interactionReply[Your confession is + +$getOption[message] +] +``` +![](https://i.imgur.com/Xayi6uY.gif) + +## 3. Output (Normal Message) +That is all, let's test it out :star_struck: +![](https://i.imgur.com/94mlDMR.gif) + +It works :happy:! but... what about making the respond into a beautiful embed? + +## 4. Modify Code To Respond With Embed +To build an embed, we need to use [curl message format](/CodeReferences/ref.message_curl_format). +Curl is a way for you to build an embed in the place of the `message` input, for example to set up an embed with description and title we will use: +```js +{desc:My embed description} +{title:My embed title} +``` +> You can see the full list [here](/CodeReferences/ref.message_curl_format) + +So, We will modify the message content of `$interactionReply` and use the curl message format, code would look like: +```cc +$interactionReply[ + +{title:$username's confession} +{desc: +$getOption[message] +} +{color:GREEN} +] +``` +![](https://i.imgur.com/aYUTPta.png) + +## 5. Output (Message With Embed) +Let's test again! +![](https://i.imgur.com/d4sbm0f.gif) + + +Congratulations, You made a functional slash command :tada:! +> Of course this might be simple, but it's good start! diff --git a/content/docs/Tutorials/5.poll.mdx b/content/docs/Tutorials/5.poll.mdx new file mode 100644 index 00000000..d934161b --- /dev/null +++ b/content/docs/Tutorials/5.poll.mdx @@ -0,0 +1,77 @@ +--- +title: "Sending a poll" +--- + +In this guide, you will learn how to send a poll. + +## 1. Create a command +The first step is to create a new command, which you can learn to do in [this guide](/Guide/1.create). + +## 2. Set a trigger +Let assume user need to say `!poll` to send the poll +![Trigger](https://i.imgur.com/0YTbKP6.png) + +## 3. Craft the code + +Now that we have the initial setup done, it's time to make the command actually work. + + + +* `$sendMessage` - to send a message +* [poll curl data](/CodeReferences/ref.poll_data) + + + +### Sending a message +To send a message, we will use `$sendMessage[content]` where content is the message content, in our case we will fill it with our poll data + +### Constructing the poll +we will use [poll curl data](/CodeReferences/ref.poll_data) like: +``` +{poll: + {question=poll question} + {duration=poll duration in hours like 24h} + {multiple=can user select multiple answers? (yes/no)} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + + {answer=Add an anwer} + {emoji=Add an emoji to the previous answer} + ... +} +``` + +In our case, we will send a poll about countries code: +```cc +$sendMessage[ +{poll: +{question=What is the biggest country in the world?} +{answer=China} +{emoji=🇨🇳} +{answer=Russia} +{emoji=🇷🇺} + +{duration=1h} +{multiple=no} +} +] +``` + +### Final result +Setup: +![Setup preview](https://i.imgur.com/9Rc5aNC.png) + +Output: +![](https://i.imgur.com/4BRQVag.png) + + + + + +You may not always limit executions to one per user, you can use other vars like `server vars` to restrict the command to one execution per server. + + + +### 🎉 Congrats! +You've learned how to make a command that can be used only one time! \ No newline at end of file diff --git a/content/docs/Tutorials/meta.json b/content/docs/Tutorials/meta.json new file mode 100644 index 00000000..1e185dd6 --- /dev/null +++ b/content/docs/Tutorials/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Tutorials & Examples", + "pages": ["..."] +} diff --git a/content/docs/index.mdx b/content/docs/index.mdx new file mode 100644 index 00000000..992fdfd4 --- /dev/null +++ b/content/docs/index.mdx @@ -0,0 +1,28 @@ +--- +title: "Getting Started" +--- + + +It is highly recommended not to skip this guide, or to read only parts of it. + + +## What is Custom Command Bot? + +Custom Command (CC) is a bot that allows you to create fully customizable commands. +It is a perfect tool for both experienced developers and complete beginners looking for a quick and easy command system. + +## Examples + +![Word Trigger](/images/guide/getting-started/word.png) +![Slash Command](/images/guide/getting-started/slash-cmd.png) +![Join Event Trigger](/images/guide/getting-started/join-event.png) + +## Do I have to know coding? + +No, you don't need any previous coding experience. CC uses an easy-to-learn pseudo-language that has been designed specifically for easy Discord bot development. + +## Inviting Custom Command + +1. Invite the bot using this [link](https://ccommandbot.com/add) +2. Log in to the [dashboard](https://ccommandbot.com/dashboard) +3. Choose your server and start building! diff --git a/content/docs/meta.json b/content/docs/meta.json new file mode 100644 index 00000000..e91bb504 --- /dev/null +++ b/content/docs/meta.json @@ -0,0 +1,12 @@ +{ + "pages": [ + "Guide", + "Trigger", + "Tutorials", + "Other", + "Changelogs", + "(functions)", + "Contribution_Info", + "Legal" + ] +} diff --git a/content/docs/notUsed/perms-privacy.mdx b/content/docs/notUsed/perms-privacy.mdx new file mode 100644 index 00000000..6910ecdf --- /dev/null +++ b/content/docs/notUsed/perms-privacy.mdx @@ -0,0 +1,9 @@ +--- +title: "Terms Of Service, Privacy Policy" +--- + +## Terms Of Service (ToS) +[Read here](/Legal/tos) + +# Privacy Policy +[Read here](/Legal/policy) \ No newline at end of file diff --git a/guide/.vuepress/cooldowns.json b/data/cooldowns.json similarity index 100% rename from guide/.vuepress/cooldowns.json rename to data/cooldowns.json diff --git a/docker-compose.yml b/docker-compose.yml index 9a49e96c..771e2fea 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,10 @@ services: volumes: - .:/app - /app/node_modules + - /app/.next ports: - 8080:8080 - command: npm run dev \ No newline at end of file + command: pnpm dev + environment: + - NODE_ENV=development + - USE_ALL_CPU=false diff --git a/guide/.vuepress/client.js b/guide/.vuepress/client.js deleted file mode 100644 index 697c9660..00000000 --- a/guide/.vuepress/client.js +++ /dev/null @@ -1,43 +0,0 @@ -import { defineClientConfig } from "vuepress/client"; -import { - DiscordButton, - DiscordButtons, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, - DiscordInteraction, - DiscordMarkdown, - DiscordMention, - DiscordMessage, - DiscordMessages, - DiscordReaction, - DiscordReactions, - install as DiscordMessageComponents, -} from "@discord-message-components/vue"; - -import "@discord-message-components/vue/dist/style.css"; - -import "./styles/prism-coldark-dark.css"; - -import Arg from "./components/Arg.vue"; - -export default defineClientConfig({ - enhance({ app }) { - app.use(DiscordMessageComponents, {}); - - app.component("DiscordButton", DiscordButton); - app.component("DiscordButtons", DiscordButtons); - app.component("DiscordEmbed", DiscordEmbed); - app.component("DiscordEmbedField", DiscordEmbedField); - app.component("DiscordEmbedFields", DiscordEmbedFields); - app.component("DiscordInteraction", DiscordInteraction); - app.component("DiscordMarkdown", DiscordMarkdown); - app.component("DiscordMention", DiscordMention); - app.component("DiscordMessage", DiscordMessage); - app.component("DiscordMessages", DiscordMessages); - app.component("DiscordReaction", DiscordReaction); - app.component("DiscordReactions", DiscordReactions); - - app.component("Arg", Arg); - }, -}); diff --git a/guide/.vuepress/components/Arg.vue b/guide/.vuepress/components/Arg.vue deleted file mode 100644 index 4b9bea7a..00000000 --- a/guide/.vuepress/components/Arg.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - \ No newline at end of file diff --git a/guide/.vuepress/config.js b/guide/.vuepress/config.js deleted file mode 100644 index d37dd3ca..00000000 --- a/guide/.vuepress/config.js +++ /dev/null @@ -1,123 +0,0 @@ -import { viteBundler } from "@vuepress/bundler-vite"; -import { defaultTheme } from "@vuepress/theme-default"; -import { searchPlugin } from "@vuepress/plugin-search"; -import { removeHtmlExtensionPlugin } from "vuepress-plugin-remove-html-extension"; - -import { getDirname, path } from "vuepress/utils"; -import fs from "fs"; - -import sidebar from "./sidebar.js"; -import parseTag from "./parseTags.js"; -import replacements from "./replacements.js"; - -const replacePageContent = (content, replacements) => { - let output = content; - for (const [placeholder, replacement] of Object.entries(replacements)) { - const regex = new RegExp(`${placeholder}`, "g"); - output = output.replace(regex, replacement); - } - return output; -}; - - - -module.exports = { - lang: "en-US", - title: "Custom Command", - description: "Custom Command Bot's Documentation", - bundler: viteBundler(), - - theme: defaultTheme({ - docsDir: "guide", - navbar: [ - { - text: "Dashboard", - link: "https://ccommandbot.com/dashboard", - }, - { - text: "Discord", - link: "https://discord.gg/ZFQNZA4Ekz", - }, - ], - repo: "raspdevpy/ccdoc", - contributors: false, - logo: "/favicon.ico", - editLink: true, - editLinkText: "Improve This Page!", - lastUpdated: true, - ...sidebar, - }), - - head: [ - [ - "link", - { - rel: "icon", - href: "https://doc.ccommandbot.com/bot-profile.png", - }, - ], - [ - "meta", - { - name: "twitter:image", - content: "https://doc.ccommandbot.com/bot-profile.png", - }, - ], - [ - "meta", - { - property: "og:image", - content: "https://doc.ccommandbot.com/bot-profile.png", - }, - ], - ["meta", { name: "theme-color", content: "#74b0f7" }], - [ - "meta", - { - property: "og:description", - content: "Custom Command Bot's Documentation", - }, - ], - [ - "meta", - { - name: "twitter:description", - content: "Custom Command Bot's Documentation", - }, - ], - ], - - plugins: [ - { - name: "replace-content-plugin", - extendsMarkdown: (md) => { - const render = md.render; - md.render = (...args) => { - args[0] = replacements(args.slice(1), args[0]); - const html = render.call(md, ...args); - return html; - }; - }, - }, - { - name: "dynamic-meta-plugin", - extendsPage: (page) => { - const title = page.title || null; - const newTitle = title - ? `${title} | Custom Command` - : "Custom Command Documentation"; - - page.frontmatter.head = [ - ["meta", { property: "og:title", content: newTitle }], - ["meta", { name: "twitter:title", content: newTitle }], - ]; - }, - }, - - searchPlugin({ - maxSuggestions: 15, - getExtraFields: (page) => parseTag(page), - }), - removeHtmlExtensionPlugin(), - ], -}; diff --git a/guide/.vuepress/parseTags.js b/guide/.vuepress/parseTags.js deleted file mode 100644 index 61e5b9e3..00000000 --- a/guide/.vuepress/parseTags.js +++ /dev/null @@ -1,46 +0,0 @@ -const cheerio = require("cheerio"); -const fs = require("fs"); -let jsonObj = []; -const dataFile = "./guide/.vuepress/public/docs-pages.json"; - -let delayed; -function write(immediate = false) { - if (!delayed) return (delayed = setTimeout(write, 1000, true)); - if (!immediate) { - clearTimeout(delayed); - return (delayed = setTimeout(write, 1000, true)); - } - fs.writeFile(dataFile, JSON.stringify(jsonObj, null, 2), function (err) { - if (err) { - return console.log(err); - } - console.log("The file was saved!"); - }); -} -module.exports = (page) => { - let tags = []; - const $ = cheerio.load(page.contentRendered); - $("Badge").each(function (i, elem) { - let txt = $(this).attr("text"); - if (txt.match(/Easy|Difficult|Read Below|Medium|Bugged/gi)) return; - if (txt.length > 1) tags.push(txt); - }); - if (page.title.startsWith("$")) tags.push(page.title.slice(1)); - let data = { - title: page.title, - path: page.path, - content: page.contentRendered, - tags: tags, - }; - - const index = jsonObj.findIndex((item) => item.path === page.path); - if (index !== -1) { - jsonObj[index] = data; - } else { - jsonObj.push(data); - } - - write(); - - return tags; -}; diff --git a/guide/.vuepress/public/images/guide/creating-cc/2.png b/guide/.vuepress/public/images/guide/creating-cc/2.png deleted file mode 100644 index 845c7900..00000000 Binary files a/guide/.vuepress/public/images/guide/creating-cc/2.png and /dev/null differ diff --git a/guide/.vuepress/public/images/guide/templates/0.png b/guide/.vuepress/public/images/guide/templates/0.png deleted file mode 100644 index 93b53680..00000000 Binary files a/guide/.vuepress/public/images/guide/templates/0.png and /dev/null differ diff --git a/guide/.vuepress/public/images/guide/templates/1.png b/guide/.vuepress/public/images/guide/templates/1.png deleted file mode 100644 index dd7dc506..00000000 Binary files a/guide/.vuepress/public/images/guide/templates/1.png and /dev/null differ diff --git a/guide/.vuepress/replacements.js b/guide/.vuepress/replacements.js deleted file mode 100644 index aa89c5c0..00000000 --- a/guide/.vuepress/replacements.js +++ /dev/null @@ -1,15 +0,0 @@ -const cooldownAddition = require("./replacements/cooldownAddition"); -const functionLinkReference = require("./replacements/functionLinkReference"); -const imageReplacement = require("./replacements/imageReplacement"); - -module.exports = (page, content) => { - for (let handler of [ - imageReplacement, - cooldownAddition, - functionLinkReference, - ]) { - if (!content) continue; - content = handler(page, content); - } - return content; -}; diff --git a/guide/.vuepress/replacements/cooldownAddition.js b/guide/.vuepress/replacements/cooldownAddition.js deleted file mode 100644 index d0eb7324..00000000 --- a/guide/.vuepress/replacements/cooldownAddition.js +++ /dev/null @@ -1,68 +0,0 @@ -const cooldowns = require("../cooldowns.json"); -function getTitle(content) { - const match = content.match(/^#\s*(\$[a-zA-Z]+)(\s|$)/); - return match ? match[1].trim() : null; -} -function formatDuration(ms) { - if (ms < 1) { - return `${(ms * 1000).toFixed(ms >= 0.1 ? 0 : 1)} μs`; - } - - if (ms < 1000) { - return `${ms} ms`; - } - - const units = [ - ["day", 86400000], - ["hour", 3600000], - ["minute", 60000], - ["second", 1000], - ]; - - const parts = []; - - for (const [name, value] of units) { - const amount = Math.floor(ms / value); - if (!amount) continue; - - parts.push(`${amount} ${name}${amount !== 1 ? "s" : ""}`); - ms %= value; - - if (parts.length === 2) break; // e.g. "2 minutes 5 seconds" - } - - return parts.join(" "); -} -module.exports = (page, content) => { - if(!page[0]?.filePathRelative) - return content; - const functionName = "$" + page[0].filePathRelative - .split("/") - .pop() - .replace(/\.md$/, ""); - - const cooldown = cooldowns[functionName.toLowerCase()]; - // let title = getTitle(content); - // if (!title) return content; - // const cooldown = cooldowns[title.toLowerCase()]; - if (!cooldown) return content; - let isHardCooldown = cooldown.hardCooldown; - content += ` - -## Function Cooldown - -This function has built-in cooldown. Why? Read more about cooldowns [here](/Other/ratelimits.md). - -- **Cooldown:** ${formatDuration(cooldown.time)} -- **Tracked By:** ${cooldown.per} -- **Type:** \`${cooldown.scope}\` - -Functions with the same type share cooldowns based on the same \`Tracked By\` value.`; - if (isHardCooldown) { - content += ` -::: warning Warning -This cooldown cannot be bypassed by Tier 3+ bots. -:::`; - } - return content; -}; diff --git a/guide/.vuepress/replacements/functionLinkReference.js b/guide/.vuepress/replacements/functionLinkReference.js deleted file mode 100644 index 0a07052c..00000000 --- a/guide/.vuepress/replacements/functionLinkReference.js +++ /dev/null @@ -1,39 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const GUIDE_DIR = path.join(__dirname, "../../"); - -const functionMap = new Map(); - -function scan(dir) { - for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { - const full = path.join(dir, entry.name); - - if (entry.isDirectory()) { - scan(full); - } else if (entry.name.endsWith(".md")) { - const name = path.basename(entry.name, ".md").toLowerCase(); - functionMap.set(name, full); - } - } -} - -scan(GUIDE_DIR); - -module.exports = (page, content) => { - const currentFile = page[0].filePath; - - return content.replace(/`\$([A-Za-z]+)`/g, (match, fn) => { - const targetFile = functionMap.get(fn.toLowerCase()+"_ai")??functionMap.get(fn.toLowerCase()); - if (!targetFile) return match; - - let relative = path.relative( - path.dirname(currentFile), - targetFile - ); - - relative = relative.replace(/\\/g, "/"); - - return `[\`${match}\`](${relative})`; - }); -}; \ No newline at end of file diff --git a/guide/.vuepress/replacements/imageReplacement.js b/guide/.vuepress/replacements/imageReplacement.js deleted file mode 100644 index 867b19af..00000000 --- a/guide/.vuepress/replacements/imageReplacement.js +++ /dev/null @@ -1,20 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -const crypto = require('crypto'); - -function shaUrl(url) { - const ext = path.extname(url); - const hash = crypto.createHash('sha256').update(url).digest('hex'); - return hash + ext; -} - -module.exports=(page,content)=>{ - content=content.replace(/\((http.*?)\)/g,(...v)=>{ - let url=v[1]; - let name=shaUrl(url) - const filename = `guide/.vuepress/public/images/${name}`; - if (fs.existsSync(filename)) return `(/images/${name})`; - return v[0] - }) - return content; -} \ No newline at end of file diff --git a/guide/.vuepress/sidebar.js b/guide/.vuepress/sidebar.js deleted file mode 100644 index aa6808ad..00000000 --- a/guide/.vuepress/sidebar.js +++ /dev/null @@ -1,158 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const matter = require("gray-matter"); - -function getSideBar(folder, title, options = {}) { - const children = getChildren(folder); - return { text: title, children, collapsible: false, ...options }; -} - -function getChildren(folder) { - if (!fs.existsSync(path.join(`${__dirname}/../${folder}`))) return []; - - const files = fs - // get all files in $folder - .readdirSync(path.join(`${__dirname}/../${folder}`), { - withFileTypes: true, - }) - .filter((dirent) => dirent.isFile()) - // read frontmatter and append a weight to each file - .map((item) => { - const fileContent = fs.readFileSync( - `${item.parentPath}/${item.name}`, - "utf8", - ); - const { data } = matter(fileContent); - return { - name: item.name, - path: `/${folder}/${item.name}`, - weight: data.weight ?? -1, - hidden: data.hidden ?? false, - }; - }) - // remove non .md files, and filter out files that are hidden - .filter( - (item) => - item.path.endsWith(".md") && - !item.hidden && - item.name.toLowerCase() != "readme.md", - ) - // sort files based on weight - .sort((a, b) => { - if (a.weight === -1 && b.weight === -1) return 0; - if (a.weight === -1) return 1; - if (b.weight === -1) return -1; - return a.weight - b.weight; - }) - // convert back to array of paths - .map((file) => file.path); - - return files; -} - -module.exports = { - sidebarDepth: 1, - sidebar: { - "/": [ - { - text: "Guide", - children: ["/", ...getChildren("Guide")], - }, - getSideBar("Trigger", "Trigger Types", { collapsible: true }), - getSideBar("Tutorials", "Tutorials & Examples", { - collapsible: true, - }), - getSideBar("Other", "Other Information"), - getSideBar("Changelogs", "Changelogs", { collapsible: true }), - // getSideBar('Templates','Templates'), - { - text: "Functions", - collapsible: true, - children: [ - getSideBar("Member", "Member Functions", { - collapsible: true, - }), - getSideBar("Channel", "Channel Functions", { - collapsible: true, - }), - getSideBar("Message", "Message Functions", { - collapsible: true, - }), - getSideBar("Interaction", "Interaction Functions", { - collapsible: true, - }), - getSideBar("Threads", "Threads Functions", { - collapsible: true, - }), - getSideBar("Role", "Role Functions", { collapsible: true }), - getSideBar("Server", "Server Functions", { - collapsible: true, - }), - getSideBar("Random", "Random Functions", { - collapsible: true, - }), - getSideBar("Text", "Text Functions", { collapsible: true }), - getSideBar("Text/Condition", "Condition Functions", { - collapsible: true, - }), - getSideBar("Stickers", "Sticker Functions", { - collapsible: true, - }), - getSideBar("Events", "Event Functions", { - collapsible: true, - }), - getSideBar("Timeout", "User Timeout Functions", { - collapsible: true, - }), - getSideBar("Text/Embed", "Embed functions", { - collapsible: true, - }), - getSideBar("Text/Components", "Button Functions", { - collapsible: true, - }), - getSideBar("Text/Math", "Math Functions", { - collapsible: true, - }), - getSideBar("Text/textSplit", "Text Split Functions", { - collapsible: true, - }), - getSideBar("Text/Array", "Array Functions", { - collapsible: true, - }), - getSideBar("Text/Object", "Object Functions", { - collapsible: true, - }), - getSideBar("Text/isandhas", "Is and Has Functions", { - collapsible: true, - }), - getSideBar("Text/only", "Only Functions", { - collapsible: true, - }), - getSideBar("Text/Regex", "Regex Functions", { - collapsible: true, - }), - getSideBar("Date", "Date Functions", { collapsible: true }), - getSideBar("Variables", "Variables Functions", { - collapsible: true, - }), - getSideBar("Bot", "Bot Functions", { collapsible: true }), - getSideBar("Useful", "Useful Functions", { - collapsible: true, - }), - getSideBar("Cooldown", "Cooldown functions", { - collapsible: true, - }), - getSideBar("Request", "Http Requests functions", { - collapsible: true, - }), - getSideBar("Image", "Image Builder functions", { - collapsible: true, - }), - // getSideBar('Unclassified','Unclassfied Functions',{collapsible:true}) - ], - }, - getSideBar("Contribution_Info", "Contribute", { collapsible: true }), - getSideBar("Legal", "Legal"), - ], - }, -}; diff --git a/guide/.vuepress/styles/index.scss b/guide/.vuepress/styles/index.scss deleted file mode 100644 index 858553ca..00000000 --- a/guide/.vuepress/styles/index.scss +++ /dev/null @@ -1,65 +0,0 @@ -@import "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"; - -html[data-theme="dark"] .discord-messages, html[data-theme="dark"] div[class*="language-"] { - background-color: #202024 !important; - border: 1px solid rgba(255, 255, 255, 0.1) !important; -} - -html[data-theme="light"] .discord-messages, html[data-theme="light"] div[class*="language-"] { - background-color: #e5e7eb !important; - border: 1px solid rgba(0, 0, 0, 0.1) !important; -} - -html[data-theme="dark"] .discord-message { - color: #dcddde !important; -} - -html[data-theme="light"] .discord-message { - color: #202024 !important; -} - -.discord-message:hover { - background-color: rgba(128, 128, 128, 0.2) !important; -} - -.discord-messages { - border-radius: 8px; - font-family: Inter, Roboto, sans-serif; -} - -html[data-theme="light"] .discord-embed-container, html[data-theme="light"] .discord-embed-title { - background-color: white; - color: black !important; -} - -.discord-message .discord-author-info .discord-author-username { - font-size: 0.95rem !important; - letter-spacing: 0px !important; - display: inline-flex !important; -} -.discord-message .discord-message-body { - font-size: 15px !important; -} -.discord-message .discord-message-content .discord-message-timestamp { - display: inline-flex !important; - font-size: 11px !important; - margin-left: 5px !important; -} - -@media screen and (max-width: 719px) { - .hint-container { - margin-inline: 0 !important; - } -} - -:root { - --code-border-radius: 8px !important; - --tab-border-radius: 8px !important; -} - -@media (max-width: 419px) { - #content { - --code-border-radius: 8px !important; - --tab-border-radius: 8px !important; - } -} diff --git a/guide/.vuepress/styles/prism-coldark-dark.css b/guide/.vuepress/styles/prism-coldark-dark.css deleted file mode 100644 index 71cea4ed..00000000 --- a/guide/.vuepress/styles/prism-coldark-dark.css +++ /dev/null @@ -1,447 +0,0 @@ -/** - * Coldark Theme for Prism.js - * Theme variation: Dark - * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script - * @author Armand Philippot - * @homepage https://github.com/ArmandPhilippot/coldark-prism - * @license MIT - */ - -/* FINETUNED By Zero */ - -code[class*="language-"], -pre[class*="language-"] { - color: #e3eaf2; - background: none; - font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - background: #3c526d; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - background-color: #3c526d; -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: 0.5em 0; - overflow: auto; -} - -html[data-theme="light"] .line { - color: #000; -} - -code[class*="language-"] { - padding-left: 0 !important; -} - -div[class*="language-"] { - overflow: hidden; -} - -html[data-theme="light"] div[class*="language-"].line-numbers-mode .line-numbers { - color: #000; -} - -div[class*="language-"].line-numbers-mode:after { - border-right: 1px solid transparent !important; -} - -.line-numbers { - line-height: 1.5 !important; -} - -:root { - --code-line-number-width: 35px; -} - -.line-number { - width: 35px; -} - -html[data-theme="light"] div[class*="language-"]:before { - color: #000; -} - -div[class*="language-"]:before { - display: none; -} - -code[class*="language-"], .line-numbers { - padding-top: 8px !important; - padding-bottom: 8px !important; -} - -html[data-theme="dark"] .vp-copy-code-button:before { - background: white !important; -} - -html[data-theme="light"] .vp-copy-code-button:before { - background: black !important; - -} - -.vp-copy-code-button:before { - padding: 4px 0; -} - -.vp-copy-code-button { - top: 4px; - right: 4px; - height: 29px; - width: 29px; -} - -.vp-copy-code-button.copied:after { - height: 29px !important; - padding: 0 8px; - margin: 0; - display: flex; - align-items: center; - -} - -.vp-copy-code-button:hover, .vp-copy-code-button.copied { - background: rgba(128, 128, 128, 0.2); -} - -html[data-theme="light"] .vp-copy-code-button.copied:after { - background: rgba(128, 128, 128, 0.2); - color: black; -} - -html[data-theme="dark"] .vp-copy-code-button.copied:after { - background: rgba(128, 128, 128, 0.2); - color: white; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: #111b27; -} - -@media (max-width: 419px) { - div[class*="language-"], .code-block-with-title, .code-block-title-bar { - margin-inline: 0 !important; - } -} - -.code-block-title-bar { - padding: 0 0 0 6px; - border-radius: var(--tab-border-radius) var(--tab-border-radius) 0 0; - display: flex; - align-items: center; - background-color: #e5e7eb !important; - border: 1px solid rgba(0, 0, 0, 0.1) !important; - border-bottom: none !important; -} - -div[class*="language-"] .line.highlighted { - background-color: rgba(128, 128, 128, 0.2) !important; -} - -html[data-theme="dark"] .code-block-title-bar { - background-color: #202024 !important; - border: 1px solid rgba(255, 255, 255, 0.1) !important; - border-bottom: none !important; -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: 0.1em 0.3em; - border-radius: 0.3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #8da1b9; -} - -.token.punctuation { - color: rgb(255, 66, 129); -} - -.token.function, -.token.class-name, -.token.keyword -{ color: #000; } -html[data-theme="dark"] .token.function, -html[data-theme="dark"] .token.class-name, -html[data-theme="dark"] .token.keyword -{ color: #fff; } - -.token.delimiter.important, -.token.selector .parent, -.token.tag, -.token.tag .token.punctuation { - color: #66cccc; -} - -.token.attr-name, -.token.boolean, -.token.boolean.important, -.token.constant, -.token.selector .token.attribute { - color: #e6d37a; -} - -.token.number { - color: rgb(78, 190, 255); -} - -.token.key, -.token.parameter, -.token.property, -.token.property-access, -.token.variable { - color: rgb(133, 255, 255); -} - -html[data-theme="light"] .token.variable { - color: rgb(53, 175, 175); -} - -.token.attr-value, -.token.inserted, -.token.color, -.token.selector .token.value, -.token.string, -.token.string .token.url-link { - color: #91d076; -} - -.token.builtin, -.token.keyword-array, -.token.package, -.token.regex { - color: #f4adf4; -} - -.token.selector .token.class, -.token.selector .token.id { - color: #c699e3; -} - -.token.atrule .token.rule, -.token.combinator, -.token.operator, -.token.pseudo-class, -.token.pseudo-element, -.token.selector, -.token.unit { - color: lightcoral; -} - -.token.deleted, -.token.important { - color: #cd6660; -} - -.token.keyword-this, -.token.this { - color: #6cb8e6; -} - -.token.important, -.token.keyword-this, -.token.this, -.token.bold { - font-weight: bold; -} - -.token.delimiter.important { - font-weight: inherit; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -.language-markdown .token.title, -.language-markdown .token.title .token.punctuation { - color: #6cb8e6; - font-weight: bold; -} - -.language-markdown .token.blockquote.punctuation { - color: #f4adf4; -} - -.language-markdown .token.code { - color: #66cccc; -} - -.language-markdown .token.hr.punctuation { - color: #6cb8e6; -} - -.language-markdown .token.url .token.content { - color: #91d076; -} - -.language-markdown .token.url-link { - color: #e6d37a; -} - -.language-markdown .token.list.punctuation { - color: #f4adf4; -} - -.language-markdown .token.table-header { - color: #e3eaf2; -} - -.language-json .token.operator { - color: #e3eaf2; -} - -.language-scss .token.variable { - color: #66cccc; -} - -/* overrides color-values for the Show Invisibles plugin - * https://prismjs.com/plugins/show-invisibles/ - */ -.token.token.tab:not(:empty):before, -.token.token.cr:before, -.token.token.lf:before, -.token.token.space:before { - color: #8da1b9; -} - -/* overrides color-values for the Toolbar plugin - * https://prismjs.com/plugins/toolbar/ - */ -div.code-toolbar > .toolbar.toolbar > .toolbar-item > a, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > button { - color: #111b27; - background: #6cb8e6; -} - -div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus { - color: #111b27; - background: #6cb8e6da; - text-decoration: none; -} - -div.code-toolbar > .toolbar.toolbar > .toolbar-item > span, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover, -div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus { - color: #111b27; - background: #8da1b9; -} - -/* overrides color-values for the Line Highlight plugin - * http://prismjs.com/plugins/line-highlight/ - */ -.line-highlight.line-highlight { - background: #3c526d5f; - background: linear-gradient(to right, #3c526d5f 70%, #3c526d55); -} - -.line-highlight.line-highlight:before, -.line-highlight.line-highlight[data-end]:after { - background-color: #8da1b9; - color: #111b27; - box-shadow: 0 1px #3c526d; -} - -pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before { - background-color: #8da1b918; -} - -/* overrides color-values for the Line Numbers plugin - * http://prismjs.com/plugins/line-numbers/ - */ -.line-numbers.line-numbers .line-numbers-rows { - border-right: 1px solid #0b121b; - background: #0b121b7a; -} - -.line-numbers .line-numbers-rows > span:before { - color: #8da1b9da; -} - -/* overrides color-values for the Match Braces plugin - * https://prismjs.com/plugins/match-braces/ - */ -.rainbow-braces .token.token.punctuation.brace-level-1, -.rainbow-braces .token.token.punctuation.brace-level-5, -.rainbow-braces .token.token.punctuation.brace-level-9 { - color: #e6d37a; -} - -.rainbow-braces .token.token.punctuation.brace-level-2, -.rainbow-braces .token.token.punctuation.brace-level-6, -.rainbow-braces .token.token.punctuation.brace-level-10 { - color: #f4adf4; -} - -.rainbow-braces .token.token.punctuation.brace-level-3, -.rainbow-braces .token.token.punctuation.brace-level-7, -.rainbow-braces .token.token.punctuation.brace-level-11 { - color: #6cb8e6; -} - -.rainbow-braces .token.token.punctuation.brace-level-4, -.rainbow-braces .token.token.punctuation.brace-level-8, -.rainbow-braces .token.token.punctuation.brace-level-12 { - color: #c699e3; -} - -/* overrides color-values for the Diff Highlight plugin - * https://prismjs.com/plugins/diff-highlight/ - */ -pre.diff-highlight > code .token.token.deleted:not(.prefix), -pre > code.diff-highlight .token.token.deleted:not(.prefix) { - background-color: #cd66601f; -} - -pre.diff-highlight > code .token.token.inserted:not(.prefix), -pre > code.diff-highlight .token.token.inserted:not(.prefix) { - background-color: #91d0761f; -} - -/* overrides color-values for the Command Line plugin - * https://prismjs.com/plugins/command-line/ - */ -.command-line .command-line-prompt { - border-right: 1px solid #0b121b; -} - -.command-line .command-line-prompt > span:before { - color: #8da1b9da; -} diff --git a/guide/Bot/botCount.md b/guide/Bot/botCount.md deleted file mode 100644 index c3179dac..00000000 --- a/guide/Bot/botCount.md +++ /dev/null @@ -1,30 +0,0 @@ -# $botCount - -This function returns the total number of bots present in your Discord server (guild). - -#### Usage: `$botCount` - -Here's how you can use the `$botCount` function: - -``` -!!exec There are $botCount bots in the server! -``` - -This command, when executed, will display a message showing the bot count in the server. See the example below: - - - - !!exec There are $botCount bots in the server! - - - There are 2 bots in the server! - - - -::: danger Warning -The bot count is retrieved from the bot's cache, not directly from the Discord API. This means the count might not be perfectly accurate, especially if all server members haven't been fully cached. Full caching is typically achieved at higher bot tiers (Tier 5). -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Bot/botOwnerID.md b/guide/Bot/botOwnerID.md deleted file mode 100644 index b659a395..00000000 --- a/guide/Bot/botOwnerID.md +++ /dev/null @@ -1,49 +0,0 @@ -# $botOwnerID - -Retrieves the ID(s) of the bot owner(s). - -This function returns the Discord ID of the user(s) who own or manage the bot. If the bot is part of a team, it will return the IDs of all team members who are considered owners. - -## Usage - -```bash -$botOwnerID -``` - -Returns a single ID if there's only one owner, or a comma-separated list of IDs if there are multiple owners (e.g., a team). - -```bash -$botOwnerID[separator] -``` - -Returns a list of IDs separated by the specified `separator`. - -## Parameters - -* `separator` (Optional): A string used to separate the owner IDs when there are multiple owners. If omitted, IDs will be separated by commas. - -## Examples - -**Example 1: Get the bot owner ID (single owner):** - -If the bot has a single owner, this will return their ID. - -```bash -$botOwnerID -``` - -**Example 2: Get the bot owner IDs (team) with a custom separator:** - -If the bot belongs to a team, this will return the IDs of all team members separated by a pipe (|) character. - -```bash -$botOwnerID[|] -``` - -**Example 3: Get the bot owner IDs (team) with the default comma separator:** - -```bash -$botOwnerID -``` - -This will return the owner IDs separated by commas (e.g., `1234567890,9876543210`). \ No newline at end of file diff --git a/guide/Bot/botPing.md b/guide/Bot/botPing.md deleted file mode 100644 index 158471a9..00000000 --- a/guide/Bot/botPing.md +++ /dev/null @@ -1,21 +0,0 @@ -# $botPing - -This function retrieves and returns the bot's current message ping (latency). This is a measure of the time it takes for the bot to send and receive a message. - -## How it Works - -The `$botPing` function calculates the time difference between when the bot sends a message to the Discord API and when it receives a response. This time is typically measured in milliseconds (ms). - -## Usage - -Simply use the `$botPing` function in your command or event. - -```php -$botPing -``` - -## Example - -If the bot's ping is 50ms, the function will return: - -`50ms` diff --git a/guide/Bot/botTier.md b/guide/Bot/botTier.md deleted file mode 100644 index e7e75101..00000000 --- a/guide/Bot/botTier.md +++ /dev/null @@ -1,16 +0,0 @@ -# $botTier - -This command retrieves the current tier level of your bot. - -The standard, free version of the bot operates at **Tier 0**. - - - - !!exec $botTier - - - 0 - - - -The command will then return the tier level of your bot. \ No newline at end of file diff --git a/guide/Bot/botTyping.md b/guide/Bot/botTyping.md deleted file mode 100644 index 21aeb537..00000000 --- a/guide/Bot/botTyping.md +++ /dev/null @@ -1,20 +0,0 @@ -# $botTyping - -Simulates the bot typing in the current channel. This will display the "Bot is typing..." indicator to users in the channel for approximately 10 seconds. - -**Important Note:** Due to limitations within the Discord API, the typing duration cannot be customized and is fixed at around 10 seconds. - -## Usage - -To trigger the bot typing indicator, simply use the `$botTyping` function. - -```markdown -$botTyping -``` - -**Example:** - -If used within a command, the bot will display the "Bot is typing..." indicator for 10 seconds when the command is executed. -```php -$botTyping -``` diff --git a/guide/Bot/botVerified.md b/guide/Bot/botVerified.md deleted file mode 100644 index 5209ba3e..00000000 --- a/guide/Bot/botVerified.md +++ /dev/null @@ -1,45 +0,0 @@ -# $botVerified - -This function checks if a Discord bot is verified. A verified bot has been reviewed and approved by Discord. - -## Usage - -```bash -$botVerified[Bot ID] -``` - -**`Bot ID`**: The ID of the bot you want to check. You can find this by right-clicking on the bot in Discord (with Developer Mode enabled) and selecting "Copy ID." - -## Examples - -Here are a couple of examples demonstrating how `$botVerified` works. - -### Example: Verified Bot - -In this example, we check if the bot with the ID `725721249652670555` is verified. - - - - !!exec $botVerified[725721249652670555] - - - true - - - -The function returns `true` because the bot with ID `725721249652670555` is verified. - -### Example: Unverified Bot - -In this example, we check if the bot with the ID `582019849073590274` is verified. - - - - !!exec $botVerified[582019849073590274] - - - false - - - -The function returns `false` because the bot with ID `582019849073590274` is not verified. \ No newline at end of file diff --git a/guide/Bot/botVersion.md b/guide/Bot/botVersion.md deleted file mode 100644 index 3406a8e5..00000000 --- a/guide/Bot/botVersion.md +++ /dev/null @@ -1,17 +0,0 @@ -# $botVersion - -This function returns the version of your bot. - -## Usage - -The `$botVersion` function doesn't require any arguments. Simply use it in your commands to retrieve the current bot version. - -```bash -$botVersion -``` - -**Example:** - -Let's say your bot version is `v2.5.1`. If you use `$botVersion` in a message response, it will output: - -`v2.5.1` diff --git a/guide/Bot/cacheMember.md b/guide/Bot/cacheMember.md deleted file mode 100644 index 8df4d2b5..00000000 --- a/guide/Bot/cacheMember.md +++ /dev/null @@ -1,25 +0,0 @@ -# $cacheMember - -This function caches a member in the bot's memory. This is useful for functions like `$usersWithRole` that rely on having members already cached, especially if you're using them frequently *without* cooldowns. - -**Think of it this way:** Caching a member makes them instantly recognizable to the bot, preventing issues with functions that need to quickly access their information. - -**Note:** Functions like `$toggleRoles` and `$giveRoles` don't require you to manually cache members, as they handle member retrieval internally. - -#### Usage: `$cacheMember[userID (optional)]` - -* **`userID (optional)`:** The ID of the user you want to cache. If omitted, the function will attempt to cache the user who triggered the command. - -#### Example: - -`$cacheMember[123456789012345678]` - Caches the user with the ID 123456789012345678. - -`$cacheMember` - Caches the user who executed the command. - -::: tip -**Automatic Caching:** When a user executes a command, they are automatically cached. You typically only need to use `$cacheMember` if you're dealing with users who haven't recently interacted with the bot or if you need to ensure a user is cached *before* a specific function is called. -::: - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Bot/clientID.md b/guide/Bot/clientID.md deleted file mode 100644 index a158257f..00000000 --- a/guide/Bot/clientID.md +++ /dev/null @@ -1,25 +0,0 @@ -# $clientID - -Retrieves the bot's User ID, also referred to as the Client ID. This is a unique identifier for your bot on Discord. - -#### Usage: `$clientID` - -
- -This function is commonly used to programmatically access the bot's ID within custom commands or other bot logic. - -Here's an example of how it works in practice: - - - - !!exec $clientID - - - 725721249652670555 - - - -As you can see, the command `!!exec $clientID` returns the bot's ID: `725721249652670555`. - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Bot/cpu.md b/guide/Bot/cpu.md deleted file mode 100644 index e5e48650..00000000 --- a/guide/Bot/cpu.md +++ /dev/null @@ -1,12 +0,0 @@ -# $cpu - -This function provides real-time information about the bot's current CPU usage. - -## Usage - -Simply use `$cpu` in your command or response. The function will be replaced with a numerical representation of the bot's CPU usage percentage. - -```php -$cpu -``` - diff --git a/guide/Bot/executionTime.md b/guide/Bot/executionTime.md deleted file mode 100644 index cf751f81..00000000 --- a/guide/Bot/executionTime.md +++ /dev/null @@ -1,22 +0,0 @@ -# $executionTime - -This function returns the time it took for the interpreter to execute the code *before* this function, measured in milliseconds. - -## How to Use - -Simply include `$executionTime` in your code. It will be replaced with the execution time in milliseconds. - -```php -$executionTime -``` - -**Example:** - -Imagine your bot executes some complex calculations or retrieves data from an external source. You can use `$executionTime` to gauge how long these operations take. - -``` -Some complex command code -$executionTime -``` - -This would output the time taken to execute the "Some complex command code" part of the command. This can be useful for identifying performance bottlenecks. \ No newline at end of file diff --git a/guide/Bot/getBotActivity.md b/guide/Bot/getBotActivity.md deleted file mode 100644 index 61921c23..00000000 --- a/guide/Bot/getBotActivity.md +++ /dev/null @@ -1,29 +0,0 @@ -# $getBotActivity - -Retrieves the bot's current activity status (e.g., "Playing...", "Listening to...", "Watching...", "Competing in..."). - -## Usage - -```bash -$getBotActivity[text/type] -``` - -**Parameters:** - -* `text`: Returns the text displayed in the bot's activity status (e.g., "The Cosmos"). -* `type`: Returns the type of activity the bot is doing. (e.g. "PLAYING", "LISTENING", "WATCHING", "COMPETING") - -## Example - -This example demonstrates how to use `$getBotActivity[text]` to display the bot's current activity text. - -![Example Screenshot](https://i.imgur.com/KyYqUGU.png) - - - - !!exec $getBotActivity[text] - - - The Cosmos - - \ No newline at end of file diff --git a/guide/Bot/getBotInvite.md b/guide/Bot/getBotInvite.md deleted file mode 100644 index b411521e..00000000 --- a/guide/Bot/getBotInvite.md +++ /dev/null @@ -1,36 +0,0 @@ -# $getBotInvite - -Generate an invite link for your bot. - -## Usage - -```bash -$getBotInvite[permission;permission;permission...] -``` - -**Parameters:** - -* `permission` - (Optional) A list of permissions to request in the invite link. Separate multiple permissions with a semicolon (;). If no permissions are specified, the invite will request the default permissions. - -## Example - -``` -!!exec $getBotInvite[admin] -``` - -This will output an invite link for your bot with administrator permissions. - -**Example Output:** - - - - !!exec $getBotInvite[admin] - - - https://discord.com/oauth2/authorize?client_id=725721249652670555&scope=bot+applications.commands&permissions=8 - - - -::: tip Permissions -Refer to the [Permissions List](../CodeReferences/ref.permissions_list.md) for a comprehensive list of permission names and their corresponding integer values. -::: \ No newline at end of file diff --git a/guide/Bot/maxRam.md b/guide/Bot/maxRam.md deleted file mode 100644 index e179c169..00000000 --- a/guide/Bot/maxRam.md +++ /dev/null @@ -1,17 +0,0 @@ -# $maxRam - -This function returns the maximum amount of RAM (memory) allocated to the current shard of your bot. It's helpful for monitoring resource usage and potentially optimizing performance. - -## Usage - -Simply use the function in your code: - -```php -$maxRam -``` - -This will return the maximum RAM available to your bot's shard, typically expressed in mega bytes. - -**Example:** - -If the function returns `1024`, it means your shard has a maximum of 1GB of RAM available. \ No newline at end of file diff --git a/guide/Bot/ping.md b/guide/Bot/ping.md deleted file mode 100644 index 608a64db..00000000 --- a/guide/Bot/ping.md +++ /dev/null @@ -1,24 +0,0 @@ -# $ping - -This command provides the bot's ping (latency) in milliseconds. It's a quick and easy way to check if the bot is online, responsive, and functioning correctly. Think of it like a simple "health check" for the bot! - -#### Usage: `$ping` - -
- -Here's an example of how to use the `$ping` command in Discord: - - - - !!exec $ping ms - - - 20 ms - - - -In this example, the bot responded with `20 ms`, indicating a ping of 20 milliseconds. A lower ping generally means the bot is more responsive. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Bot/ram.md b/guide/Bot/ram.md deleted file mode 100644 index b1636e79..00000000 --- a/guide/Bot/ram.md +++ /dev/null @@ -1,25 +0,0 @@ -# $ram - -Displays the amount of RAM (Random Access Memory) currently being used by the bot. This command provides insight into the bot's resource consumption. - -#### Usage: `$ram` - -
- -**Example:** - -``` -!!exec $ram MB -``` - -**Bot Response:** - -``` -2143.55 MB -``` - -This indicates that the bot is currently using approximately 2143.55 MB of RAM. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Bot/serverCount.md b/guide/Bot/serverCount.md deleted file mode 100644 index de0528fc..00000000 --- a/guide/Bot/serverCount.md +++ /dev/null @@ -1,21 +0,0 @@ -# $serverCount - -This function returns the total number of servers (guilds) the bot is currently in. It's a simple way to display the bot's reach. - -#### Usage: `$serverCount` - -This function doesn't require any arguments. Just include it in your command response. -
-**Example:** - - - !!exec I am in $serverCount servers. - - - I am in 15000 servers. - - - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Bot/setBotActivity.md b/guide/Bot/setBotActivity.md deleted file mode 100644 index 85537434..00000000 --- a/guide/Bot/setBotActivity.md +++ /dev/null @@ -1,24 +0,0 @@ -# $setBotActivity - -Set your bot's activity status (the text displayed under the bot's name). - -## Usage - -```bash -$setBotActivity[activity type;activity text] -``` - -**Parameters:** - -* `activity type`: The type of activity. Valid options are: `playing`, `streaming`, `listening`, `watching`, `custom` and `competing`. -* `activity text`: The text to display as the bot's activity. - -## Examples - -**Example:** Sets the bot's activity to "Listening to The Cosmos". - -```bash -$setBotActivity[listening;The Cosmos] -``` - -![](https://i.imgur.com/KyYqUGU.png) \ No newline at end of file diff --git a/guide/Bot/uptime.md b/guide/Bot/uptime.md deleted file mode 100644 index b0181f21..00000000 --- a/guide/Bot/uptime.md +++ /dev/null @@ -1,24 +0,0 @@ -# $uptime - -This command displays how long the bot has been running since it was last started. - -#### Usage: `$uptime` - -
- -Here's an example of how it works: - - - - !!exec $uptime - - - 3d 17h 53m 27s - - - -In this example, the bot has been running for 3 days, 17 hours, 53 minutes, and 27 seconds. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Changelogs/1.v1.md b/guide/Changelogs/1.v1.md deleted file mode 100644 index 20ca9ae4..00000000 --- a/guide/Changelogs/1.v1.md +++ /dev/null @@ -1,40 +0,0 @@ -# v1.x (Current) - -## v1.6.0 (Beta) -> Release Date: TBD -#### ✨ Improvements - -* Support for combined duration expressions in `$parseTime` (e.g. `1h30m` and `1h 30m`). -* Support for specifying the output unit in `$parseTime` (`ms`, `s`, `m`, `h`, `d`, `w`, `M`, `y`). -* New trigger for upvoting with a referral link, [learn more here](../Trigger/upvote.md). -* New functions `$upvoteTime` and `$upvoteReferralUserID` for the new upvote trigger. -* Added a **Custom** option for Custom Bot status (Tier 4+) in **Dashboard > Premium**. -* Improved the Word Trigger UI with more intuitive options such as **Starts With**. New commands use the updated system while maintaining backward compatibility. -* Support for Forwarded Messages in the new Word Trigger. -* `$msg` now supports forward-related options such as `isforward`, `forwardmsgid`, `forwardsvid`, and `forwardchid`. -* `$message` now returns the forwarded message content when the message is a forwarded message. -* New trigger for User Commands (Context Menu), [learn more here](../Trigger/app_cmd_user.md). -* New trigger for Message Commands (Context Menu), [learn more here](../Trigger/app_cmd_message.md). -* New function `$eventTargetID` to retrieve the User ID or Message ID for the new User Command and Message Command triggers. -* For testing purposes, the `emit` command now supports the Upvote event. Use `[prefix]emit upvote`. - -#### 🐛 Fixes -* `$serverCount` and `$allMembersCount` return the correct numbers for custom bots (Tier 3+) -* Fix for message fails to edit if used some curl message like {color} inside `$editIn` - - -## v1.5.0 (Main) -> Release Date: 26 July 2026 -#### ✨ Improvements - -* Increased **referral vote reward** from **0.4 → 0.5 credits**. -* Added the new **`!!ping`** command to check bot latency for public use. -* Refreshed the UI for **`!!debug`**, **`!!info`**, **`!!help`**, and **`!!commands`**. - -#### 🐛 Fixes - -* Fixed **`$newTicket`** not adding the user to newly created ticket channels. - -#### 📚 Changes - -* Removed **`!!doc`**. Use **`!!func`** to search the documentation instead. \ No newline at end of file diff --git a/guide/Changelogs/v1.4.4.md b/guide/Changelogs/v1.4.4.md deleted file mode 100644 index a9fd6fb7..00000000 --- a/guide/Changelogs/v1.4.4.md +++ /dev/null @@ -1,872 +0,0 @@ -# V1.4.4 -### New - - -::: details New functions: $mentionRole, $mentionChannel -An easy user-friendly way to mention a role or a channel with name or id. - -Example -```php -$mentionRole[Member] -$mentionChannel[updates-beta] -``` -::: - -::: details New curl: removebutton, removemenu - -You can now use {removebutton} and {removemenu} to remove a menu/button while editing a message content with curl - -Usage -``` -{removebutton:id} to remove a button with specific id -{removebutton} to remove all buttons - -{removemenu:id} to remove a menu with specific id -{removemenu} to remove all menus -``` - -Example -```php -$editMessage[ -my new content -{removebutton} -] -``` -::: - -::: details New function: $removeEmbed - -Will help you to remove specific embed from a message or all embeds of a message. - - -Usage -```php -$removeEmbed[Channel ID;Message ID;Embed Number (or all)] -``` - -Example (Remove all embeds of a message) -```php -$removeEmbed[$channelID;$messageID;all] -``` - -::: - - -::: details New debug command -This command is mainly to brief you some basic information, that staff might request such as: -* Cluster -* Tier -* Server ID -* Record of recent executions -> you can see it with `[prefix]debug` - -![](https://i.imgur.com/SQWCm0z.png) -::: -::: details New function: $numToWord - -it will convert the number to it's verbal equivalents i.e 5 to five - -![](https://i.imgur.com/aYHQy2C.png) -::: -::: details New Menu Types - -You can use the new menu types supported by discord which are: `user, role, mention, channel` -In addition to the default `text` type - -##### User Menu Type -This menu, allow the user to pick a user from the server - -##### Role Menu Type -This menu, allow the user to pick a role from the server - -##### Mention Menu Type -This menu, allow the user to pick anything mentionable such as user or channel from the server - -##### Channel Menu Type -This menu, allow the user to pick a channel (or category) from the server - -#### How to set the type -In curl format you can use `{type:the menu type}` like `{type:user}` - -##### Example -As shown in the image -![](https://i.imgur.com/X4tHvig.png) - -::: -::: details New function: $imageCrop - -a new image builder function, where it crop a loaded image. - -##### Usage -```php -$imageCrop[image name;offset x;offset y;width;height] -``` - -![](https://i.imgur.com/xT1US6y.png) -::: -::: details New Word Trigger Tags like %has_attachment% -other than %all%, a new new useful tags like %has_attachment% were added. - -##### What is a tag? -In word trigger, you can use special word %tag% like %all% to trigger for all messages. -now i added a new ones that might be useful sometimes. -##### Has attachment tag -if you used %has_attachment% tag, the word trigger, will only trigger when a message contains any kind of attachments - -##### automod action tag -if you used %automod_action% tag, it will only trigger for discord automod system message when user is caught - -##### pinned tag -if you used %pin% tag, it will only trigger for pinned discord system message - -##### Thread created tag -if you used %thread_created% tag, it will only trigger for thread created discord system message - -##### has poll tag -if you used %has_poll% tag, it will only trigger when user send a poll -::: -::: details New function: $poll -This function will help you get info about message poll, like question, answers, votes and so on. - -You can read about it [here](../Message/poll.md) - -::: -::: details New Trigger: Poll Updates -This new trigger is related to any poll updates like: when poll ends - -![](https://i.imgur.com/TtG6aUD.png) -![](https://i.imgur.com/b1h1gLu.png) -::: -::: details New Curl: {poll} -This new curl name, will help you send a new poll - -##### Structure -``` -{poll: - {question=poll question} - {duration=poll duration in hours like 24h} - {multiple=can user select multiple answers? (yes/no)} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - ... -} -``` - -##### Example -```php -$sendMessage[ -{poll: -{question=What is the biggest country in the world?} -{answer=China} -{emoji=🇨🇳} -{answer=Russia} -{emoji=🇷🇺} - -{duration=1h} -{multiple=no} -} -] -``` - -#### Output -![](https://i.imgur.com/Y25DJFG.png) -::: -::: details New Trigger: Scheduled Event Updates -This new trigger will help you detect some useful actions of events like: when it starts/ends/created/cancelled - -![](https://i.imgur.com/wFt7Pvx.png) -![](https://i.imgur.com/MYlINsO.png) -::: -::: details New Function: $memberJoinedCode -This function gonna help you know which invite method and code the user used to join the server, it uses member search behind the scene to retrieve the value. - -#### Usage -```php -$memberJoinedCode[User ID;Info Type] -``` - -#### Info Type -You can pick from `code, code_url, type, inviter` -> **code** and **code_url**, return the invite code or invite link if exists - -> **type** will return the method of joining, it will be usually from `bot-invite, integration, discovery, student-hub, invite-link, invite-link-custom, manual-verification` or unknown - -> **inviter** will return the person who invited the user (if exists) - - -#### Example -```php -$memberJoinedCode[$userID;code] -``` - -#### Output -``` -XABCDEF -``` -::: -::: details New Function: $securityPause -This function allows you to pause invites/DMs for the server for a period of time (up to you). - -#### Usage -```php -$securityPause[Duration of Pause (i.e 2h);Pause Invite (Yes/No);Pause DM (Yes/No)] -``` - -##### Example (Pause invites for 24 hours) -```bash -$securityPause[24h;yes;no] -``` - -##### Example (Pause DMs for 12 hours) -```bash -$securityPause[12h;no;yes] -``` - -##### Example (Pause invites and DMs for 24 hours) -```bash -$securityPause[24h;yes;yes] -``` - -> Note: Max Pause Duration is 24h -::: -::: details New Function: $memberSearch -This function allows you, to search for a member if his username/nickname started with a query. it does not rely on cache and instead use discord api. - -#### Usage -```php -$memberSearch[Query;Amount to Return;separator;info to return] -``` - -##### Info To Return: -By default it is `id`, but you can pick from: -* `id`: to return the found user id -* `username`: to return the found user's username -* `nickname`: to return the found user's nickname in the server -* `name`: to return the found user's display name in the server -> You can also use combination of them, like `name (id)` - -> You can know more information about the user with the use of `$user` - -##### Amount to Return: -It determines how many users it will return if they match the query, by default it is 1 -> When multiple user returned, they will merged together with the `separator` -::: -::: details Update Function: $user -Added `displayname` property, that will help you know the user display name if exists - -##### Usage -```php -$user[12345678987654321;displayname] -``` - -> This is not equal to $displayName, as $displayName take user nickname in your server into account. -::: -::: details New Font for Image Builder -A new font named `Minecraft` was added to the image builder, this font is useful for game fonts that is a bit pixelated. -::: -::: details Support for Sending V2 Components -Discord added V2 components that enhance the way embeds looks (Check the image). - -So added new curl that allow you to shape them when sending a new messsage, here is a example: -``` -?exec $sendMessage[ -{container: - -{text:Text Inside Container} -{separator} -{gallery: -{image:$userAvatar} -{image:$userAvatar} -} -{row: -{button:BTN1:red::btn1} -{button:BTN2:GREEN::btn2} -} -{menu: -{id=id} -{ph=Menu} -{name=option 1} -{name=option 2} -} -{row: -{button:BTN3:BLUE::BTN3} -} -{text:Another text inside the container} -{section: -{text:A text inside section and thumbnail} -{thumbnail:$userAvatar} -} -{file:file.txt:Whatever} - -{color:Green} -{spoiler:yes} -} -] -``` - -* container (`{container}`) can contain: {color}, {spoiler}, {text}, {section}, {gallery}, {separator}, {file}, {button}, {menu}, {row} -* section (`{section}`) can contain: {text}, {thumbnail}, {button}, {spoiler} -* gallery (`{gallery}`) can contain images up to 10 images with {image} -* row (`{row}`) can contain 5 button or 1 menu -* spoiler (`{spoiler}`) can be used in some components to mark it as spoiler -* separator (`{separator}`) with options {separator:divider(yes or no):size(1 or 2)} - -> Read more about it [here](../CodeReferences/ref.v2_components.md) - -![](https://i.imgur.com/hTSCGQU.png) -::: -::: details Support Menu in Modal -##### Usage: -```php -$modal[... -{input: -{type=menu} -{subtitle=a description of the menu} -...support menu curl -} -``` - -##### Example: -```php -$modal[ -{title=Application} -{id=modal_id} -{input= - {name=What is your name} - {subtitle=i.e in-game name} - {ph=Man of Culture} - {id=name} -} -{input= - {type=menu} - {name=Which role you want to be in?} - {id=role} - - {option=Swordman} - {emoji=:crossed_swords:} - - {option=Healer} - {emoji=:mending_heart:} - - {option=Tanker} - {emoji=:shield:} -} -] -``` - -![](https://i.imgur.com/2iDvQ4A.png) -::: -::: details Support selected option for menus -when sending a menu with curl, you can specify the selected options by default (it will be useful for the modal menu) - - -##### Usage: -``` -{menu: -...normal menu structure - -{selected=option id} -{selected_user=user id (useful for menu type user or mention)} -{selected_role=role id (useful for menu type role or mention)} -{selected_channel=channel id (useful for menu type channel)} -} -``` - -##### Example: -```php -$sendMessage[ -{menu: -{id=menu_id} -{type=user} -{ph=Select the user} -{selected_user=$userID} -} -] -``` -::: -::: details New Function: $forwardMessage -You can now forward a message from a channel to another. - -##### Usage: -``` - -$forwardMessage[Source Channel ID;Source Message ID;Target Channel ID;Return Message ID (yes/no)] -``` - - -##### Example: -```php -$forwardMessage[$channelID;$messageID;Another Channel] -``` -::: -::: details Support User, Role, Channel, Mentionable Menus in Modal -You can add other types of menus like user selection in the modal - -##### Usage: -```php -$modal[... -{input: -{type=user/role/channel/mention} -{desc=a description of the menu} -{required=yes/no} -{selected=user id/role id/channel id} // for user/role/channel menus - -// for mention menu -{selected_user=user id} -{selected_role=role id} - -} -``` - -##### Example: -```php -$modal[ -{title=Report Application} -{id=modal_id} -{input= - {name=Description} - {ph=i.e description of the report} - {id=desc} -} -{input= -{type=user} -{name=Which user you want to report?} -} -] -``` - -![](https://i.imgur.com/LnZt5B7.png) -::: -::: details Get User equipped clan tag and the server -An update in $user, to allow you to get the equipped clan tag of the user, in addition to the icon and the server where it is originated from. - -##### New options -`clantag`: get the equipped user clan tag, like `TOP` -`clantagicon`: get the tag icon -`clantagserver`: get the tag server id - -##### Example -```php -$user[1234567;clantag] -``` - -![](https://i.imgur.com/tcNhcDv.png) -::: -::: details Support Upload File (Attachment) Input for Modal -You can now ask the user to upload a file in the modal - -##### Usage: -```php -$modal[... -{input: -{type=attachment} -{name=The input name} -{id=The input id} -{subtitle=a description for the input} -{required=yes/no} -{min=Min amount of files (1-10)} -{max=Max amount of files (1-10)} -} -``` - -##### Example: -```php -$modal[ -{title=Report Application} -{id=modal_id} -{input= - {name=Description} - {ph=i.e description of the report} - {id=desc} -} -{input= - {type=user} - {id=target} - {name=Which user you want to report?} -} -{input= - {id=proof} - {type=attachment} - {name=Upload Picture or Proof if exist} - {required=no} -} -] -``` - -![](https://i.imgur.com/LPEkezb.png) -::: - -::: details Support Checkbox & Radio Group Inputs for Modals -You can now natively add interactive **Radio Groups** (select one option) and **Checkbox Groups** (select multiple options) directly inside your modals! - -##### Usage: - -```php -$modal[... -{input: - {type=radio/checkbox} - {name=The input name} - {id=The input id} - {subtitle=a description for the input} - {required=yes/no} - {min=Minimum required choices (0-10) [Checkbox only, default: 1]} - {max=Maximum allowed choices (1-10) [Checkbox only, default: all options]} - - {option=Option Label 1} - {value=option_value_1} - {option=Option Label 2} - {value=option_value_2} -} - -``` - -> ⚠️ **Limits:** Radio groups require between **2 to 10** options. Checkbox groups require between **1 to 10** options. - - -##### Example: - -```php -$modal[ -{title=Report Application} -{id=modal_id} -{input= - {name=Description} - {ph=i.e description of the report} - {id=desc} -} -{input= - {type=user} - {name=Which user you want to report?} -} -{input= - {type=attachment} - {name=Upload Picture or Proof if exist} - {required=no} -} -{input= - {type=radio} - {id=report_type} - {required=no} - {name=Type of Report} - {subtitle=Specify which type is this report} - - {option=Staff Violation} - {value=staff} - - {option=Server Rules Violation} - {value=server} - - {option=Spam or Fraud} - {value=spam} -} -] - -``` - -#### Output For Checkbox -![](https://i.imgur.com/QjBEo7E.png) - -#### Output For Radio -![](https://i.imgur.com/kfjr5lQ.png) - -::: -::: details Getting User Global Name - -Return the global name of a user using $globalName or $user - -##### Usage -```php -$globalName[User ID] - -Or - -$user[User ID;globalname] -``` - -::: - -### Update -::: details Function: $getMessage - -This function was completely unusable and produce error on use, now it was fixed - -##### New options -Added alias in options: -* userid > author -* description > desc - -::: - -::: details Function: $findNumbers -added `separator` input for it, to return all numbers with certain separator - -**Example** -```php -$findNumbers[my name is mido, i'm 999 years old, living in the 1000th floor in heaven building.;, ] -``` - -**Output** -``` -999, 1000 -``` -::: - -::: details user mention is accepted as input -You can use user mention as acceptable user input for functions such as $giveRoles - -Example -```php -$giveRoles[$mention;Role name] -``` -will work as expected -::: - -::: details Function: $getCooldownTime -A new input added to the function called `command token`, it allows you to specify which command cooldown you want to retrieve, instead of the running command - -New Usage -```php -$getCooldownTime[time (i.e 5m);type (i.e user);id (i.e 123456);token (i.e xGhkd)] -``` -::: - - - - - - - - -::: details Change of expressions: Soft comparison - -Now in expression, when comparing between two values with `==` or `!=`, it will compare it after triming the spaces around the values, if you want to compare without trimming use `===` or `!==`. - -Example: -``` -A == A (true) -A === A (false) -``` -> This change applies for any function that expect expression such as $if, $checkCondition.. - -![](https://i.imgur.com/kaYAsa9.png) -::: - -::: details New Permissions: sendvc, usesoundboard, sendpolls,... -Added two new permissions to the list: -* sendvc: allow user to send voice message -* usesoundboard: allow user to use sound board -* sendpolls: Allows sending polls -* createexpression: Allows for creating emojis, stickers, and soundboard sounds -* createevent: Allows for creating scheduled events -* viewcreatormonetization: View creator monetization page -* useexternalsounds: Allow use for sounds outside the server -* useexternalapps: Allow user to use external apps in your server. -* pinmessages: Allows pinning and unpinning messages -* bypassslowmode: Allows bypassing slowmode restrictions -* setvcstatus: Allows setting voice channel status -* manageexpression: alias for `manageemoji`, Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users -::: -::: details Function Update: $clearCooldown -Added a new optional input: `Command Token` -Allows you to clear another command token instead of the running one - -New Usage -```php -$clearCooldown[type;id;token] -``` -::: -::: details Function Update: $mentioned - -`Mention Number` input accept `all` as input, which means return all mentioned users with `, ` as separator - -Example -```php -$mentioned[all] -``` - -Output -``` -id1, id2, id3 -``` - - -::: -::: details Function Update: $sendWebhook - -Added `post name` as input, if you would like to create a post inside a forum using the webhook - -Example -```php -$sendWebhook[Webhook ID;Webhook Token;Your message content;;;;;Post name] -``` - -::: - -::: details Function Update: $deleteCommand - -Added `Delete After` input, if you would like to wait a certain amount of time before deleting the message - -#### Example -```php -$deleteCommand[5m] -``` - -::: -::: details Function Update: $clear -Added an input to control if you would like to skip deleting pinned messages or not. - -#### Example -```php -$clear[amount;userid;channel;skip pinned messages (yes/no)] -``` -::: -::: details Function Update: $channel, $editChannel, $createChannel -Added `rtc region` as input to get/set information about voice channel RTC region. - - -##### RTC regions -By default it set to `auto` where discord pick the best region for the vc, but you can specify it to: -``` -auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west -``` - -> You can find the usage in the functions: `$channel`, `$editChannel`, `$createChannel` - -::: -::: details Function Update: $timezone -You can now use UTC+HH:MM or UTC-HH:MM format inside $timezone in case you want a custom timezone offset. - -##### Example -``` -Before: $hour -$timezone[UTC+03:00] -After: $hour -``` - -![](https://i.imgur.com/d2tQMJ2.png) -::: -::: details Function Update: $getEmbed -added `color_hex` property to get the color as hex instead of integer. - -##### Example -```php -$getEmbed[$channelID;12345;color_hex] -``` - -##### Output -``` -#c133ff -``` -::: -::: details Update Function: $nickname -It behaved same as $displayName, so we added new option to control if you would like to return the display name if nickname is not set or not, by default it will return the display name. - - -##### Usage -```php -$nickname[User ID;Return Display name if no nickname set (yes/no, default is yes)] -``` -::: -::: details New Curl: {removefields} -This new curl name, will help you to remove field(s) from your embed - -##### Structure -``` -Remove all fields -{removefields} - -Remove specific fields -{removefields:field number1:field number2:...} -``` - -##### Example -```php -$editEmbed[$channelID;$messageID;{removefields}] -``` -::: -::: details Update Function: $seq -added a new optional option to set the separator of the returned list of numbers, by default it is space - -##### Usage -```php -$seq[Start;Stop;Step;Separator (default ' ')] -``` -::: -::: details Gradient Color for Role Support -$colorRole and $role functions were updated to support the new gradient colors of the role - -##### Usage: -``` -// modify role color -$colorRole[Role name;Primary Color;Second Color (optional);Third Color (optional)] - -// get role color -$role[Role name;primaryColor] -$role[Role name;secondColor] -$role[Role name;ThirdColor] -``` - - -##### Example: -```php -$colorRole[Admin;green;red] -``` -::: -::: details $msg update to see the message components -You can see the message components in form of curl property `components` in $msg - -##### Usage: -```php -$msg[channel ID;message ID;components] -``` - - -##### Example: -![](https://i.imgur.com/QAkhwPm.png) -::: -::: details Renaming `desc` for modal menu -The description of the menu in a modal changed from `{desc}` to `{subtitle}`. -So it does not conflict with the option's `{desc}` - -the original update, was modified as well to reflect that change. -::: -::: details Get voice channel user limit -You can get the voice channel user limit using `limit` in $channel -it will return 0 when there is no limit. - -##### Example -```php -$channel[1234567;limit] -``` -::: -::: details Improvement to $transcriptChannel -the function will show more details about the embeds and the attachments of a message -as of now, the text will be not be rendered in markdown, in the future it will be further beautified. - -![](https://i.imgur.com/y9tGjzI.png) -![](https://i.imgur.com/MPLHWWA.png) -::: -::: details Emiting Timed events -Now you can use `!!emit timed ` to emit timed events (that was created with $setTimeout or in dashboard) -::: -### Fix -::: details Displaying generated image with `{image}` inside `{embed}` - -using `{image:$imageOutput}` inside `{embed}` is now fixed and should show as usual. -::: - -::: details Functions: $objectKeys, $objectKeyExists, $objectLoop, $objectValues -When a key is `undefined` it breaks the object and return invalid values. -::: - -::: details Function: $displayName -when it errors when user has no global name set, it will return display name instead. -::: -::: details Position 0 in $editChannel -Previously setting position to 0 in $editChannel does not set the channel position at top. -Now it will work as intended. -::: \ No newline at end of file diff --git a/guide/Channel/blackListChannelIDs.md b/guide/Channel/blackListChannelIDs.md deleted file mode 100644 index b606f906..00000000 --- a/guide/Channel/blackListChannelIDs.md +++ /dev/null @@ -1,39 +0,0 @@ -# $blackListChannelIDs - -Prevent command execution within specified channels and display a custom error message. - -This function allows you to blacklist specific channels (including categories and threads) where a command cannot be executed. If a user attempts to use the command in a blacklisted channel, the bot will send a predefined error message and stop the command's execution. - -## Usage - -```php -$blackListChannelIDs[Channel ID 1;Channel ID 2;...;Error Message] -``` - -* **Channel ID 1;Channel ID 2;...**: A semicolon-separated list of channel IDs (or names) that are blacklisted. You can use the channel name, but using channel IDs is always recommended for accuracy. -* **Error Message**: The message that will be sent to the user if they attempt to use the command in a blacklisted channel. This message should be informative and helpful to the user. - -**Important Notes:** - -* You can blacklist multiple channels at once by separating their IDs with semicolons. -* The error message is required and must be placed after the list of channel IDs. -* This function checks the channel ID *where the command was executed*. - -## Example: - -```php -$blackListChannelIDs[123456789012345678;987654321098765432;You cannot use this command in the #games or #help channels.] -``` - -In this example: - -* `123456789012345678` and `987654321098765432` are the channel IDs that are blacklisted. -* `You cannot use this command in the #games or #help channels.` is the error message that will be displayed to the user if they try to use the command in either of those channels. - -**Alternative Example using Channel Names (less reliable):** - -```php -$blackListChannelIDs[games;help;You cannot use this command in the #games or #help channels.] -``` - -**Recommendation:** Using Channel IDs is the most reliable approach. To get a channel's ID, you may need to enable Developer Mode in your Discord settings (User Settings -> Advanced -> Developer Mode). Then you can right-click the channel and select "Copy ID". \ No newline at end of file diff --git a/guide/Channel/cacheChannelMessages.md b/guide/Channel/cacheChannelMessages.md deleted file mode 100644 index 9de5797e..00000000 --- a/guide/Channel/cacheChannelMessages.md +++ /dev/null @@ -1,34 +0,0 @@ -# $cacheChannelMessages - -This command forces the bot to cache the latest messages from a channel. Caching messages allows the bot to access them faster, which can be useful for other commands. - -**Important:** This command caches up to 50 messages for standard bots. For bots that are Tier 3 or higher, it caches up to 100 messages. - -## Usage - -```bash -$cacheChannelMessages[Channel ID (optional)] -``` - -**Explanation:** - -* `Channel ID (optional)` is the ID of the channel you want to cache messages from. This is optional. - - * **If you provide a Channel ID:** The command will cache messages from the specified channel. - * **If you don't provide a Channel ID:** The command will cache messages from the channel where the command is executed (the current channel). This is equivalent to using `$channelID`. - -## Examples - -**Cache messages from the current channel:** - -```bash -$cacheChannelMessages -``` - -**Cache messages from a specific channel (using its ID):** - -```bash -$cacheChannelMessages[123456789012345678] -``` - -**Note:** Replace `123456789012345678` with the actual ID of the channel. You can typically find the Channel ID by enabling Developer Mode in Discord settings (Appearance -> Advanced) and right-clicking on the channel. \ No newline at end of file diff --git a/guide/Channel/categoryChannels.md b/guide/Channel/categoryChannels.md deleted file mode 100644 index 44b8df02..00000000 --- a/guide/Channel/categoryChannels.md +++ /dev/null @@ -1,30 +0,0 @@ -# $categoryChannels - -This function retrieves information about channels within a specified category. - -## Usage - -```markdown -$categoryChannels[Category ID;Info type (name/id/mention);Separator (optional, default is ",")] -``` - -**Parameters:** - -* **`Category ID`:** The ID of the category you want to retrieve channel information from. This is a numerical value. -* **`Info type`:** Determines what information you want to retrieve for each channel. Choose from: - * `name`: Returns the name of each channel. - * `id`: Returns the ID of each channel. - * `mention`: Returns a mention string for each channel. -* **`Separator` (Optional):** Specifies the character or string to separate the channel information. If not provided, the default separator is a comma (`,`). - -## Example - -```markdown -!!exec $categoryChannels[1004738497191628860;name;, ] -``` - -This example retrieves the names of all channels within the category with the ID `1004738497191628860`, separated by a comma and a space. - -**Result:** - -![](https://i.imgur.com/3H1BazG.png) \ No newline at end of file diff --git a/guide/Channel/channel.md b/guide/Channel/channel.md deleted file mode 100644 index 25324b00..00000000 --- a/guide/Channel/channel.md +++ /dev/null @@ -1,59 +0,0 @@ -# $channel - -Retrieves information about a specific channel. - -#### Usage: - -`$channel[Channel ID;Option]` - -#### Parameters: - -* **Channel ID:** The ID of the channel you want to get information from. -* **Option:** The specific piece of information you want to retrieve about the channel. See the list below for available options. - -#### Available Options: - -The `Option` parameter determines what information `$channel` returns. Here's a breakdown of the available options: - -* `name`: The name of the channel. -* `id`: The ID of the channel. -* `isdeleted`: Returns `true` if the channel is deleted, otherwise `false`. -* `mention`: Returns the channel mention (e.g., `<#1234567890>`). -* `position`: The channel's position in the channel list (numerical). -* `rawposition`: The raw position of the channel, unaffected by sorting. -* `topic`: The channel topic (if applicable, e.g., for text channels). -* `type`: The type of channel (See Note below). -* `created`: The timestamp of when the channel was created (Unix timestamp). -* `timestamp`: Alias for `created`. Returns the timestamp when the channel was created (Unix timestamp). -* `guildid`: The ID of the guild (server) the channel belongs to. -* `guildname`: The name of the guild (server) the channel belongs to. -* `ismanageable`: Returns `true` if the bot can manage the channel, otherwise `false`. -* `parentid`: The ID of the parent category (if applicable). -* `parentname`: The name of the parent category (if applicable). -* `isviewable`: Returns `true` if the bot can view the channel, otherwise `false`. -* `isdeletable`: Returns `true` if the bot can delete the channel, otherwise `false`. -* `region`: Return the voice channel's RTC region -* `limit`: Return the voice channel's user limit - -##### RC Voice Channel Region -auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west - -#### Example: - -This example retrieves the name of the channel with the ID stored in the variable `$channelID`. - - - - !!exec #$channel[$channelID;name] - - - #custom-command-is-the-best - - - -::: tip Note -The `type` option returns the channel's type. Refer to this [list](../CodeReferences/ref.channel_types.md) for possible channel types. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelCategoryID.md b/guide/Channel/channelCategoryID.md deleted file mode 100644 index f4a62a1c..00000000 --- a/guide/Channel/channelCategoryID.md +++ /dev/null @@ -1,29 +0,0 @@ -# $channelCategoryID - -Retrieves the ID of the category channel the current channel or a specified channel belongs to. - -**What it does:** This function returns the unique identifier (ID) of the category channel that the channel where the command is executed is in. You can also specify a different channel ID to get its category ID. - -#### Usage: - -* `$channelCategoryID` - Returns the category ID of the current channel where the command is used. -* `$channelCategoryID[channelID]` - Returns the category ID of the specified channel ID. Replace `channelID` with the actual ID of the channel. - -
- -**Example:** - - - - !!exec $channelCategoryID - - - 83975894758938799 - - - -In this example, the command `!!exec $channelCategoryID` is used in a channel that is within the category channel with the ID `83975894758938799`. The bot returns the ID of the category channel. - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelCount.md b/guide/Channel/channelCount.md deleted file mode 100644 index eeb3eb9e..00000000 --- a/guide/Channel/channelCount.md +++ /dev/null @@ -1,28 +0,0 @@ -# $channelCount - -This function returns the total number of channels present in the server. - -#### Usage: `$channelCount[Channel Type (optional)]` - -You can optionally specify a channel type to count only channels of that specific type. Refer to this [list](../CodeReferences/ref.channel_types.md) for valid channel types. - -#### Parameters: - -* **`Channel Type` (optional):** The type of channel to count. If omitted, the function will count all channels. Valid types can be found in the [Channel Types Reference](../CodeReferences/ref.channel_types.md). - -#### Example: - -Counts the number of public threads in the server: - -
- - - !!exec There are $channelCount[threads_public] threads in the server! - - - There are 13 threads in the server! - - - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelExists.md b/guide/Channel/channelExists.md deleted file mode 100644 index b9b88128..00000000 --- a/guide/Channel/channelExists.md +++ /dev/null @@ -1,39 +0,0 @@ -# $channelExists - -Checks if a channel with the provided ID exists. Returns `true` if the channel exists, and `false` if it doesn't. - -#### Usage: - -`$channelExists[channelID]` - -**Parameters:** - -* `channelID`: The ID of the channel to check. This should be a numerical value. - -
- -**Example:** - -``` -!!exec $channelExists[889102524727058463] -``` - -``` -true -``` - -::: tip Example Breakdown -This example checks if a channel with the ID `889102524727058463` exists. Since a channel with that ID exists, the function returns `true`. -::: - -::: tip Useful Tip -You can use the `$channelID` function to retrieve the ID of a channel based on its name. This is helpful if you don't already know the channel's ID. -::: - -::: tip Related Functions -* `$findChannel`: Finds a channel by its name. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelID.md b/guide/Channel/channelID.md deleted file mode 100644 index 0053e798..00000000 --- a/guide/Channel/channelID.md +++ /dev/null @@ -1,43 +0,0 @@ -# $channelID - -Returns the ID of the channel where the command is executed. You can also use it to find the ID of another channel by providing its name. - -#### Usage: `$channelID[channel name (optional)]` - -* If no channel name is provided, it returns the ID of the channel where the command was used. -* If a channel name is provided, it returns the ID of the channel with that name. - -
- -**Example:** - -``` -!!exec $channelID -``` - -``` -839090554205241394 -``` - -**Explanation:** The bot returns the channel ID where the `!!exec` command was used. - -
- -**Example with channel name:** - -Let's say you have a channel named `#general`. You can get its ID like this: - -``` -!!exec $channelID[general] -``` - -If a channel named `general` exists, the output will be its ID. - -::: warning -This function will **not** work with the voice channel join/leave trigger. Use `$voiceChannelID` instead. - -This function will **not** work with the channel creation/deletion trigger. Use `$eventChannelID` instead. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelName.md b/guide/Channel/channelName.md deleted file mode 100644 index 2788b031..00000000 --- a/guide/Channel/channelName.md +++ /dev/null @@ -1,36 +0,0 @@ -# $channelName - -Retrieves the name of a Discord channel. - -#### Usage: `$channelName[channelID]` - -`` (Required): The ID of the channel you want to get the name of. - -
- -**Example:** - - - - !!exec $channelName[123456789012345678] - - - The channel's name is... (Assuming the channel ID 123456789012345678 is a channel named "help") - - - -::: tip Important Notes -* If a channel with the specified ID is not found, the function will return an empty string. -* Make sure your bot has the necessary permissions to access the channel. -::: - -::: tip Getting the Channel ID -Use `$channelID` to get the ID of a channel by its name or to get the ID of the channel where the command was executed. -::: - -::: tip Related Functions -Use `$findChannel` to find a channel using its name. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelPermissionsFor.md b/guide/Channel/channelPermissionsFor.md deleted file mode 100644 index 6893f910..00000000 --- a/guide/Channel/channelPermissionsFor.md +++ /dev/null @@ -1,35 +0,0 @@ -# $channelPermissionsFor - -This function retrieves the permissions a specific user or role has within a given channel. It returns a comma-separated list of those permissions. - -## Usage - -```bash -$channelPermissionsFor[userID/roleID] -$channelPermissionsFor[channelID;userID/roleID] -``` - -**Arguments:** - -* `userID/roleID`: (Required) The ID of the user or role whose permissions you want to retrieve. -* `channelID`: (Optional) The ID of the channel to check permissions in. If omitted, the current channel where the command is executed will be used. - -**Breakdown:** - -* **`$channelPermissionsFor[userID/roleID]`**: This will return the permissions of the specified user or role within the channel the command is being executed in. -* **`$channelPermissionsFor[channelID;userID/roleID]`**: This allows you to specify a different channel to check permissions in using its `channelID`. This is useful for checking permissions in other channels without being directly in that channel. - -## Example - -Here's an example demonstrating how to use `$channelPermissionsFor`: - - - - !!exec $channelPermissionsFor[$channelID;$authorID] - - - Create Instant Invite, Kick Members, Ban Members, Administrator, Manage Channels, Manage Guild, Add Reactions, View Audit Log, Priority Speaker, Stream, View Channel, Send Messages, Send Tts Messages, Manage Messages, Embed Links, Attach Files, Read Message History, Mention Everyone, Use External Emojis, View Guild Insights, Connect, Speak, Mute Members, Deafen Members, Move Members, Use Vad, Change Nickname, Manage Nicknames, Manage Roles, Manage Webhooks, Manage Emojis And Stickers, Use Application Commands, Request To Speak, Manage Events, Manage Threads, Use Public Threads, Create Public Threads, Use Private Threads, Create Private Threads, Use External Stickers, Send Messages In Threads, Start Embedded Activities, Moderate Members - - - -In this example, the command `!!exec $channelPermissionsFor[$channelID;$authorID]` retrieves and displays the permissions of the command author (`$authorID`) within the current channel (`$channelID`). The bot then responds with a comma-separated list of the user's permissions in that channel. \ No newline at end of file diff --git a/guide/Channel/channelTopic.md b/guide/Channel/channelTopic.md deleted file mode 100644 index 8dcb30fe..00000000 --- a/guide/Channel/channelTopic.md +++ /dev/null @@ -1,28 +0,0 @@ -# $channelTopic - -Retrieves the topic (or description) of a channel. - -## Syntax - -```bash -$channelTopic -$channelTopic[channelID] -``` - -## Arguments - -* `channelID` (Optional): The ID of the channel you want to retrieve the topic from. If omitted, it defaults to the channel where the command is executed. - -## Example Usage - -**1. Get the topic of the current channel:** - -```bash -$channelTopic -``` - -**2. Get the topic of a specific channel:** - -```bash -$channelTopic[123456789012345678] -``` \ No newline at end of file diff --git a/guide/Channel/channelType.md b/guide/Channel/channelType.md deleted file mode 100644 index cf2d653a..00000000 --- a/guide/Channel/channelType.md +++ /dev/null @@ -1,27 +0,0 @@ -# $channelType - -Retrieves the type of a channel based on its ID. - -#### Usage: `$channelType[channelID]` - -This function allows you to determine the type of a specific channel using its unique ID. - -
- -**Example:** - - - - !!exec $channelType[$channelID] - - - text - - - -::: tip Note -The `$channelType` function returns a string representing the channel type. Refer to this [list](../CodeReferences/ref.channel_types.md) for possible channel types and their meanings. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/channelUsed.md b/guide/Channel/channelUsed.md deleted file mode 100644 index 9f0922e7..00000000 --- a/guide/Channel/channelUsed.md +++ /dev/null @@ -1,34 +0,0 @@ -# $channelUsed - -Returns the ID of the channel used. If no channel ID is specified, it defaults to the current channel where the command was executed. - -#### Usage: `$channelUsed[channelID (optional)]` - -**Parameters:** - -* `channelID (optional)`: The ID of the channel you want to be set as the channel used. If omitted, the function returns the ID of the channel where the command is run. - -**Example:** - -Here are a few examples showcasing the `$channelUsed` function: - - - - !!exec $channelUsed[839090554205241394] - - - !!exec $channelUsed - - - 839090554205241394 - - - -In the first example, the bot set the specified channel ID `839090554205241394` as the channel used. In the second example, because no channel ID is provided, the bot returns the channel ID where the `!!exec` command was executed. - -::: tip Related Functions -* `$channelID` returns the channel ID where the command was executed. See the `$channelID` documentation for more information. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/clear.md b/guide/Channel/clear.md deleted file mode 100644 index 76ce8fb0..00000000 --- a/guide/Channel/clear.md +++ /dev/null @@ -1,55 +0,0 @@ -# $clear - -Clears messages from a channel. You can clear messages from a specific user, or clear all messages in the channel. - -#### Usage: - -`$clear[amount;userID or everyone (optional);channelID (optional);skip pinned messages (optional)]` - -**Parameters:** - -* `amount`: The number of messages to clear (maximum 100). -* `userID` (optional): The ID of the user whose messages you want to clear. If omitted, or set to `everyone`, all messages will be cleared. -* `channelID` (optional): The ID of the channel to clear messages from. If omitted, the current channel is used. -* `skip pinned messages` (optional): default is 'no' -**Example:** - -**Before:** - - - - I'm a spammer, everyone shut up! - - - I'm a spammer, everyone shut up! - - - I'm a spammer, everyone shut up! - - - I'm a spammer, everyone shut up! - - - I'm a spammer, everyone shut up! - - - I'm a spammer, everyone shut up! - - - !!exec $clear[10;everyone] $sendMessage[Channel has been purged] - - - -**After:** - - - - Channel has been purged. - - - -::: warning -You can clear a maximum of 100 messages at a time. Messages older than 2 weeks cannot be cleared. -::: - -#### Function Difficulty: diff --git a/guide/Channel/cloneChannel.md b/guide/Channel/cloneChannel.md deleted file mode 100644 index 9e3877e6..00000000 --- a/guide/Channel/cloneChannel.md +++ /dev/null @@ -1,42 +0,0 @@ -# $cloneChannel - -Clones a channel, duplicating its permissions. - -## Usage - -```bash -$cloneChannel[Channel ID;New Name (optional);Category (optional);Return ID (yes/no, optional)] -``` - -**Parameters:** - -* **`Channel ID`**: The ID of the channel you want to clone. This is a required parameter. -* **`New Name`**: (Optional) The desired name for the new, cloned channel. If left blank, the cloned channel will have the same name as the original. -* **`Category`**: (Optional) The name or ID of the category you want the cloned channel to be placed in. If omitted, the cloned channel will be created outside of any category. -* **`Return ID`**: (Optional) Specifies whether the function should return the ID of the newly created channel. Accepts `"yes"` or `"no"`. Defaults to `"no"` if not specified. - -## Examples - -**Basic Cloning:** - -This example clones the channel with the ID "General" and names the clone "General-Cloned". - -```bash -$cloneChannel[General;General-Cloned] -``` - -**Cloning to a Category:** - -This example clones the channel with the ID "General", names the clone "General-Cloned", and places it in the category named "Category1". - -```bash -$cloneChannel[General;General-Cloned;Category1] -``` - -**Returning the Cloned Channel ID:** - -This clones the channel with the ID "General" and returns the ID of the newly created channel. - -```bash -$cloneChannel[General;;;yes] -``` \ No newline at end of file diff --git a/guide/Channel/closeTicket.md b/guide/Channel/closeTicket.md deleted file mode 100644 index 1ab950f1..00000000 --- a/guide/Channel/closeTicket.md +++ /dev/null @@ -1,29 +0,0 @@ -# $closeTicket - -Closes a ticket that was previously created by the bot using the `$newTicket` command. This is used to finalize and close a support or request ticket channel. - -#### Usage: `$closeTicket[optional error message]` - -`$closeTicket` can optionally take an error message as an argument. This message will be displayed if there's an issue closing the ticket (although in most cases the ticket will close without errors). - -
- -**Example:** - -This example demonstrates how to send a message informing the user about the ticket closure, wait for a short period, and then close the ticket. - -```sh -$sendmessage[This ticket will be closed in 5 seconds.] -$wait[5s] -$closeTicket -``` - -**Explanation:** - -* `$sendmessage[This ticket will be closed in 5 seconds.]`: Sends a message to the ticket channel informing the user that the ticket will be closed shortly. -* `$wait[5s]`: Pauses the script execution for 5 seconds, giving the user a chance to read the message. -* `$closeTicket`: Closes the ticket channel. - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/createChannel.md b/guide/Channel/createChannel.md deleted file mode 100644 index e3b6beb8..00000000 --- a/guide/Channel/createChannel.md +++ /dev/null @@ -1,49 +0,0 @@ -# $createChannel - -Creates a new channel within your Discord server. - -#### Usage: - -```php -$createChannel[name;type;return ID (yes/no);categoryID (optional);topic;NSFW (yes/no);Bitrate (i.e 64000, VC only);Position;Slowmode in Seconds (optional);User Limit (VC only);RTC Region (VC Only)] -``` - -#### Parameters: - -* **name:** The name of the channel. -* **type:** The type of channel to create (e.g., `text`, `voice`, `category`). Refer to the available channel types list below. -* **return ID (yes/no):** Specify `yes` if you want the function to return the ID of the newly created channel, otherwise `no`. -* **categoryID (optional):** The ID of the category to place the new channel under. If left blank, the channel will be created outside of any category. -* **topic:** (Optional) The topic/description of the channel. -* **NSFW (yes/no):** Specify `yes` if the channel should be marked as NSFW (Not Safe For Work), otherwise `no`. -* **Bitrate (i.e 64000, VC only):** The bitrate of the voice channel (in bits per second). Only applicable for voice channels. -* **Position:** The position of the channel in the channel list. Lower numbers appear higher. -* **Slowmode in Seconds (optional):** The slowmode duration for the channel, in seconds. Only applicable for text channels. -* **User Limit (VC only):** The maximum number of users allowed in the voice channel. Only applicable for voice channels. -* **RTC Region:** The RTC region of the voice channel, defaults to `auto` - -##### RTC Region: -For Voice Channel Only, to specify where voice channel RTC region located. -default is `auto`, where discord will pick the best one, but you can specify one of those: -> auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west - - -#### Example: - -```php -$createChannel[general;text;no] -``` - -This will create a text channel named "general" in the server. - -::: tip Available Channel Types -For a complete list of valid channel types, see [this reference page](../CodeReferences/ref.channel_types.md). -::: - -::: tip Related Functions -* `$createThread`: Use this function to create a new thread. -* `$createRole`: Use this function to create a new role. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/createForum.md b/guide/Channel/createForum.md deleted file mode 100644 index 56d39f8a..00000000 --- a/guide/Channel/createForum.md +++ /dev/null @@ -1,72 +0,0 @@ -# $createForum - -Create a new forum channel within your Discord server. - -## Usage - -```bash -$createForum[ - {name=Forum name} - {topic=Forum topic and guidelines (optional)} - {layout=Forum Layout (optional)} - {category=Forum category (optional)} - {position=Forum position in the category (optional)} - {default_reaction=Post's default reaction (optional)} - {tag_required=Whether tag is required or not when adding post (optional)} - {sort=sorting order of the posts(optional)} - {archive=When auto-archive inactive post (optional)} - {nsfw=age restriction of forum (optional)} - {post_ratelimit=Post creations ratelimit (optional)} - {message_ratelimit=Post messages ratelimit (optional)} - {reason=Creation Reason for audit log (optional)} - {tag=available tags in the post (optional)} - {moderator_tag=available tags only for moderators} - {return_id=Whether return the created forum id or not} -] -``` - -**Parameters:** - -* **`name`**: (Required) The name of the forum channel. -* **`topic`**: (Optional) A description or guidelines for the forum. This will be displayed at the top of the forum channel. -* **`layout`**: (Optional) The visual layout of the forum. Accepts two values: `list` or `gallery`. Defaults to `list` if not specified. -* **`category`**: (Optional) The category ID where the forum channel should be created. If not provided, the forum will be created in the same category as the channel executing the command or at the top of the guild. -* **`position`**: (Optional) The numerical position of the forum within its category. -* **`default_reaction`**: (Optional) The default emoji reaction added to each new post. Must be a valid emoji. -* **`tag_required`**: (Optional) Specifies whether a tag is required when creating a new post. Accepts `yes` or `no`. -* **`sort`**: (Optional) Determines the sorting order of posts in the forum. Accepts two values: `creation` (sort by creation date) or `activity` (sort by last activity). Defaults to `creation`. -* **`archive`**: (Optional) Automatically archives inactive posts after a specified duration. Accepts the following values: `1h`, `1d`, `3d`, `7d`. -* **`nsfw`**: (Optional) Marks the forum as age-restricted (NSFW). Accepts `yes` or `no`. -* **`post_ratelimit`**: (Optional) Sets a ratelimit (in seconds) for creating new posts within the forum. -* **`message_ratelimit`**: (Optional) Sets a ratelimit (in seconds) for sending messages within posts in the forum. -* **`reason`**: (Optional) A reason for creating the forum, which will be logged in the audit log. -* **`tag`**: (Optional) Defines available tags for posts. Can be repeated. -* **`moderator_tag`**: (Optional) Defines available tags only for moderators. Can be repeated. -* **`return_id`**: (Optional) Specifies whether the created forum's ID should be returned. Accepts `yes` or `no`. - -**Important Considerations:** - -* You can repeat the `{tag}` and `{moderator_tag}` parameters as many times as needed, but keep the combined total number of tags below 20. Discord's API limits the number of tags. - -### Tag Format - -Tags can be defined in two formats: - -1. **Emoji + Name:** ` ` (e.g., `❤️ Love`) -2. **Name Only:** `` (e.g., `Helpful`) - -### Example: - -```bash -$createForum[ - {name=Opinions} - {topic=Share your thoughts and opinions on various topics.} - {archive=1w} - {tag=In Life} - {tag=In Work} - {tag=In Society} - {tag_required=yes} - {default_reaction=👍} - {sort=activity} -] -``` diff --git a/guide/Channel/deleteChannels.md b/guide/Channel/deleteChannels.md deleted file mode 100644 index 4113a07f..00000000 --- a/guide/Channel/deleteChannels.md +++ /dev/null @@ -1,32 +0,0 @@ -# $deleteChannels - -Deletes one or more channels from the server. - -#### Usage: - -`$deleteChannels[channelID1;channelID2;channelID3;...]` - -**Parameters:** - -* `channelID1;channelID2;channelID3;...`: A semicolon-separated list of channel IDs to delete. - -#### Example: - -`$deleteChannels[$channelID]` - -This example will delete the channel the command is executed in. `$channelID` represents the ID of the current channel. - -**Deleting Multiple Channels:** - -`$deleteChannels[123456789012345678;987654321098765432]` - -This example will delete the channels with IDs 123456789012345678 and 987654321098765432. - -::: tip Related Functions -* Use `$deleteRoles` to delete roles. -* Use `$deleteThreads` to delete threads. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/editChannel.md b/guide/Channel/editChannel.md deleted file mode 100644 index 33345610..00000000 --- a/guide/Channel/editChannel.md +++ /dev/null @@ -1,43 +0,0 @@ -# $editChannel - -Edits the properties of a channel. - -#### Usage: - -`$editChannel[channelID;categoryID/$default;name/$default;position/$default;nsfw/$default (yes/no);bitrate/$default;userLimit/$default;syncPermission/$default (yes/no);reason (optional);RTC region/$default]` - -> Use `$default` as a placeholder if you don't want to modify a specific property. - -**Parameters:** - -* `channelID`: The ID of the channel you want to edit. -* `categoryID`: The ID of the category to move the channel to. Use `$default` to keep it in the same category. -* `name`: The new name of the channel. Use `$default` to keep the current name. -* `position`: The new position of the channel in the channel list (integer). Use `$default` to keep the current position. -* `nsfw`: Whether the channel is NSFW (Not Safe For Work). Use `yes` or `no`. Use `$default` to keep the current setting. -* `bitrate`: The new bitrate of the channel (for voice channels). Use `$default` to keep the current bitrate. -* `userLimit`: The new user limit of the channel (for voice channels). Use `$default` to keep the current limit. -* `syncPermission`: Whether to sync the channel's permissions with its category. Use `yes` or `no`. Use `$default` to keep the current setting. -* `reason`: (Optional) The reason for editing the channel. This will be visible in the audit log. -* `RTC Region`: (Optional) The new RTC Region for a voice channel, defaults to 'auto' - -::: tip Channel Types -Refer to [this list](../CodeReferences/ref.channel_types.md) for all valid channel types and their properties. -::: - -#### RTC Region List: -default is `auto`, but you can specify one of those: -> auto, brazil, hongkong, india, japan, rotterdam, russia, singapore, southafrica, sydney, us-central, us-east, us-south, us-west - -#### Example: - -`$editChannel[$channelID;$default;new-channel-name;$default;$default;$default;$default;yes;Channel name update]` - -This example changes the channel name to "new-channel-name", syncs permissions with category and provides a reason for audit logs. All other channel properties will remain unchanged. - -::: tip Related Functions -Use `$modifyChannelPerms` to manage channel permissions in more detail. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/editForum.md b/guide/Channel/editForum.md deleted file mode 100644 index e1e6b639..00000000 --- a/guide/Channel/editForum.md +++ /dev/null @@ -1,107 +0,0 @@ -# $editForum - -Edits an existing forum channel. This allows you to modify various aspects of the forum, such as its name, topic, layout, and available tags. - -## Usage - -```bash -$editForum[ - {id=Forum Channel ID} - {name=Forum name (optional)} - {topic=Forum topic and guidelines (optional)} - {layout=Forum Layout (optional)} - {category=Forum category (optional)} - {position=Forum position in the category (optional)} - {default_reaction=Post's default reaction (optional)} - {tag_required=Whether tag is required or not when adding post (optional)} - {sort=sorting order of the posts(optional)} - {archive=When auto-archive inactive post (optional)} - {nsfw=age restriction of forum (optional)} - {post_ratelimit=Post creations ratelimit (optional)} - {message_ratelimit=Post messages ratelimit (optional)} - {reason=Edit Reason for audit log (optional)} - {tag=available tags in the post (optional)} - {moderator_tag=available tags only for moderators} - {remove_tag=Tag name to remove} -] -``` - -**Parameters:** - -* `id`: (Required) The ID of the forum channel you want to edit. -* `name`: (Optional) The new name for the forum channel. -* `topic`: (Optional) The new topic and guidelines for the forum channel. This is often displayed at the top of the forum. -* `layout`: (Optional) The layout of the forum. Accepts two values: `list` or `gallery`. -* `category`: (Optional) The ID of the category you want to move the forum channel to. -* `position`: (Optional) The position of the forum channel within its category. This determines the order in which it's displayed. -* `default_reaction`: (Optional) The default emoji reaction added to new posts in the forum. -* `tag_required`: (Optional) Set to `true` to require users to select a tag when creating a new post. Defaults to `false`. -* `sort`: (Optional) The sorting order of posts. Accepts two values: `creation` (sort by creation date) or `activity` (sort by last activity). -* `archive`: (Optional) The duration after which inactive posts are automatically archived. Accepts the following values: `1h`, `1d`, `3d`, `7d`. -* `nsfw`: (Optional) Set to `true` to mark the forum as age-restricted (NSFW). Defaults to `false`. -* `post_ratelimit`: (Optional) The ratelimit in seconds for creating new posts in the forum. -* `message_ratelimit`: (Optional) The ratelimit in seconds for sending messages in posts in the forum. -* `reason`: (Optional) The reason for editing the forum channel. This will be displayed in the audit log. -* `tag`: (Optional) Add a new tag available for posts. You can specify both an emoji and a name, or just a name. See "Tag Values" below. -* `moderator_tag`: (Optional) Add a tag available only for moderators. You can specify both an emoji and a name, or just a name. See "Tag Values" below. -* `remove_tag`: (Optional) The name of a tag to remove from the forum. You can use this parameter multiple times to remove several tags. - -### Tag Removal - -You can remove existing tags using the `{remove_tag=Tag name}` parameter. Repeat this parameter as many times as necessary to remove multiple tags. Make sure you use the exact name of the tag you want to remove. - -### Layout Values - -The `layout` parameter accepts two possible values: - -* `list`: Displays posts in a list format. -* `gallery`: Displays posts in a gallery format. - -### Sort Order Values - -The `sort` parameter accepts two possible values: - -* `creation`: Sort posts by their creation date. -* `activity`: Sort posts by their last activity. - -### Tag Values - -The `tag` and `moderator_tag` parameters accept two formats: - -* ` ` (e.g., `:heart: Love`) -* `` (e.g., `Helpful`) - -### Auto-archive Inactive Post - -The `archive` parameter accepts the following durations: - -* `1h` (1 hour) -* `1d` (1 day) -* `3d` (3 days) -* `7d` (7 days) - -### Tag Limits - -You can repeat the `{tag}` or `{moderator_tag}` parameters as many times as needed, but the total number of tags (combined `tag` and `moderator_tag`) cannot exceed 20. Discord will reject the request if you exceed this limit. - -### Example - -Adding a tag with an emoji: - -```bash -$editForum[ - {id=123456789} - {tag=:heart: Love} -] -``` - -### Example - -Changing the forum name: - -```bash -$editForum[ - {id=123456789} - {name=My cute new forum name} -] -``` \ No newline at end of file diff --git a/guide/Channel/eventChannelID.md b/guide/Channel/eventChannelID.md deleted file mode 100644 index 4ad7e45f..00000000 --- a/guide/Channel/eventChannelID.md +++ /dev/null @@ -1,17 +0,0 @@ -# $eventChannelID - -Returns the ID of the channel that was created or deleted. This function is used specifically for the **Channel Creation** or **Channel Deletion** triggers. - -#### Usage: `$eventChannelID` - -::: warning -**Important Considerations:** - -* This function is exclusively for the **Channel Creation** and **Channel Deletion** triggers. -* For **Voice Channel Join/Leave** events, use `$voiceChannelID` instead. -* This function will **not** work in regular command triggers. For those triggers, use `$channelID`. -::: - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/eventChannelParent.md b/guide/Channel/eventChannelParent.md deleted file mode 100644 index aca7e77e..00000000 --- a/guide/Channel/eventChannelParent.md +++ /dev/null @@ -1,23 +0,0 @@ -# $eventChannelParent - -Returns the ID of the category/forum channel under which a channel or thread was created or deleted. This is **only applicable and useful within channel triggers** (e.g., `channelCreate` or `channelDelete`). - -**In simpler terms:** Imagine a Discord server with categories and channels. This code helps you find out *which category* a new channel was created in, or *which category* a channel was deleted from. - -## How to Use - -Just use `$eventChannelParent` within the code of a channel-based trigger. It will be replaced with the category/forum's ID. - -```bash -$eventChannelParent -``` - -**Example Scenario:** - -Let's say you have a channel trigger that runs when a new channel is created. You can use `$eventChannelParent` to send a message to a specific log channel informing administrators which category the new channel was created under: - -```bash -$channelSendMessage[LogChannelID;A new channel ($eventChannelName) was created under category ID: $eventChannelParent] -``` - -**Important Note:** This function will only return a valid ID within the scope of channel triggers. Using it outside of those triggers may result in unexpected behavior (likely an empty string). \ No newline at end of file diff --git a/guide/Channel/findChannel.md b/guide/Channel/findChannel.md deleted file mode 100644 index 283f3e74..00000000 --- a/guide/Channel/findChannel.md +++ /dev/null @@ -1,49 +0,0 @@ -# $findChannel - -Searches for a channel by its ID, mention, or name. - -#### Usage: - -`$findChannel[ID/mention/name;returnCurrentChannel (yes/no) (optional)]` - -**Parameters:** - -* `ID/mention/name`: The ID, mention, or name of the channel to search for. -* `returnCurrentChannel (yes/no) (optional)`: Determines the behavior when a channel isn't found: - * `yes`: (Default) Returns the current channel's ID if no match is found. - * `no`: Returns `undefined` if no match is found. - -**Example Scenarios:** - -**Scenario 1: Channel Found (using channel name)** - - - - !!exec $findChannel[bot-commands;no] - - - 869243919697846379 - - - -In this example, the bot searches for a channel named "bot-commands". If found, it returns the channel's ID (869243919697846379). The `;no` tells the function to return undefined if the channel isn't found. - -**Scenario 2: Channel Not Found (with `returnCurrentChannel` set to `no`)** - - - - !!exec $findChannel[bot-cmnds;no] - - - undefined - - - -Here, the bot attempts to find a channel named "bot-cmnds" (note the typo). Since no such channel exists, and the second argument is set to `no`, the function returns `undefined`. - -::: tip Related Functions -`$channelExists` is useful for verifying if a channel ID exists before using it. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/findServerChannel.md b/guide/Channel/findServerChannel.md deleted file mode 100644 index e376bc5e..00000000 --- a/guide/Channel/findServerChannel.md +++ /dev/null @@ -1,39 +0,0 @@ -# $findServerChannel - -This function allows you to search for a specific channel within your Discord server. You can identify the channel by its **name**, **mention**, or **ID**. - -The last parameter determines what the function returns: the channel's ID or `undefined` if the channel is not found. - -## Syntax - -```bash -$findServerChannel[query;returnCurrentChannel (yes/no) (optional)] -``` - -**Parameters:** - -* `query`: (Required) The name, mention (e.g., `<#1234567890>`), or ID of the channel you're looking for. -* `returnCurrentChannel`: (Optional) Specify whether to return the current channel's ID if not found. - * `yes`: Returns the channel's ID. - * `no`: Returns `undefined` if the channel is not found. Defaults to `no` if omitted. - -## Example - -In this example, we're searching for a channel named "general" and telling the function *not* to return anything if the channel is not found. - - - - !!exec $findServerChannel[general;no] - - - 802179504147136552 - - - -::: tip Related functions - -* `$findMember`: Find a member in the server. -* `$findRole`: Find a role in the server. -* `$findChannel`: Find a channel (works across servers if the bot is in multiple). - -::: \ No newline at end of file diff --git a/guide/Channel/getChannelMessages.md b/guide/Channel/getChannelMessages.md deleted file mode 100644 index 3fc48d70..00000000 --- a/guide/Channel/getChannelMessages.md +++ /dev/null @@ -1,31 +0,0 @@ -# $getChannelMessages - -Retrieves the most recent messages from a specified channel. - -## Usage - -```bash -$getChannelMessages[Channel ID;userID or everyone (default is everyone);ids/contents;separator;amount (max 50);reverse (yes/no, default is no)] -``` - -**Parameters:** - -* **`Channel ID`:** The ID of the channel to retrieve messages from. -* **`userID`:** (Optional) The ID of a specific user whose messages you want to retrieve. If you want to retrieve messages from all users, use `everyone` (this is the default if you omit this parameter). -* **`ids/contents`:** Specifies whether you want to retrieve the message IDs or the message contents. Use `ids` to get the IDs, and `contents` to get the message content. -* **`separator`:** The character(s) used to separate the retrieved message IDs or contents in the output. For example, using `/` would separate the results like: `message1/message2/message3`. -* **`amount`:** (Optional) The maximum number of messages to retrieve (maximum is 50). Defaults to a lower number, so setting this is recommended for predictable results. -* **`reverse`:** (Optional) Determines the order of the messages. `yes` reverses the order (oldest to newest), while `no` (default) returns them in the default order (newest to oldest). - -## Example - -This example demonstrates how to retrieve the IDs of the 2 most recent messages sent by the command invoker in the channel where the command was executed, separating them with a forward slash. - - - - !!exec $getChannelMessages[$channelID;$authorID;ids;/;2] - - - 982807194485555300/982807196318457918 - - \ No newline at end of file diff --git a/guide/Channel/getChannelSlowmode.md b/guide/Channel/getChannelSlowmode.md deleted file mode 100644 index 1f976a7e..00000000 --- a/guide/Channel/getChannelSlowmode.md +++ /dev/null @@ -1,36 +0,0 @@ -# $getChannelSlowmode - -Retrieves the slow mode duration (in seconds) of a specified channel. If no slow mode is active, it returns `0`. - -## Syntax - -```php -$getChannelSlowmode or $getChannelSlowmode[channelID] -``` - -## Parameters - -* **`channelID` (Optional):** The ID of the channel to check. If omitted, the function defaults to the current channel where the command is executed. - -## Example Usage - -* **Check the slow mode of the current channel:** - - ``` - $getChannelSlowmode - ``` - - **Returns:** `5` (if the current channel has a 5-second slow mode) or `0` (if no slow mode is active). - -* **Check the slow mode of a specific channel:** - - ``` - $getChannelSlowmode[123456789012345678] - ``` - - **Returns:** `10` (if channel with ID `123456789012345678` has a 10-second slow mode) or `0` (if no slow mode is active). - -## Notes - -* The `channelID` must be a valid channel ID. -* Ensure your bot has the necessary permissions to view the channel. \ No newline at end of file diff --git a/guide/Channel/latestMessage.md b/guide/Channel/latestMessage.md deleted file mode 100644 index d420af92..00000000 --- a/guide/Channel/latestMessage.md +++ /dev/null @@ -1,43 +0,0 @@ -# $latestMessage - -Retrieves the most recent message content or ID from a channel, utilizing the cache for efficiency. - -## Usage - -```bash -$latestMessage[Channel ID (defaults to current channel);User ID (defaults to all users);Return Message ID instead (yes/no, defaults to no)] -``` - -**Explanation:** - -* **Channel ID:** The ID of the channel to search within. If omitted, it defaults to the channel where the command is executed (`$channelID`). -* **User ID:** The ID of a specific user to filter messages by. If omitted, it includes messages from all users (`everyone`). -* **Return Message ID:** A boolean value (`yes` or `no`) that determines whether to return the message's ID instead of its content. Defaults to `no`, returning the message content. - -## Examples - -### Example 1: Return the Latest Message Content - -This example retrieves the content of the most recent message in the current channel. - - - - !!exec $latestMessage[$channelID] - - - Hello World - - - -### Example 2: Return the Latest Message ID - -This example retrieves the ID of the most recent message from any user in the current channel. - - - - !!exec $latestMessage[$channelID;everyone;yes] - - - 1234567890 - - \ No newline at end of file diff --git a/guide/Channel/mentionChannel.md b/guide/Channel/mentionChannel.md deleted file mode 100644 index ea840990..00000000 --- a/guide/Channel/mentionChannel.md +++ /dev/null @@ -1,20 +0,0 @@ -# $mentionChannel - -mention a channel, threads by name or id - -## Usage - -```bash -$mentionChannel[Name/ID] -``` - -### Example: -```bash -$mentionChannel[chat] - -``` - -### Example: -```bash -$mentionChannel[1234567898765431] -``` \ No newline at end of file diff --git a/guide/Channel/modifyChannelPerms.md b/guide/Channel/modifyChannelPerms.md deleted file mode 100644 index bd8276c8..00000000 --- a/guide/Channel/modifyChannelPerms.md +++ /dev/null @@ -1,49 +0,0 @@ -# $modifyChannelPerms - -Modifies channel permissions, including those for categories. This function allows you to grant, deny, or set permissions to neutral for specific roles or users within a channel. - -#### Usage: - -`$modifyChannelPerms[channelID;+perm1;-perm2;/perm3;+perm4;...;roleID/userID]` - -**Explanation:** - -* **`channelID`:** The ID of the channel you want to modify permissions for. This can be a text channel, voice channel, or category channel. -* **`;` (Semicolon):** Separates permission modifications. -* **`+perm`:** Grants the specified permission. -* **`-perm`:** Denies the specified permission. -* **`/perm`:** Sets the specified permission to neutral (inherited from the category or server). -* **`roleID/userID`:** The ID of the role or user you're modifying permissions for. Must be at the end of a permission modification set. - -#### Example: - -`$modifyChannelPerms[$channelID;-sendmessages;$roleID[muted]]` - -This example restricts users with the role "muted" from sending messages in the channel specified by `$channelID`. - -**Breakdown of the Example:** - -* `$channelID`: Represents the ID of the target channel. -* `-sendmessages`: Denies the `sendmessages` permission. -* `$roleID[muted]`: Represents the ID of the role named "muted". - -:::tip Information - -* Use `+` to **grant** a permission. -* Use `-` to **deny** a permission. -* Use `/` to set a permission to **neutral** (inherit from parent). -::: - -::: tip Permissions - -A comprehensive list of all available permissions can be found [here](../CodeReferences/ref.permissions_list.md). -::: - -::: tip Related Functions - -* `$editChannel`: Can be used to modify other channel properties (name, topic, etc.). -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Channel/newTicket.md b/guide/Channel/newTicket.md deleted file mode 100644 index 9787faaa..00000000 --- a/guide/Channel/newTicket.md +++ /dev/null @@ -1,41 +0,0 @@ -# $newTicket - -Create a new support ticket. This function allows users to easily open tickets for assistance, which can be closed later using the `$closeTicket` function. - -#### Usage: `$newTicket[ticket name;ticket message (optional);categoryID (optional);return ticket ID (yes/no) (optional);error message (optional)]` - -**Parameters:** - -* `ticket name`: The name of the ticket channel. Consider using `$userTag` to personalize it (e.g., `$userTag-Ticket`). -* `ticket message (optional)`: A message to be sent in the newly created ticket channel. If left blank, no message will be sent. -* `categoryID (optional)`: The ID of the category to create the ticket under. If not specified, it will create the ticket in the server. You can find category ID by enabling developer mode under discord settings. -* `return ticket ID (yes/no) (optional)`: Specifies whether the function should return the ticket channel ID. Use `yes` to retrieve the ID for further processing, or `no` (or leave blank) to suppress it. -* `error message (optional)`: An error message to display if the ticket creation fails. This can help users understand why their ticket wasn't created. - -**Example:** - -```sh -!!exec $newTicket[$userTag-Ticket;Hello World!] -``` - -This command will: - -1. Create a new text channel named "[username]-Ticket" (where [username] is the user's Discord tag). -2. Send the message "Hello World!" in the newly created ticket channel. - -**Tips & Important Information:** - -::: tip Ticket System -Take advantage of pre-built ticket system templates! You can find and clone highly customizable button-based ticket systems directly from the [dashboard](https://ccommandbot.com/dashboard). These templates simplify the process of setting up a robust ticket system. -::: - -::: warning Category Permissions -By default, everyone can view the newly created ticket channel. To restrict access and maintain privacy, adjust the permissions of the ticket category. Specifically, **deny** the `View Channel` permission for the `@everyone` role within the ticket category. -::: - -::: tip Note -Enhance your ticket messages by using embeds! Utilize the [Message Curl Format](../CodeReferences/ref.message_curl_format.md) to create rich, visually appealing messages within the ticket channel. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/removeContains.md b/guide/Channel/removeContains.md deleted file mode 100644 index 45162088..00000000 --- a/guide/Channel/removeContains.md +++ /dev/null @@ -1,32 +0,0 @@ -# $removeContains - -This function allows you to delete messages within a specified channel that contain certain words. It's useful for moderation and removing unwanted content. - -## Syntax - -```bash -$removeContains[channelID;limit;word1;word2;...] -``` - -## Parameters - -* **`channelID`**: The ID of the channel where messages should be deleted. You can retrieve a channel's ID by enabling Developer Mode in Discord settings (Appearance -> Advanced) and right-clicking the channel. -* **`limit`**: The maximum number of messages to search through in the channel. A higher limit will search through more messages, but may take longer. -* **`word1;word2;...`**: A semicolon-separated list of words to look for within the messages. Any message containing *any* of these words will be deleted. Case sensitivity may vary depending on the bot implementation, so test accordingly. - -## Example - -Let's say you want to delete messages in channel `123456789012345678` containing either the word "spam" or the word "advertisement", and you want to check the last 100 messages. You would use: - -```bash -$removeContains[123456789012345678;100;spam;advertisement] -``` - -This command will search the last 100 messages in channel `123456789012345678` and delete any message containing either "spam" or "advertisement". - -## Important Considerations - -* **Permissions:** The bot must have the `Manage Messages` permission in the specified channel to delete messages. -* **Rate Limits:** Be mindful of Discord's rate limits when deleting messages. Deleting messages rapidly can cause the bot to be temporarily rate limited. Consider adding a small delay between deletions if you anticipate a large number of messages being removed. -* **Case Sensitivity:** The case sensitivity of the word matching may depend on the specific implementation of the bot. Test thoroughly to ensure the function behaves as expected. -* **Message Age:** Discord only allows bots to delete messages that are less than 14 days old. Messages older than this cannot be removed using this function. \ No newline at end of file diff --git a/guide/Channel/serverChannels.md b/guide/Channel/serverChannels.md deleted file mode 100644 index e8fb2eeb..00000000 --- a/guide/Channel/serverChannels.md +++ /dev/null @@ -1,56 +0,0 @@ -# $serverChannels - -This function retrieves a list of all channels within the current server (guild). - -## Usage - -```bash -$serverChannels[info (optional, default: name); type (optional, default: all); separator (optional, default: ", ")] -``` - -**Parameters:** - -* **`info`**: (Optional) Specifies what information about each channel should be returned. Defaults to the channel's name. - * Possible values: - * `name`: Returns the channel's name. - * `id`: Returns the channel's ID. - -* **`type`**: (Optional) Filters the channels based on their type. Defaults to `all` (returns all channels). - * Possible values: - * `all`: Returns all channels (text, voice, category, etc.). - * `text`: Returns only text channels. - * `voice`: Returns only voice channels. - * `category`: Returns only category channels. - -* **`separator`**: (Optional) The string used to separate the channel information in the returned list. Defaults to ", ". - -## Example - -This example retrieves the names of all text channels in the server, separated by forward slashes. - - - - !!exec $serverChannels[name;text;/] - - - channel1/channel2/channel3/channel4 - - - -::: tip Info -* The `info` parameter determines what information you get for each channel. -* The `type` parameter lets you filter the channels returned. -::: - -::: tip Channel Types: - -* **all**: Returns all channels. -* **text**: Returns only text channels. -* **voice**: Returns only voice channels. -* **category**: Returns only category channels. -::: - -::: tip Related Functions - -* `$categoryChannels`: Get channels within a specific category. -::: \ No newline at end of file diff --git a/guide/Channel/setChannelTopic.md b/guide/Channel/setChannelTopic.md deleted file mode 100644 index 7a920415..00000000 --- a/guide/Channel/setChannelTopic.md +++ /dev/null @@ -1,32 +0,0 @@ -# $setChannelTopic - -This command allows you to change the topic (also known as the channel description) of a text channel. - -## Usage - -```bash -$setChannelTopic[channelID;topic] -``` - -**Parameters:** - -* `channelID`: The ID of the channel you want to modify. You can use `$channelID` to refer to the current channel. -* `topic`: The new topic you want to set for the channel. This is a text string. - -## Example - -Let's say you want to set the topic of the current channel to "This channel is for memes only!". You would use the following command: - -```bash -$setChannelTopic[$channelID;This channel is for memes only!] -``` - -**Explanation:** - -* `$channelID` tells the bot to use the ID of the channel where the command is executed. -* `This channel is for memes only!` is the new topic that will be applied to the channel. - -**Important Notes:** - -* Make sure the bot has the necessary permissions to manage the channel. Specifically, it needs the "Manage Channels" permission. -* The maximum length of a channel topic is limited. Very long topics will be truncated. \ No newline at end of file diff --git a/guide/Channel/slowmode.md b/guide/Channel/slowmode.md deleted file mode 100644 index 7978c0ca..00000000 --- a/guide/Channel/slowmode.md +++ /dev/null @@ -1,28 +0,0 @@ -# $slowmode - -This command allows you to set or remove the slowmode in a specified channel. Slowmode limits how frequently users can send messages in that channel. - -## How it Works - -The `$slowmode` command takes two arguments: - -1. **`channelID`**: The ID of the channel you want to modify. You can usually right-click a channel (with developer mode enabled in Discord settings) and select "Copy ID" to get the Channel ID. -2. **`time (like 10s, 1m,..)`**: The duration of the slowmode. This is specified as a number followed by a unit of time. Examples include `10s` (10 seconds), `1m` (1 minute), `5m` (5 minutes), `1h` (1 hour), etc. To *remove* the slowmode, set this value to `0`. - -## Usage Example - -```bash -$slowmode[123456789012345678;10s] -``` - -This example sets the slowmode in the channel with ID `123456789012345678` to 10 seconds. Users will only be able to send a message every 10 seconds in that channel. - -## Removing Slowmode - -To remove slowmode from a channel, use `0` as the time argument: - -```bash -$slowmode[123456789012345678;0] -``` - -This will disable the slowmode in the channel with ID `123456789012345678`. \ No newline at end of file diff --git a/guide/Channel/transcriptChannel.md b/guide/Channel/transcriptChannel.md deleted file mode 100644 index 228ce5b9..00000000 --- a/guide/Channel/transcriptChannel.md +++ /dev/null @@ -1,42 +0,0 @@ -# $transcriptChannel - -This function generates an HTML file containing a transcript of the latest 100 messages from a specified channel and can optionally send the generated file to another channel. - -**Functionality:** Compiles the latest messages from a channel into an HTML file. - -## Usage - -```bash -$transcriptChannel[Channel ID;Send to Channel ID;Message (optional);file name (optional);return message id or undefined.if message could not be send(yes/no default=no)] -``` - -**Parameters:** - -* **`Channel ID`**: (Required) The ID of the channel from which to retrieve the messages. - -* **`Send to Channel ID`**: (Required) The ID of the channel where the generated HTML transcript file will be sent. - -* **`Message (optional)`**: (Optional) An optional message to send along with the transcript file. If left blank, no message will be sent. - -* **`file name (optional)`**: (Optional) The desired filename for the generated HTML transcript file (without the `.html` extension). If left blank, a default filename will be used. - -* **`return message id or undefined.if message could not be send(yes/no default=no)`**: (Optional) Determines whether the function should return the ID of the message containing the sent transcript file. Defaults to `no`. If set to `yes`, the function returns the message ID. If the message could not be sent, the function returns `undefined`. If set to `no`, nothing will be returned. - -### Example - -```php -$transcriptChannel[123456789012345678;987654321098765432;Here is the channel transcript;my_transcript;yes] -``` - -This example will: - -1. Retrieve messages from channel `123456789012345678`. -2. Send an HTML transcript file to channel `987654321098765432` with the message "Here is the channel transcript". -3. Name the generated HTML file "my\_transcript.html". -4. Return the ID of the message sent to channel `987654321098765432`. - -### Notes - -* Ensure the bot has the necessary permissions (Read Messages, View Channel, Send Messages, Attach Files) in both the source channel (`Channel ID`) and the destination channel (`Send to Channel ID`). -* The "latest messages" are determined by the bot's message history caching. The number of messages retrieved may vary depending on server settings and message activity. -* The function returns `undefined` if the bot fails to send the message with the file (e.g., due to permission issues or file size limits). \ No newline at end of file diff --git a/guide/Channel/useChannel.md b/guide/Channel/useChannel.md deleted file mode 100644 index 6c670b7a..00000000 --- a/guide/Channel/useChannel.md +++ /dev/null @@ -1,31 +0,0 @@ -# $useChannel - -This function allows you to specify a different channel for subsequent actions within your command. It essentially redirects where the following functions will execute. - -#### Usage: `$useChannel[channelID]` - -* `channelID`: The ID of the channel you want to use. Make sure the bot has access to this channel. - -#### Example: - -This example demonstrates how to send "Bye!" to a specific channel ID (802179504147136552) while sending "Hi!" to the channel the command was triggered in. - -
- - - - !!exec $sendMessage[Hi!] $useChannel[802179504147136552] $sendMessage[Bye!] /* Bye! will be sent in the channel ID provided. */ - - - Hi! - - - -**Explanation:** - -1. `$sendMessage[Hi!]`: Sends the message "Hi!" to the channel where the command was executed. -2. `$useChannel[802179504147136552]`: Sets the channel to the one with the ID 802179504147136552. -3. `$sendMessage[Bye!]`: Sends the message "Bye!" to the channel specified by `$useChannel` (channel ID 802179504147136552). - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Channel/vcAfter.md b/guide/Channel/vcAfter.md deleted file mode 100644 index e767f04c..00000000 --- a/guide/Channel/vcAfter.md +++ /dev/null @@ -1,13 +0,0 @@ -# $vcAfter - -Returns the ID of the voice channel a user **joined** or **switched to**. This function is triggered **after** a user changes voice channels or joins a voice channel for the first time. - -## Functionality - -This function is particularly useful in events that track voice channel activity. It provides the ID of the *new* voice channel the user is in. - -## Usage - -```markdown -$vcAfter -``` \ No newline at end of file diff --git a/guide/Channel/vcBefore.md b/guide/Channel/vcBefore.md deleted file mode 100644 index 2968de91..00000000 --- a/guide/Channel/vcBefore.md +++ /dev/null @@ -1,29 +0,0 @@ -# $vcBefore - -The `$vcBefore` function returns the ID of the voice channel a user was previously in *before* a voice channel event occurred. This is particularly useful for voice channel join and leave triggers. - -**In simpler terms:** Imagine someone moves from Voice Channel A to Voice Channel B. `$vcBefore` would return the ID of Voice Channel A. If they disconnect entirely from a voice channel, `$vcBefore` would return the ID of the voice channel they left. - -## Functionality - -This function retrieves the voice channel ID associated with a "before" state in voice channel activities, such as: - -* **Voice channel switching:** When a user moves from one voice channel to another. -* **Leaving a voice channel:** When a user disconnects from a voice channel. - -## Usage - -```bash -$vcBefore -``` - -This function doesn't require any arguments. When used within the context of a voice channel join or leave event, it will automatically retrieve the appropriate voice channel ID. - -**Example Scenario:** - -Let's say you have a bot that announces when a user leaves a voice channel. You could use `$vcBefore` to get the ID of the channel they left and then retrieve the channel name to display in the announcement. - -**Important Notes:** - -* This function only works within the context of events triggered by voice channel changes (join, leave, switch). Using it outside of these events will likely result in an empty. -* The returned value is the voice channel's ID, a numerical representation of the channel. You might need to use other functions to convert this ID into a human-readable name or other information. \ No newline at end of file diff --git a/guide/Channel/voiceChannelID.md b/guide/Channel/voiceChannelID.md deleted file mode 100644 index 9f5ebc5a..00000000 --- a/guide/Channel/voiceChannelID.md +++ /dev/null @@ -1,22 +0,0 @@ -# $voiceChannelID - -::: danger -**This function is deprecated and should no longer be used!** - -Please use `$vcBefore` and `$vcAfter` instead. These functions provide more control and flexibility. -::: - -Returns the ID of the voice channel a user joined or left in a voice trigger event. If a user switches channels, this function will return the ID of the *new* channel they joined. - -## Usage - -```bash -$voiceChannelID -``` - -## Important Considerations - -::: warning -* This function **will not work** in the `Channel Creation/Deletion` trigger. Use `$eventChannelID` for those events. -* `$voiceChannelID` is specifically designed for the `Voice Join/Leave` trigger. Using it in other triggers will not produce the desired result. For other triggers, use the more general `$channelID`. -::: \ No newline at end of file diff --git a/guide/CodeReferences/ref.channel_types.md b/guide/CodeReferences/ref.channel_types.md deleted file mode 100644 index 5501698c..00000000 --- a/guide/CodeReferences/ref.channel_types.md +++ /dev/null @@ -1,48 +0,0 @@ -# Understanding Channel Types - -Several functions, like `$channelType` and `$channelCount`, require you to specify a channel type. This page outlines the available channel types and provides an example of their usage. - -### Available Channel Types: - -Here's a list of the currently supported channel types: - -* `text`: Standard text channels. -* `dm`: Direct Message channels (one-on-one conversations). -* `voice`: Voice channels. -* `dm_group`: Group Direct Message channels (multiple users in a DM). -* `category`: Channel categories used to organize channels. -* `news`: Announcement channels for server updates (formerly known as "announcement" channels). -* `store`: Channels used for selling products within Discord (deprecated). -* `thread_news`: Threads within news channels. -* `thread_public`: Public threads within text channels. -* `thread_private`: Private threads within text channels. -* `post`: Forum post channel type. -* `forum`: Forum channel type. -* `stage`: Stage channels for audio and video broadcasting. - -### Example Usage: `$channelType` in a Public Thread - -This example demonstrates how `$channelType` returns the type of the current channel. - -#### Scenario: - -We'll use the `$channelType` function inside a **public thread**. - -#### Code: - -``` -!!exec $channelType -``` - -#### Result: - - - - !!exec $channelType - - - thread_public - - - -###### Tags: \ No newline at end of file diff --git a/guide/CodeReferences/ref.embed.colors.md b/guide/CodeReferences/ref.embed.colors.md deleted file mode 100644 index 3aae9ea0..00000000 --- a/guide/CodeReferences/ref.embed.colors.md +++ /dev/null @@ -1,70 +0,0 @@ -# Acceptable Embed Colors -### Name List: -| Name | Equivalent Hex | -|:-----------:|:-------------:| -| Default | #000000 | -| White | #ffffff | -| Aqua | #1abc9c | -| Green | #57f287 | -| Blue | #3498db | -| Yellow | #fee75c | -| Purple | #9b59b6 | -| LuminousVividPink | #e91e63 | -| Fuchsia | #eb459e | -| Gold | #f1c40f | -| Orange | #e67e22 | -| Red | #ed4245 | -| Grey | #95a5a6 | -| Navy | #34495e | -| DarkAqua | #11806a | -| DarkGreen | #1f8b4c | -| DarkBlue | #206694 | -| DarkPurple | #71368a | -| DarkVividPink | #ad1457 | -| DarkGold | #c27c0e | -| DarkOrange | #a84300 | -| DarkRed | #992d22 | -| DarkGrey | #979c9f | -| DarkerGrey | #7f8c8d | -| LightGrey | #bcc0c0 | -| DarkNavy | #2c3e50 | -| Blurple | #5865f2 | -| Greyple | #99aab5 | -| DarkButNotBlack | #2c2f33 | -| NotQuiteBlack | #23272a | -| Transparent | #2b2d31 | -| Trans | #2b2d31 | -| Random | A random color from #000000 to #ffffff | - -### Hex -It can also accept hex colors like `#1abc9c` - -### Example 1 - - - !!exec $sendMessage[
{desc:You are awesome}
{color:Aqua}
] -
- - - You are awesome - - -
- -### Example 2 - - - !!exec $description[You are awesome}]
$color[#0099ff] -
- - - You are awesome - - -
diff --git a/guide/CodeReferences/ref.expression.md b/guide/CodeReferences/ref.expression.md deleted file mode 100644 index 276fe358..00000000 --- a/guide/CodeReferences/ref.expression.md +++ /dev/null @@ -1,102 +0,0 @@ -# Expressions - -## Why Use Expressions? - -Some functions, like the incredibly useful `$if` function, require an expression as input. Expressions allow you to create dynamic and conditional logic within your scripts. - -## What is an Expression? - -At its core, an expression compares a left-hand side to a right-hand side using an operator. The operator dictates the type of comparison being made. - -``` -Left-Side [Operator] Right-Side -``` - -Here's a breakdown of the available operators: - -| Operator | True When | Description | -| -------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `==` | left-side is equal to right-side | Checks for equality. Both values are compared after normalizing whitespace (leading and trailing spaces are ignored). | -| `===` | left-side is exactly equal to right-side | Checks for exact equality. Values must match exactly, including any leading or trailing whitespace. | -| `!=` | left-side is not equal to right-side | Checks for inequality. Both values are compared after normalizing whitespace (leading and trailing spaces are ignored). | -| `!==` | left-side is not exactly equal to right-side | Checks for exact inequality. Values are considered different if they do not match exactly, including any leading or trailing whitespace. | -| `>` | left-side is greater than right-side (numeric) | Left-side is numerically greater than the right-side. | -| `>=` | left-side is greater than or equal to right-side (numeric) | Left-side is numerically greater than or equal to the right-side. | -| `<` | left-side is less than right-side (numeric) | Left-side is numerically less than the right-side. | -| `<=` | left-side is less than or equal to right-side (numeric) | Left-side is numerically less than or equal to the right-side. | -| `&&` | left-side is true **and** right-side is true | Logical AND. Both sides must evaluate to `true`. | -| `\|\|` | left-side is true **or** right-side is true | Logical OR. At least one side must evaluate to `true`. | - -**Example:** - -```bash -$username==Mido -``` - -In this expression: - -* **Left-side:** `$username` -* **Right-side:** `Mido` -* **Operator:** `==` - -This expression evaluates to `true` *only* if the value of the variable `$username` is equal to `Mido`. - -## Combining Multiple Expressions - -Often, you'll need to create more complex conditions by combining multiple expressions. This is where the `&&` (AND) and `||` (OR) operators become essential. - -### Example 1: Using AND (`&&`) - -```php -$username==Mido&&$country==Egypt -``` - -This expression consists of two separate conditions: - -1. `$username==Mido`: The username must be equal to "Mido". -2. `$country==Egypt`: The country must be equal to "Egypt". - -The `&&` operator means that *both* condition 1 *AND* condition 2 must be true for the entire expression to evaluate to `true`. - -### Example 2: Using OR (`||`) - -```php -$username==Mido||$country==Egypt -``` - -This expression also consists of two separate conditions: - -1. `$username==Mido`: The username must be equal to "Mido". -2. `$country==Egypt`: The country must be equal to "Egypt". - -The `||` operator means that *either* condition 1 *OR* condition 2 (or both) must be true for the entire expression to evaluate to `true`. - -## Grouping Expressions with Parentheses - -For advanced scenarios, you may need to control the order in which expressions are evaluated. Use parentheses `()` to group conditions and ensure they are evaluated as a unit *before* other operations. This is similar to how parentheses work in mathematical equations. - -### Example 1: Complex AND/OR Grouping - -``` -($username==Mido&&$country==Egypt)||($username==Rake&&$country==Germany) -``` - -This expression combines AND and OR operators with grouping: - -1. `($username==Mido&&$country==Egypt)`: The username is "Mido" AND the country is "Egypt". -2. `($username==Rake&&$country==Germany)`: The username is "Rake" AND the country is "Germany". - -The entire expression evaluates to `true` if either group 1 *OR* group 2 is true. - -### Example 2: Nested OR Grouping - -```php -$username==Mido||($country==Egypt||$country==Masr) -``` - -This example uses nested parentheses with OR operators: - -1. `$username==Mido`: The username is "Mido". -2. `($country==Egypt||$country==Masr)`: The country is "Egypt" OR the country is "Masr". - -The expression is `true` if the username is "Mido" OR if the country is either "Egypt" or "Masr". \ No newline at end of file diff --git a/guide/CodeReferences/ref.imgbuild.position.md b/guide/CodeReferences/ref.imgbuild.position.md deleted file mode 100644 index 69ef0ab5..00000000 --- a/guide/CodeReferences/ref.imgbuild.position.md +++ /dev/null @@ -1,86 +0,0 @@ -# Image Builder: Positioning Elements - -Positioning images and objects is a crucial step in building your images. Position is defined by two values, X and Y, which determine the object's location on the canvas. - -## Origin - -The X and Y origin starts at the **top-left corner** of the canvas. This means: - -* `[X=0, Y=0]` is the top-left corner. -* `[X=Width, Y=0]` is the top-right corner. -* `[X=0, Y=Height]` is the bottom-left corner. -* `[X=Width, Y=Height]` is the bottom-right corner. - -![](https://i.imgur.com/o0Ws1LM.png) - -## Example 1: Filling a Rectangle - -Let's use the `$imageFill` function as an example, which requires the position of the filled rectangle. We'll start by positioning a 100x100 rectangle at `[X=0, Y=0]`: - -![](https://i.imgur.com/uWY7dcm.png) - -### Centering the Rectangle (Attempt 1) - -To center the filled rectangle, we might try placing it at X equal to half the canvas width, and Y equal to half the canvas height: - -![](https://i.imgur.com/iSAQv14.png) - -**Problem: That doesn't look centered! Why?** - -**Answer:** You're right! By default, X and Y represent the position of the **top-left** corner of the object. Therefore, placing the *corner* at the center doesn't center the entire rectangle. - -To fix this, we need to offset the position by half the rectangle's width and height. - -### Centering the Rectangle (Corrected) - -Here's the corrected version: - -![](https://i.imgur.com/Ea6uGKA.png) - -> Yay! Now it's centered. - -## Position Base: Changing the Origin Point - -By default, X and Y represent the top-left corner of the object. But what if we want to use a different point as the reference? For example, in the previous example, we had to perform extra calculations to center the box because we were working with the top-left corner. - -### $imagePositionBase - -The `$imagePositionBase` function allows us to change the origin point used for positioning. - -Its usage is: - -```php -$imagePositionBase[Base] -``` - -> Where `Base` can be one of the following: `top`, `topleft`, `topright`, `center`, `centerleft`, `centerright`, `bottom`, `bottomleft`, `bottomright`. - -### Example 2: Rewriting Example 1 with `$imagePositionBase` - -Let's rewrite Example 1, but this time we'll make X and Y represent the *center* of the box by specifying `Base` as `center`: - -![](https://i.imgur.com/PsCAkLz.png) - -### Did you notice `width/2` and `height/2`? Introducing Placeholders - -You might be wondering if there are more user-friendly names, like `width` and `height`, that can be used in position calculations. The answer is YES! We call them **Placeholders**. - -## Position Placeholders - -Placeholders simplify positioning by providing convenient ways to refer to canvas dimensions and center points. - -| Placeholder | Description | -| :----------: | --------------------------------------------------------------------------------------------------- | -| `width` | The width of the canvas. | -| `height` | The height of the canvas. | -| `centerx` | The horizontal center of the canvas (equivalent to `width/2`). | -| `centery` | The vertical center of the canvas (equivalent to `height/2`). | -| `center` | If used in the X position, it's equivalent to `centerx`; if used in the Y position, it's `centery`. | -| `w` | Alias for `width`. | -| `h` | Alias for `height`. | - -## Example 3: Even Simpler Centering - -Now we can use `center` instead of `width/2` and `height/2`, making our code even cleaner: - -![](https://i.imgur.com/vTFbagw.png) \ No newline at end of file diff --git a/guide/CodeReferences/ref.imgbuild.size.md b/guide/CodeReferences/ref.imgbuild.size.md deleted file mode 100644 index c1da8292..00000000 --- a/guide/CodeReferences/ref.imgbuild.size.md +++ /dev/null @@ -1,67 +0,0 @@ -# Image Builder: Understanding Size - -Sizing is crucial for determining the dimensions of objects and images within your canvas. This document explains how size works in our image builder functions. - -## Introduction - -The `Size` parameter in our functions is defined by two key components: **Width** and **Height**. Both values are measured in pixels, must be non-negative, and start from 0. - -## Example 1: Filling a Rectangle - -Let's start with a simple example using the `$imageFill` function, which requires the size of the rectangle to be filled. We'll begin with a rectangle with `Width=100` and `Height=100`. - -```php -$imageFill([x=0, y=0, width=100, height=100, color=blue]) -``` - -![](https://i.imgur.com/uWY7dcm.png) - -### Scaling Up - -Increasing the `Width` and `Height` proportionally scales the rectangle. Let's try `Width=200` and `Height=100`: - -```php -$imageFill([x=0, y=0, width=200, height=100, color=blue]) -``` - -![](https://i.imgur.com/9DG1ubq.png) - -## Example 2: Drawing the Polish Flag - -Let's create two rectangles (White and Red) to construct a simple representation of the Polish flag. - -```php -$imageFill([x=0, y=0, width=width, height=height/2, color=white]) -$imageFill([x=0, y=height/2, width=width, height=height/2, color=red]) -``` - -![](https://i.imgur.com/ByyKJkr.png) - -### Using Placeholders: `w/2` and `h/2` - -Did you notice `width/2` and `height/2` in the code above? These are placeholders that provide dynamic sizing based on the canvas dimensions. The next section will detail all available placeholders. - -## Size Placeholders - -These placeholders allow you to dynamically determine the size of elements based on the canvas dimensions. - -| Placeholder | Description | -|:-----------:|---------------------------------------------------------------------------------------------------| -| `width` | The width of the canvas (in pixels). | -| `height` | The height of the canvas (in pixels). | -| `centerx` | The horizontal center of the canvas, equivalent to `width/2`. | -| `centery` | The vertical center of the canvas, equivalent to `height/2`. | -| `center` | In the `x` position, it's an alias for `centerx`. In the `y` position, it's an alias for `centery`. | -| `w` | Alias for `width`. | -| `h` | Alias for `height`. | - -## Example 3: Simplified Flag using `center` - -We can now use `center` to simplify our Polish flag example, making the code more readable: - -```php -$imageFill([x=0, y=0, width=width, height=centery, color=white]) -$imageFill([x=0, y=centery, width=width, height=centery, color=red]) -``` - -![](https://i.imgur.com/vTFbagw.png) \ No newline at end of file diff --git a/guide/CodeReferences/ref.message_curl_format.md b/guide/CodeReferences/ref.message_curl_format.md deleted file mode 100644 index ed84215f..00000000 --- a/guide/CodeReferences/ref.message_curl_format.md +++ /dev/null @@ -1,79 +0,0 @@ -# Message Curl Format - -Some functions, like `$sendMessage` and `$editMessage`, accept message content as an argument. While you can send plain text, you might want to send a more visually appealing embed instead. - -Message Curl Format allows you to define embed details easily. - -### Usage: ```{info:value}``` - -This format uses curly braces `{}` to define different aspects of your message. The `info` part specifies what you want to set (like the title or description), and the `value` is what you want to set it to. - -### Example - -Here's how to send an embed with the title "Hello" and the description "World": - - - - !!exec $sendMessage[{title:Hello}{description:World}] - - - - - World - - - - - -### Available Curl Formats: - -| Curl Format | Description | Example (click to see output) | -|:-----------:|-------------|---------| -| `{content:text}` | to set message content | `{content:Message content}` | -| `{title:text}` | Adds a title to the embed. | [{title:My name is $username}](https://i.imgur.com/vUfjDLa.png) | -| `{url:link}` | Makes the title a clickable link. | [{url:https://discord.com}](https://i.imgur.com/k234oP0.png) | -| `{footer:text:url}` | Adds a footer with optional image. The URL is for the footer icon. | [{footer:You see my small profile?:$authorAvatar}](https://i.imgur.com/MbG9VQ3.png) | -| `{description:text}` | Sets the main text content of the embed. | [{description:Do you know that this month is $month?}](https://i.imgur.com/BV7wZpY.png) | -| `{desc:text}` | An alias (shorter version) of `{description:text}`. | {desc:Hello World, do you see this description?} | -| `{color:hex}` | Sets the color of the embed's side border. Use a hex code (like `#ff0000`) or a color name (like `RED`). | [{color:RED} or {color:#ff0000}](https://i.imgur.com/f9no81k.png) | -| `{author:text:image url:link url}` | Adds an author section to the embed. You can specify the author's name, an image URL for their avatar, and a URL that the author's name links to. | [{author:$username:$authorAvatar:$authorAvatar}](https://i.imgur.com/2DU2dwn.png) | -| `{thumbnail:url}` | Adds a small image in the top right corner of the embed. | [{thumbnail:$authorAvatar}](https://i.imgur.com/HruXoXs.png) | -| `{field:name:value:inline}` | Adds a field (a small section with a title and value). Set `inline` to `true` or `false` (or `yes`/`no`) to make the field appear next to other inline fields. | [{field:My name:$username}](https://i.imgur.com/zSdpHiW.png) | -| `{removefields:field number 1:field number 2:...}` | remove field(s), leave input empty to remove all fields | {removefields:1:2} | -| `{timestamp:ms}` | Adds a timestamp to the embed. If you don't provide a value, it uses the current time. You can also provide a specific timestamp in milliseconds. | [{timestamp} or {timestamp:1680871946176}](https://i.imgur.com/2CEzTcp.png) | -| `{image:url}` | Adds a large image at the bottom of the embed. | [{image:$authorAvatar}](https://i.imgur.com/Gmrxc69.png) | -| `{reactions:emoji,emoji2,...}` | Adds reactions to the message after it's sent. Separate multiple emojis with commas. Use the standard Discord emoji format (e.g., `:+1:`). | [{reactions: :+1:, :-1:}](https://i.imgur.com/Niff1PI.png) | -| `{reaction:emoji,emoji2,...}` | Alias for `{reactions}`. | {reaction: :+1:, :-1:} | -| `{suppress:yes/no}` | Suppresses the embed for URLs in the message, preventing link previews. | [{suppress:yes}](https://i.imgur.com/xomAWFd.png) | -| `{delete:time(s/m/h...)}` | Deletes the message automatically after a certain amount of time. Use `s` for seconds, `m` for minutes, `h` for hours, etc. | {delete:5s} | -| `{button:Name:style:emoji:button id:new line(yes/no):disabled(yes/no)}` | Adds a button to the message. `style` can be `blue`, `green`, `red`, `grey` or a url, `emoji` is optional, `new line` indicates if the button should be in a new line, `disabled` to disable the button | [{button:Green button:green::id1}](https://i.imgur.com/CIj0FMU.png) | -| `{edit:Time in ms:New Content}` | Edits the message after a specified time (in milliseconds) with new content. | [{edit:5s:My edited content}](https://i.imgur.com/p7LsT5C.png) | -| `{file:Name:Content}` | Adds an attachment file to the message, using the provided text as the file content. | No example | -| `{attachment:Name:URL}` | Adds an attachment file to the message, fetching the file from the given URL. | No example | -| `{deletecommand}` | Deletes the original command message immediately after the new message is sent. | No example | -| `{deletecommand:time}` | Deletes the original command message after a specified time (e.g., `5s`). | {deletecommand:5s} | -| `{reply:message id}` | Replies to a specific message using its ID. | No example | -| `{reply_mention:yes/no}` | Determines whether the user being replied to should be mentioned (pinged). | No example | -| `{interaction}` | Sends the message through an interaction (e.g., a slash command). This is often required for ephemeral messages. | No example | -| `{ephemeral:yes/no}` | Sends the message privately to the user who triggered the interaction. Only works if `{interaction}` is enabled. | No example | -| `{private:yes/no}` | Alias for `{ephemeral:yes/no}`. | No example | -| `{stickers:Sticker 1 ID:Sticker 2 ID:Sticker 3 ID}` | Sends stickers using their IDs. | No example | -| `{pin}` | Pins the sent message to the channel. | No example | -| `{silent}` | Sends the message in silent mode, which doesn't send push notifications to Discord users. | [{silent}](https://i.imgur.com/HhSr6ec.png) | -| `{removebutton:id}` | remove a button with id, empty id will remove all buttons | `{removebutton:mybtnid}` | -| `{removemenu:id}` | remove a menu with id, empty id will remove all buttons | `{removemenu:mybtnid}` | -| `{poll:data}` | add a new poll to the message, learn more about data [here](../CodeReferences/ref.poll_data.md) | see example [here](../CodeReferences/ref.poll_data.md) | -| `{container:data}` | add container for discord v2 components. | [see example here](../CodeReferences/ref.v2_components.md) | - - - - -::: tip Note - -Sometimes values contain special characters like colons (`:`), square brackets (`[` and `]`), semicolons (`:`), or backslashes (`\`). You need to *escape* these characters by placing a backslash (`\`) before them to prevent unexpected results. For example, to use a colon in your text, you would write `\:`. - -If your original format is: `{author:I love:World}` -Correct is: `{author:I love\:World} ` -::: - -###### Tags: \ No newline at end of file diff --git a/guide/CodeReferences/ref.message_types.md b/guide/CodeReferences/ref.message_types.md deleted file mode 100644 index af1514b9..00000000 --- a/guide/CodeReferences/ref.message_types.md +++ /dev/null @@ -1,52 +0,0 @@ -# Understanding Message Types - -The `$messageType` function is your key to identifying the kind of message you're dealing with. It returns a specific type, allowing you to tailor your bot's behavior accordingly. Think of it as a way to understand the *context* of a message beyond just the text. - -**Why is this useful?** - -Knowing the message type lets you: - -* React differently to system messages versus user-generated content. -* Filter specific events, like new member joins or channel updates. -* Customize responses based on the context of a command execution (e.g., a slash command versus a regular message). - -### Available Message Types - -Here's a breakdown of the message types you might encounter, along with brief explanations: - -* `Default`: A standard text message sent by a user or bot. -* `Recipient Add`: A user was added to a group DM. -* `Recipient Remove`: A user was removed from a group DM. -* `Call`: A call has started or ended (typically voice/video). -* `Channel Name Change`: The name of a channel was changed. -* `Channel Icon Change`: The icon of a channel was changed. -* `Channel Pinned Message`: A message was pinned in the channel. -* `User Join`: A new user joined the server/guild. -* `Guild Boost`: The server/guild received a boost. -* `Guild Boost Tier 1`: The server/guild reached boost level 1. -* `Guild Boost Tier 2`: The server/guild reached boost level 2. -* `Guild Boost Tier 3`: The server/guild reached boost level 3. -* `Channel Follow Add`: A channel was followed (typically in announcement channels). -* `Guild Discovery Disqualified`: The server/guild was disqualified from server discovery. -* `Guild Discovery Requalified`: The server/guild requalified for server discovery. -* `Guild Discovery Grace Period Initial Warning`: A warning about an upcoming disqualification from server discovery. -* `Guild Discovery Grace Period Final Warning`: A final warning before disqualification from server discovery. -* `Thread Created`: A new thread was created in a channel. -* `Reply`: A message that's a reply to another message. -* `Chat Input Command`: A slash command was used (starting with `/`). -* `Thread Starter Message`: The first message in a thread. -* `Guild Invite Reminder`: A reminder about an outstanding guild invite. -* `Context Menu Command`: A command executed from the context menu (right-click). -* `Auto Moderation Action`: An action taken by auto-moderation. -* `Role Subscription Purchase`: A user purchased a role subscription. -* `Interaction Premium Upsell`: A premium upsell related to an interaction. -* `Stage Start`: A stage channel has started. -* `Stage End`: A stage channel has ended. -* `Stage Speaker`: A new speaker was added to a stage channel. -* `Stage Topic`: The topic of a stage channel was changed. -* `Guild Application Premium Subscription`: A premium subscription related to guild applications. -* `Guild Incident Alert Mode Enabled`: Incident alert mode was enabled. -* `Guild Incident Alert Mode Disabled`: Incident alert mode was disabled. -* `Guild Incident Report Raid`: An incident report flagged a raid. -* `Guild Incident Report False Alarm`: An incident report flagged a false alarm. -* `Purchase Notification`: A notification related to a purchase. diff --git a/guide/CodeReferences/ref.permissions_list.md b/guide/CodeReferences/ref.permissions_list.md deleted file mode 100644 index 48dc3aa1..00000000 --- a/guide/CodeReferences/ref.permissions_list.md +++ /dev/null @@ -1,77 +0,0 @@ -# Understanding Channel, User, and Role Permissions - -Several bot functions, such as `$modifyChannelPerms` and `$modifyRolePerms`, require you to specify permission names. This page provides a comprehensive list of these permission names and their descriptions. - -### Available Permissions: - -Here's a breakdown of the permissions you can use: - -* **admin:** Administrator (Grants all permissions) -* **manageserver:** Manage Server (Modify server settings) -* **kick:** Kick User (Remove members from the server) -* **ban:** Ban User (Permanently remove members from the server) -* **manageroles:** Manage Roles (Create, edit, and delete roles) -* **managechannels:** Manage Channels (Create, edit, and delete channels) -* **managewebhooks:** Manage Webhooks (Create, edit, and delete webhooks) -* **managemessages:** Manage Messages (Delete messages, pin messages) -* **viewauditlog:** View Audit Log (See server activity logs) -* **managenicknames:** Manage Nicknames (Change member nicknames) -* **sendmessages:** Send Messages (Send text messages in channels) -* **readmessages:** Read Message History (View past messages in channels) -* **movemembers:** Move Members (Move users between voice channels) -* **manageemojis:** depreciated, use `manageexpression` instead -* **viewguildinsights:** View Guild Insights (Access community analytics) -* **mentioneveryone:** Mention Everyone (@everyone and @here) -* **embedlinks:** Embed Links (Post links with rich previews) -* **viewchannel:** View Channel (See the channel. If set to `false`, the user cannot see the channel) -* **createinvite:** Create Invite (Generate invite links to the server) -* **mutemembers:** Mute Members (Silence users in voice channels) -* **speak:** Speak (Speak in voice channels) -* **deafenmembers:** Deafen Members (Prevent users from hearing in voice channels) -* **attachfiles:** Attach Files (Upload files to channels) -* **connect:** Connect (Join voice channels) -* **addreactions:** Add Reactions (Add reactions to messages) -* **speakpriority:** Speak Priority (Speak uninterrupted in voice channels) -* **ttsmessage:** Send TTS Message (Send text-to-speech messages) -* **externalemoji:** Use External Emojis (Use emojis from other servers) -* **vad:** Voice Activity Detection (Use voice activity detection in voice channels) -* **changenickname:** Change Nickname (Change own nickname) -* **slashcommand:** Use Slash Commands (Use application commands) -* **speakrequest:** Request to Speak (Request to speak in stage channels) -* **managethreads:** Manage Threads (Delete, archive threads, view all private threads) -* **publicthreads:** Create Public Threads (Create public forum and announcement threads) -* **privatethreads:** Create Private Threads (Create private threads) -* **externalstickers:** Use External Stickers (Use stickers from other servers) -* **canstream:** Go Live (Stream video in voice channels) -* **manageevents:** Manage Events (Create, edit, and delete scheduled events) -* **createpublicthreads:** Create Public and Announcement Threads -* **createprivatethreads:** Create Private Threads -* **sendmessagesinthreads:** Send Messages in Threads (Send messages within threads) -* **embeddedactivities:** Use Activities (Use Discord Activities) -* **moderatemembers:** Moderate Members (Timeout Users) -* **sendvc:** Allows for sending a voice messages -* **usesoundboard:** Allows for using sound-boards -* **useexternalsounds:** Allow use for sounds outside the server -* **viewcreatormonetization:** View creator monetization page -* **createexpression:** Allows for creating emojis, stickers, and soundboard sounds -* **createevent:** Allows for creating scheduled events -* **sendpolls:** Allows sending polls -* **useexternalapps:** Allows user-installed apps to send public responses. When disabled, users will still be allowed to use their apps but the responses will be ephemeral. This only applies to apps not also installed to the server. -* **pinmessages:** Allows pinning and unpinning messages -* **bypassslowmode:** Allows bypassing slowmode restrictions -* **setvcstatus:** Allows setting voice channel status -* **manageexpression:** Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users - -### Example: Denying Send Messages Permission - -This example demonstrates how to use `$modifyChannelPerms` to deny the "send messages" permission for a role with the ID `muted` in a specific channel. - -```php -$modifyChannelPerms[$channelID;-sendmessages;$roleID[muted]] -``` - -In this example: - -* `$channelID` is the ID of the channel you want to modify permissions in. -* `-sendmessages` denies the "sendmessages" permission. Using a `+` would grant the permission instead. -* `$roleID[muted]` specifies the role ID of the "muted" role. diff --git a/guide/CodeReferences/ref.poll_data.md b/guide/CodeReferences/ref.poll_data.md deleted file mode 100644 index c7f8009d..00000000 --- a/guide/CodeReferences/ref.poll_data.md +++ /dev/null @@ -1,37 +0,0 @@ -# Poll Curl Format -You can use {poll:data} to send a message with a poll - -### Usage -``` -{poll: - {question=poll question} - {duration=poll duration in hours like 24h} - {multiple=can user select multiple answers? (yes/no)} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - ... -} -``` - -### Example -```php -$sendMessage[ -{poll: -{question=What is the biggest country in the world?} -{answer=China} -{emoji=🇨🇳} -{answer=Russia} -{emoji=🇷🇺} - -{duration=1h} -{multiple=no} -} -] -``` - -### Output -![](https://i.imgur.com/4BRQVag.png) \ No newline at end of file diff --git a/guide/CodeReferences/ref.time_format.md b/guide/CodeReferences/ref.time_format.md deleted file mode 100644 index bc4d43db..00000000 --- a/guide/CodeReferences/ref.time_format.md +++ /dev/null @@ -1,40 +0,0 @@ -# Understanding Time Formats - -Many functions require you to specify a time format to correctly construct date and time values. This guide explains the accepted time format macros you can use. - -For example, the `$timeToDate` function uses these formats. - -### Available Time Format Macros - -The following table details the available time format macros and their descriptions: - -| Macro | Description | Example | -| :------- | :------------------------------------------------ | :---------- | -| `d` | Day number of the month | `9` | -| `0d` | Day number of the month with leading zero | `09` | -| `dn` | Day name of the week | `Sunday` | -| `y` | Year number | `2022` | -| `hr` | Hour in 24-hour format | `20` (8 PM) | -| `0hr` | Hour in 24-hour format with leading zero | `05` (5 AM) | -| `hr/12` | Hour in 12-hour format | `8` | -| `0hr/12`| Hour in 12-hour format with leading zero | `08` | -| `ms` | Milliseconds | `1` | -| `0ms` | Milliseconds with leading zeros | `001` | -| `min` | Minutes | `9` | -| `0min` | Minutes with leading zero | `09` | -| `m` | Month number | `8` (August)| -| `0m` | Month number with leading zero | `08` | -| `mn` | Month name | `February` | -| `s` | Seconds | `20` | -| `0s` | Seconds with leading zero | `03` | -| `ampm` | AM/PM indicator | `PM` / `AM` | -| `tz` | Timezone abbreviation | `UTC` | - -### Example -```php -$timeToDate[$timestamp;%y%-%m%-%d%] -``` -Result: -``` -2025-8-15 -``` \ No newline at end of file diff --git a/guide/CodeReferences/ref.v2_components.md b/guide/CodeReferences/ref.v2_components.md deleted file mode 100644 index 8f22c4c7..00000000 --- a/guide/CodeReferences/ref.v2_components.md +++ /dev/null @@ -1,124 +0,0 @@ -# Discord V2 Components Curl Format -You can use {container:data} to send a message with v2 component - -### Usage -``` -{container: - {color: the color of the container} - {text: a text inside the container} - {section: ...} - {gallery: ...} - {row: ...} - {menu: ...} - {file: ...} - {spoiler:...} - {separator:...} -} -``` -* Total number of components (i.e container, text...) cannot exceed 40 in the entire message -* Containers can hold up to 40 components (i.e text, gallery,...) at max. -* Total text content length in the message cannot exceed 4000 - -#### Section structure -Section allows you to add a text + image + button together inside a container. A section should contain at least one text and one accessory (image or button). If you are putting this inside a container and want *only* the thumbnail to be a spoiler, use {spoiler:yes} inside the section. -The structure is: -``` -{section: - {text: any text inside the section} - {thumbnail/thumb: an image URL to show inside the section} - {button:Name:color:emoji:id:new line (yes/no):disabled (yes/no)} - {spoiler:yes/no} -} -``` - -#### Gallery structure -Gallery allows you to show multiple images together like a gallery. Supports up to 10 images for each gallery component. -the structure is: -``` -{gallery: - {image: image 1 url} - {image: image 2 url} - ... - {image: image 10 url} -} -``` - -#### Row structure -Row allows you to include multiple buttons at once (up to 5 buttons per row). Buttons are like the normal button curl. Read more about button at `$button` -the structure is: -``` -{row: - {button: button 1 details} - {button: button 2 details} - ... - {button: button 5 details} -} -``` - -#### Menu structure -Menu is like the normal menu curl. It can be used to form a menu inside a container. Read more about menu at `$selectMenu` - -#### File structure -You can set a file in the container for downloading, the structure is: -``` -{file:name of the file:file content as text} -``` - -#### Separator structure -You can set a separator between other components in the container with {separator}, the structure is: -``` -{separator:divide (yes/no):size (1 or 2)} -``` - -#### Spoiler -Spoiler, allow you to determine if the whole container will be marked as spoiler or not (user will need to click to view). -``` -{spoiler:yes/no} -``` - -### Example -```php -$sendMessage[ - {container: - - {text:a text inside container} - {separator:no:2} - {gallery: - {image:$userAvatar} - } - {row: - {button:BTN 1:red::btn1} - {button:BTN 2:GREEN::btn2} - } - {text:a text before the section} - {section: - {text:a text inside the section} - {thumbnail:$userAvatar} - {button: BTN 3:gray:btn3} - } - - {file:file.txt:Whatever} - - {color:Green} - {spoiler:yes} - } -] -``` - -### Example (Not using a container) -If you don't like how the container looks like, you can directly add components without it (only for text, section, gallery, file, separator) -```php -$sendMessage[ - {section: - {text: a text inside section} - {thumb: $userAvatar} - } - {separator} - {section: - {text: a text inside another section} - {button:Click me:gray::btn_id} - } -] -``` -### Output -![](https://i.imgur.com/v8DYvPY.png) diff --git a/guide/CodeReferences/specialCharacters.md b/guide/CodeReferences/specialCharacters.md deleted file mode 100644 index 6d8a42c0..00000000 --- a/guide/CodeReferences/specialCharacters.md +++ /dev/null @@ -1,14 +0,0 @@ -# Special Characters - -Here is a list, of characters found "special": - -`[`, -`]`, -`;`, -`:`, -`$`, -`>`, -`<`, -`=`, -`{`, -`}` diff --git a/guide/Contribution_Info/Templating.md b/guide/Contribution_Info/Templating.md deleted file mode 100644 index 5dcb894d..00000000 --- a/guide/Contribution_Info/Templating.md +++ /dev/null @@ -1,174 +0,0 @@ -# Templating System - -This page explains how to use the new templating system and how to make your commands compatible with it. The new system includes parsing of Metadata and Inputs, making command creation and customization easier. - -## Metadata - -Metadata adds extra information to your commands, such as descriptions, tags, categories, and more. This helps users find your commands more easily through template search. - -**Key Features:** - -* **Improved Discoverability:** Makes commands easier to find in the template search. -* **JSON Format:** Metadata is a JSON object, ensuring structured and error-free information. Incorrect syntax will cause parsing errors. - -### Metadata Syntax - -To add metadata to your code, use the following syntax. **Important:** Make sure to comment out the metadata in your code; otherwise, it will be treated as a message and sent to the user. - -``` -{{{ and }}} -``` - -These delimiters mark the beginning and end of the metadata, allowing the system to parse it correctly. - -#### Metadata Structure - -Here's the structure of the metadata JSON object: - -```ts -{{{ - "version": number, - "tags": Array, - "author": string, - "usecase": string, - "category": string, - "preview": link, - "description": Array, - "link": Array, - "custommd"?: string // Optional custom markdown -}}} -``` - -**Explanation of Fields:** - -* **`version`:** The version of the command. Use numbers. -* **`tags`:** An array of strings representing keywords related to the command (e.g., `["economy", "balance", "money"]`). -* **`author`:** The author of the command (e.g., `"User-0000"`). -* **`usecase`:** A brief explanation of what the command does (e.g., `"checks the balance of the user"`). -* **`category`:** The category the command belongs to (e.g., `"economy"`). -* **`preview`:** A link to a preview image or video demonstrating the command. -* **`description`:** An array of strings providing a detailed description of the command. Each string can be a separate line of the description. Use `...` to format command examples. -* **`link`:** An array of links to relevant resources, documentation, or examples. -* **`custommd`:** (Optional) A string containing custom markdown to further describe or provide instructions for the command. - -#### Metadata Example - -Here's an example of metadata for a `!balance` command: - -``` -/* Metadata : -{{{ - "version": "1", - "tags": ["economy", "balance", "money"], - "author": "User-0000", - "usecase": "checks the balance of the user", - "category": "economy", - "preview": "https://media.discordapp.net/attachments/845279377733320745/928401183809364008/unknown.png", - "description": ["Run !bal to show your balance"] , - "link": ["https://media.discordapp.net/attachments/845279377733320745/928401183809364008/unknown.png"], - "custommd": "" -}}} -*/ -The !bal command code -``` - -**Note:** In this example, the `link` and `preview` are the same, as it's a simple command. - -## `$onTemplate` Function - -The `$onTemplate` function creates a user interface (UI) for interacting with commands. This UI allows users to input values and customize the command before execution. It is especially useful for commands that require user-specific information. - -**Important:** A UI is only generated if the command has associated metadata. - -### Usage - -```php -$onTemplate[type;field;title;help;default value] -``` - -**Parameters:** - -* **`type`:** The type of input field to create. -* **`field`:** The style/appearance of the input field. -* **`title`:** The title displayed above the input field in the UI. -* **`help`:** A helpful description displayed below the input field. -* **`default value`:** The default value for the input field. - -**Valid Types:** - -* `category`: Creates a dropdown list of categories from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. -* `number`: Creates a number input field. -* `channel`: Creates a dropdown list of channels from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. -* `role`: Creates a dropdown list of roles from the server. `dropdownarray` or `dropdown` should be used for the `field` parameter. -* `text`: Creates a single-line text input field. -* `boolean`: Creates a checkbox. -* `id`: Creates a text input field, typically used for IDs. -* `runonlyin`: This modifies the cloned command run only in to the selected channel(s) - -**Valid Fields:** - -* `input`: Creates a standard text input field. -* `inputarray`: Creates a text input field with the placeholder "Split by ,". The input will be treated as an array, split by commas. -* `dropdown`: Creates a dropdown list with values from the specified `type`. If the type is `text` or `number`, the values are taken from the `default value` parameter, separated by commas. -* `dropdownarray`: Creates a dropdown list where multiple options can be selected. Values are determined as with the standard `dropdown` field. -* `checkbox`: Creates a checkbox. - -**Title & Help:** - -* **`title`:** The label for the input field. -* **`help`:** A descriptive text providing guidance on what to enter in the input field. - -**Default Value:** - -* **`default value`:** The value that's pre-filled or pre-selected in the input field. - -:::warning Escaping Special Characters -You **cannot** use the characters `[` `]` and `;` directly within the `$onTemplate` function. They are unsupported by the parser. - -Use the following escape sequences instead: - -* `#RIGHT#` for `]` -* `#LEFT#` for `[` -* `#SEMI#` for `;` -::: - -#### Example Ticket System - -**Ticket Code:** - -```php -$let[categoryID;$onTemplate[category;dropdown;Ticket Category;Choose the category where the ticket should be created;$channelCategoryID]] // Put the category ID Here -$if[$buttonID==openTicket] - $cooldown[1m;<@$authorID> Please Wait %time% to create a new ticket] - $newTicket[$userTag; - {title:🎫 Ticket} - {url:https://raspdevpy.gitbook.io} - {description:You can change this message to yours} - {footer:Press the blue link for the docs} - {button:Close The ticket:red:❌:closeTicket} - {color:RANDOM} - ;$get[categoryID];no;Could not Create Ticket] -$elseIf[$buttonID==closeTicket] - $sendMessage[{title: This ticket will be closed in 10s} {color: #ff4a4a};no] - $disableButton[$messageID;closeTicket] - $wait[10s] - $closeTicket[This channel is not a ticket!] -$endelse -``` - -**Template Asking for Input:** - -![Template Input UI](https://i.ibb.co/LQnfhh3/image.png) - -**After Cloning:** `$let[categoryID;866251414232498197]` - -## Special Cases: Arrays - -`dropdownarray` and `inputarray` fields split their input by commas (`,`). To use these arrays in your custom commands, you need to *spread* them. - -**How to Spread Arrays:** - -```php -$let[input;input,from,template] -$giveRoles[$authorID;$spread[,;$input]] -``` diff --git a/guide/Contribution_Info/function_template.md b/guide/Contribution_Info/function_template.md deleted file mode 100644 index 72f5dc2a..00000000 --- a/guide/Contribution_Info/function_template.md +++ /dev/null @@ -1,20 +0,0 @@ -# Function Template - -```md -# $FUNCTION - - -#### Usage: `$FUNCTION NAME + PARAMETERS` -
- - - !!exec There is $botCount bots in the server! - - - There is 1 bot in the server - - - -##### Function difficulty: -###### Tags: -``` \ No newline at end of file diff --git a/guide/Contribution_Info/main.md b/guide/Contribution_Info/main.md deleted file mode 100644 index dbf0688a..00000000 --- a/guide/Contribution_Info/main.md +++ /dev/null @@ -1,55 +0,0 @@ -# Contributing to the Documentation - -This guide outlines how to contribute to the project documentation. We appreciate your help in making our documentation clear, accurate, and comprehensive! - -## Contribution Guidelines - -Please adhere to the following guidelines when contributing: - -* **Use the Template:** A template ensures consistency across all function documentation. You can find the template [here](./function_template.md). -* **Clear and Correct English:** Please use proper English grammar and spelling. Avoid slang and profanity. -* **Descriptive Pull Requests:** When submitting a pull request, clearly explain the changes you've made in the title and description. Be specific about what you've added, modified, or removed. -* **Document What You Know:** Only document functions you are familiar with. Accuracy is paramount. Double-check your work to avoid introducing errors. - -### Editing Existing or Adding Documentation - -You can contribute by editing existing pages or adding new ones directly through our GitHub repository. - -#### Prerequisites - -* **GitHub Account:** You'll need a [GitHub account](https://github.com). - * New to GitHub? Check out the official GitHub [documentation](https://docs.github.com/en) for tutorials and guidance. -* **Markdown Basics:** A basic understanding of [Markdown](https://www.markdownguide.org/cheat-sheet/) is required for formatting. - -#### Adding Documentation for a New Function - -Here's a step-by-step guide to adding documentation for a function that doesn't already have a page: - -1. **Check `undone.md`:** Before you start, check the `undone.md` file in the [repository](https://github.com/raspdevpy/ccdoc/tree/main/guide) to ensure that nobody else is already documenting the function. This prevents duplicate effort. - - * _Example: You want to document the function `$botCount`._ - -2. **Fork the Repository:** Create your own copy of the repository by forking it. - ![](https://i.ibb.co/2kPRCX0/image.png) - -3. **Create a New File:** In your forked repository, navigate to the appropriate folder (usually `guide`) and create a new file named after the function, using the `.md` extension. - - * _Example: Create a file named `botCount.md`._ - ![](https://i.ibb.co/BLCbs7q/image.png) - -4. **Use the Template and Populate It:** Use the [template](./function_template.md) as a starting point. Fill in the template with accurate and detailed information about the function. You can also refer to existing function documentation files for inspiration. - ![](https://i.ibb.co/X5M0s01/image.png) - -5. **Save and Commit:** Save your changes and commit them to your forked repository with a descriptive commit message. - ![](https://i.ibb.co/8XvCCdm/image.png) - -6. **Update `undone.md`:** Go to `undone.md` and move the function name from the `undone` list to the `done` list. This indicates that the documentation is complete. - ![](https://i.ibb.co/85PxQjM/image.png) - -7. **Create a Pull Request:** Once you've completed all your changes (adding/changing documentation for one or more functions), create a pull request from your forked repository to the main repository. We will review your pull request. - ![](https://i.ibb.co/p3RCGYf/image.png) - ![](https://i.ibb.co/R9fJz7g/image.png) - -### Need Help? - -For any additional information or assistance, please contact a moderator or developer in our Discord server! \ No newline at end of file diff --git a/guide/Cooldown/channelCooldown.md b/guide/Cooldown/channelCooldown.md deleted file mode 100644 index 7d4be1ab..00000000 --- a/guide/Cooldown/channelCooldown.md +++ /dev/null @@ -1,61 +0,0 @@ -# $channelCooldown - -Sets a cooldown for a command in channel. - -## Usage - -```bash -$channelCooldown[time;error message] -``` -1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` -2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. - -## Example - -#### Using $channelCooldown - -As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution - - - - !!exec $channelCooldown[5m;You're on cooldown!]
- You're not on cooldown! -
- - You're not on cooldown! - - - !!exec $channelCooldown[5m;You're on cooldown! Still %mins%m remaining!]
- You're not on cooldown! -
- - You're on cooldown! Still 4m remaining! - -
- -## Placeholders - -Available placeholders you can use in error message - -| Placeholder | Description | Output Example | -| ------------- | --------------------------------------------------------- | ----------------------------------------- | -| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | -| `%days%` | The number of days remaining | `1` | -| `%hrs%` | The number of hours remaining | `2` | -| `%mins%` | The number of minutes remaining | `3` | -| `%secs%` | The number of seconds remaining | `4` | -| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | -| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | - -::: warning Warning -Place this function above the code you want to use cooldown for. All code before this function will be executed. -::: -::: tip Suggestion -You can send embeds, select menus and buttons by using the [message curl format](../CodeReferences/ref.message_curl_format.md). -::: - - -##### Related functions: `$cooldown` `$serverCooldown` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Cooldown/clearCoolDown.md b/guide/Cooldown/clearCoolDown.md deleted file mode 100644 index f72522ce..00000000 --- a/guide/Cooldown/clearCoolDown.md +++ /dev/null @@ -1,43 +0,0 @@ -# $clearCooldown - -Clears a cooldown set by cooldown function. - -**Type:** Clears or resets a pre-existing cooldown. - -## Usage - -```bash -$clearCooldown[type;id;token] -``` -1. **type** - (Optional) default value: `user`. Can be `user`, `channel` or `server`. The type of cooldown to clear. -2. **id** - (Optional) default value: `$authorID` if type is user. The ID of a user or channel to clear cooldown from. -3. **token** - (Optional) default value is the current command token, changing it means clearing another command cooldown -## Example - -#### Remove cooldown from a user - -How to remove cooldown from a user - - - - !!exec $cooldown[5m]
- $clearCooldown
- No cooldown -
- - No cooldown - - - !!exec $cooldown[5m]
- $clearCooldown
- No cooldown 2nd try -
- - No cooldown 2nd try - -
- -##### Related functions: `$getCooldownTime` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Cooldown/cooldown.md b/guide/Cooldown/cooldown.md deleted file mode 100644 index 81860ff3..00000000 --- a/guide/Cooldown/cooldown.md +++ /dev/null @@ -1,62 +0,0 @@ -# $cooldown - -Sets a cooldown in a command for user. - -## Usage - -```bash -$cooldown[time;error message;userID] -``` -1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` -2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. -3. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to set a cooldown to. - -## Example - -#### Using $cooldown - -As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution - - - - !!exec $cooldown[5m;You're on cooldown!]
- You're not on cooldown! -
- - You're not on cooldown! - - - !!exec $cooldown[5m;You're on cooldown! Still %mins%m remaining!]
- You're not on cooldown! -
- - You're on cooldown! Still 4m remaining! - -
- -## Placeholders - -Available placeholders you can use in error message - -| Placeholder | Description | Output Example | -| ------------- | --------------------------------------------------------- | ----------------------------------------- | -| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | -| `%days%` | The number of days remaining | `1` | -| `%hrs%` | The number of hours remaining | `2` | -| `%mins%` | The number of minutes remaining | `3` | -| `%secs%` | The number of seconds remaining | `4` | -| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | -| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | - -::: warning Warning -Place this function above the code you want to use cooldown for. All code before this function will be executed. -::: -::: tip Suggestion -You can send embeds, select menus and buttons by using the [message curl format](../CodeReferences/ref.message_curl_format.md). -::: - - -##### Related functions: `$channelCooldown` `$serverCooldown` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Cooldown/getCooldownTime.md b/guide/Cooldown/getCooldownTime.md deleted file mode 100644 index b9601dbf..00000000 --- a/guide/Cooldown/getCooldownTime.md +++ /dev/null @@ -1,37 +0,0 @@ -# $getCooldownTime - -Returns remaining time of a cooldown in miliseconds. - -## Usage - -```bash -$getCooldownTime[time;type;id;token] -``` -1. **time** - (Optional) default value: (last cooldown set). The time your cooldown was set to. -2. **type** - (Optional) default value: `user`. Can be `user`, `channel` or `server`. The type of cooldown to return remaining time of. -3. **id** - (Optional) default value: `$authorID` if type is user. The ID of a user or a channel to check cooldown from. -4. **token** - (Optional) default value is the current command. It specify which command it should get the cooldown of -## Example - -#### Using $getCooldownTime - -How to use $getCooldownTime - - - - !!exec $channelCooldown[5m]
- $getCooldownTime[5m;channel;$channelID] -
- - 299937 - -
- -::: warning Note -The `time` argument in must exactly match the time in the original cooldown function used. Mismatched durations will result in incorrect cooldown checks. -::: - -##### Related functions: `$clearCooldown` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Cooldown/serverCooldown.md b/guide/Cooldown/serverCooldown.md deleted file mode 100644 index 2f038a55..00000000 --- a/guide/Cooldown/serverCooldown.md +++ /dev/null @@ -1,61 +0,0 @@ -# $serverCooldown - -Sets a cooldown in a command for the whole server. - -## Usage - -```bash -$serverCooldown[time;error message] -``` -1. **time** - (Optional) default value: `5s`. The cooldown duration. Example times: `10s`, `1m`, `2h`, `1d` -2. **error message** - (Optional) default value: (none). The message to send if a cooldown is still in progress. - -## Example - -#### Using $serverCooldown - -As you can see, first time it will set the cooldown and execute code below, second time, it won't allow execution - - - - !!exec $serverCooldown[5m;You're on cooldown!]
- You're not on cooldown! -
- - You're not on cooldown! - - - !!exec $serverCooldown[5m;You're on cooldown! Still %mins%m remaining!]
- You're not on cooldown! -
- - You're on cooldown! Still 4m remaining! - -
- -## Placeholders - -Available placeholders you can use in error message - -| Placeholder | Description | Output Example | -| ------------- | --------------------------------------------------------- | ----------------------------------------- | -| `%time%` | The full time remaining | `1 day 2 hours 3 minutes and 4 seconds` | -| `%days%` | The number of days remaining | `1` | -| `%hrs%` | The number of hours remaining | `2` | -| `%mins%` | The number of minutes remaining | `3` | -| `%secs%` | The number of seconds remaining | `4` | -| `%timestamp%` | Timestamp of cooldown expiration in seconds | `1735689600` | -| `%relative%` | Shows Discord relative timestamp (Automatically Updates) | `` - Displays: `in 1 day` | - -::: warning Warning -Place this function above the code you want to use cooldown for. All code before this function will be executed. -::: -::: tip Suggestion -You can send embeds, select menus and buttons by using the [message curl format](../CodeReferences/ref.message_curl_format.md). -::: - - -##### Related functions: `$serverCooldown` `$cooldown` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Date/creationDate.md b/guide/Date/creationDate.md deleted file mode 100644 index ce1c2d2c..00000000 --- a/guide/Date/creationDate.md +++ /dev/null @@ -1,29 +0,0 @@ -# $creationDate - -Retrieves the creation date of a Discord entity (channel, guild, emoji, user, or role) based on its ID. - -#### Usage: `$creationDate[entityID;format (optional)]` - -**Arguments:** - -* `entityID`: The ID of the Discord entity you want to retrieve the creation date for. This can be a channel ID, guild ID, emoji ID, user ID, or role ID. -* `format` (Optional): Specifies the desired format for the output. If omitted, the default format will be used. Possible values are: - * `date`: Returns the date only. - * `ms`: Returns the creation date in milliseconds since the Unix epoch. - -**Example:** - - - - !!exec $creationDate[725721249652670555;date] - - - Thursday, June 25, 2020 02:37 PM - - - -::: tip Timezone Information -Date functions default to the UTC timezone. To change this, see the [Timezone Configuration](./timezone.md) guide. -::: - -##### Function Difficulty: diff --git a/guide/Date/dateStamp.md b/guide/Date/dateStamp.md deleted file mode 100644 index 3f47c44b..00000000 --- a/guide/Date/dateStamp.md +++ /dev/null @@ -1,28 +0,0 @@ -# $dateStamp - -Returns the current Unix timestamp (the number of milliseconds that have elapsed since January 1, 1970 UTC). - -#### Usage: `$dateStamp[Return in Seconds (Yes/No)]` - -This function allows you to retrieve the current timestamp in either milliseconds or seconds. - -* **`Return in Seconds (Yes/No)`:** Specify whether you want the timestamp returned in seconds (enter `Yes`) or milliseconds (enter `No` or leave blank). - -
- -**Example:** - - - - !!exec $dateStamp, $dateStamp[yes] - - - 1630841854895, 1630841854 - - - -In this example, the first `$dateStamp` call returns the timestamp in milliseconds, while the second `$dateStamp[yes]` call returns the timestamp in seconds. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/dateToTime.md b/guide/Date/dateToTime.md deleted file mode 100644 index 6466c792..00000000 --- a/guide/Date/dateToTime.md +++ /dev/null @@ -1,37 +0,0 @@ -# $dateToTime - -Converts a human-readable date string to milliseconds since the Unix epoch (January 1, 1970, 00:00:00 UTC). You can optionally use `$timezone` to specify a custom timezone for accurate conversion. - -## Usage - -```bash -$dateToTime[Date] -``` - -**Parameters:** - -* `Date`: The date string you want to convert. The date format should be in a format that JavaScript can parse, such as `MM-DD-YYYY`, `YYYY-MM-DD`, or `Month DD, YYYY`. It's generally recommended to use `YYYY-MM-DD` for clarity. - -## Example - -This example converts the date `12-05-2000` to its corresponding timestamp in milliseconds. - - - - !!exec $dateToTime[12-05-2000] - - - - 975974400000 - - - -**Explanation:** - -The command `!!exec $dateToTime[12-05-2000]` converts the date December 5th, 2000, to its equivalent timestamp: 975974400000 milliseconds since the Unix epoch. This value can then be used for further date and time calculations. - -**Important Notes:** - -* The output timestamp is in milliseconds. -* Be mindful of the date format used, as JavaScript's date parsing can be ambiguous. Using `YYYY-MM-DD` is recommended for consistent results. -* If no timezone is explicitly set using `$timezone`, the script will use the default timezone of the environment where it's running. This could lead to unexpected results if the environment's timezone differs from your intended timezone. Consider using `$timezone` to ensure consistent and accurate conversions. \ No newline at end of file diff --git a/guide/Date/day.md b/guide/Date/day.md deleted file mode 100644 index 9c0d5be1..00000000 --- a/guide/Date/day.md +++ /dev/null @@ -1,29 +0,0 @@ -# $day - -Returns the current date. Optionally, you can also retrieve the day of the week. - -#### Usage: `$day[yes/no (optional)]` - -* **`$day`**: Returns the current date (day of the month). -* **`$day[yes]`**: Returns the current date (day of the month) followed by the day of the week. - -**Example:** - -
- - - - !!exec $day $day[yes] - - - 25 Saturday - - - -::: tip Timezone Information -Date functions default to the UTC timezone. You can customize the timezone used by your bot. [Learn More](./timezone.md) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/formatDate.md b/guide/Date/formatDate.md deleted file mode 100644 index 1c0ee3cc..00000000 --- a/guide/Date/formatDate.md +++ /dev/null @@ -1,56 +0,0 @@ -# $formatDate - -Formats a date provided as milliseconds, a string, or an ISO string into a specified format. You can find a detailed explanation of the formatting syntax [here](https://momentjs.com/docs/#/parsing/string-format/). - -#### Usage: `$formatDate[date;format]` - -* **date:** The date to format. This can be: - * Milliseconds (e.g., `1678886400000`) - * A date string (e.g., `1/1/2023`) - * An ISO string (e.g., `2023-03-15T12:00:00Z`) - * Anything that JavaScript's `Date` object can understand. -* **format:** (Optional) The desired output format. If omitted, the default format is used (`Sunday, 14 March 2021`). - -**Example:** - -
- - - - !!exec $formatDate[$dateStamp] - $formatDate[$dateStamp;LLLL] - $formatDate[$dateStamp;dddd at hour HH] - - - Sunday, March 15 2020 - March 15 2020 1:00 PM - Sunday at hour 10 - - - -#### Date Input Options: - -* `datestamp` - Example: `1615578797890` (Milliseconds since the Unix epoch) -* `ms` - Example: `315569267878790ms` -* `string date` - Example: `1/17/2021, 9:09:19 PM` -* `String in ISO` - Example: `2000-3-12T14:48:00.000Z` - -#### Format Options: - -Here are some common formatting options: - -* `Blank` (default) - Example: `Sunday, 14 March 2021` -* `LT` - Time - Example: `6:01 AM` -* `LTS` - Time with seconds - Example: `1:58:3 AM` -* `L` - Date - Example: `1/10/2021` -* `LLL` - Specified Date - Example: `March 12 2020 4:02 AM` -* `LLLL` - Specified Date with Day - Example: `Friday, March 12 2021 4:02 AM` -* `dddd` - Day - Example: `Friday` -* `HH` - Hour (24-hour format) - Example: `15` - -::: tip Other Timezone -Date functions use the default UTC timezone. You can change this. [Learn More](./timezone.md) -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Date/hour.md b/guide/Date/hour.md deleted file mode 100644 index a4c08d76..00000000 --- a/guide/Date/hour.md +++ /dev/null @@ -1,28 +0,0 @@ -# $hour - -This command returns the current hour (in 24-hour format). - -#### Usage: `$hour` - -**Example:** - -This example shows how to use the `$hour` command in a custom command. - -
- - - - !!exec $hour - - - 19 - - - -::: tip Timezone Considerations -Date functions use the UTC timezone by default. You can change the timezone for your bot. [Learn More](./timezone.md) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/humanizeMS.md b/guide/Date/humanizeMS.md deleted file mode 100644 index 853aff9c..00000000 --- a/guide/Date/humanizeMS.md +++ /dev/null @@ -1,54 +0,0 @@ -# $humanizeMS - -Converts milliseconds into a human-readable duration string. This function is useful for displaying elapsed time or time remaining in a user-friendly format. - -#### Usage: `$humanizeMS[milliseconds; limit (optional); separator (optional)]` - -* **`milliseconds`**: The number of milliseconds to convert. This is a required argument. -* **`limit` (optional)**: The maximum number of units to display (e.g., if the limit is 2, it might show "2 years, 3 months" and omit days, hours, etc.). Defaults to showing all units if not specified. Must be a number. -* **`separator` (optional)**: The separator to use between the units (e.g., ", ", " and ", etc.). Defaults to ", " (comma and space) if not specified. - -**Example:** - -``` -!!exec $humanizeMS[$timeStamp;4;,] -``` - -``` -52 years,5 months,26 days,and 10 hours -``` - -**Explanation:** - -In this example: - -* `$timeStamp` (assumed to be a pre-existing variable) holds the number of milliseconds representing a specific point in time. -* `4` is the limit; only the top 4 units (years, months, days, and hours) will be displayed. -* `,` is used as the separator. - -**Another Example (without limit or separator):** - -``` -!!exec $humanizeMS[86400000] -``` - -``` -1 day -``` - -**Another Example (with a different separator):** - -``` -!!exec $humanizeMS[31536000000;2; and ] -``` - -``` -1 year and 0 months -``` - -::: tip Other Timezones -Date functions by default use the UTC timezone, but you can change it. [Learn More](./timezone.md) -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Date/memberJoinedCode.md b/guide/Date/memberJoinedCode.md deleted file mode 100644 index f6b03b08..00000000 --- a/guide/Date/memberJoinedCode.md +++ /dev/null @@ -1,27 +0,0 @@ -# $memberJoinedCode - -retrieve the invite code, which the user join from - -## Usage - -```bash -$memberJoinedCode[User ID;Info Type (default code)] -``` - -### Info Type: - -### Accepted ones are: -* `code`: return the invite code if exists, like Zbhzxf -* `code_url`: return the invite url if exists, like `https://discord.gg/Zbhzxf` -* `type`: return the invite type, one of these values (bot-invite, integration, discovery, student-hub, invite-link, invite-link-custom, manual-verification, unknown) -* `inviter`: return the inviter id if exists - -### Example: - - - !!exec You were invited by $memberJoinedCode[$userID;inviter]

-
- - You were invited by 123456789987654 - -
\ No newline at end of file diff --git a/guide/Date/memberJoinedDate.md b/guide/Date/memberJoinedDate.md deleted file mode 100644 index bff587ae..00000000 --- a/guide/Date/memberJoinedDate.md +++ /dev/null @@ -1,44 +0,0 @@ -# $memberJoinedDate - -Retrieves the date and time a member joined the server. You can specify a user ID or use it without any arguments to get the join date of the command executor. - -#### Usage: `$memberJoinedDate[userID;format(optional)]` or `$memberJoinedDate` - -* `userID`: (Optional) The ID of the member you want to retrieve the join date for. If omitted, it will use the command executor's join date. -* `format`: (Optional) Specifies whether to return the date or time. Can be either `date` or `time`. If omitted, it returns the full date and time. - -**Examples:** - -
- -```html - - - !!exec $memberJoinedDate[725721249652670555;date] - - - Sat Oct 31 2020 - - -``` - -
- -```html - - - !!exec $memberJoinedDate[725721249652670555] - - - Sat Oct 31 2020 10:55:30 GMT+0000 (Coordinated Universal Time) - - -``` - -::: tip Timezone Information -Date functions default to UTC timezone. You can customize the timezone by following the instructions [here](./timezone.md). -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/minute.md b/guide/Date/minute.md deleted file mode 100644 index 89438831..00000000 --- a/guide/Date/minute.md +++ /dev/null @@ -1,30 +0,0 @@ -# $minute - -Returns the current minute (0-59). - -#### Usage: - -```php -$minute -``` - -**Example:** - -This example demonstrates how to use the `$minute` function to display the current minute. - - - - !!exec $minute - - - 23 - - - -::: tip Timezone Information -By default, date and time functions use the UTC timezone. You can change the timezone used. [Learn More](./timezone.md) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/month.md b/guide/Date/month.md deleted file mode 100644 index 5e506f86..00000000 --- a/guide/Date/month.md +++ /dev/null @@ -1,35 +0,0 @@ -# $month - -Returns the current month's number or name. - -#### Usage: `$month[return name (yes/no)]` - -This function allows you to retrieve the current month in either its numerical representation (1-12) or its full name (e.g., January, February). - -* If you use `$month` without any parameters, it will return the month's number. -* If you use `$month[yes]`, it will return the month's name. Any value other than `yes` or no parameter will return the month's number. - -**Example:** - -```html - - - !!exec $month, $month[yes] - - - 11, November - - -``` - -**Explanation:** - -* The first `$month` returns the numerical representation of the current month (in this case, 11 for November). -* The second `$month[yes]` returns the name of the current month (November). - -::: tip Timezone Information -Date functions default to using the UTC timezone. You can change the timezone used by the bot. [Learn More](./timezone.md) -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Date/parseDate.md b/guide/Date/parseDate.md deleted file mode 100644 index f0d76b20..00000000 --- a/guide/Date/parseDate.md +++ /dev/null @@ -1,33 +0,0 @@ -# $parseDate - -Converts milliseconds into a human-readable date or time format. - -#### Usage: `$parseDate[milliseconds; format]` - -**Arguments:** - -* `milliseconds`: The number of milliseconds to convert. -* `format`: Specifies the desired output format. Use `date` to get a formatted date or `time` to get a formatted time duration. - -
- -**Example:** - -This example demonstrates converting 1000 milliseconds to a time duration. - - - - !!exec $parseDate[1000;time] - - - 1 second - - - -**Explanation:** - -The command `$parseDate[1000;time]` converts 1000 milliseconds to a time format, resulting in the output "1 second". - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/parseTime.md b/guide/Date/parseTime.md deleted file mode 100644 index 550fdab2..00000000 --- a/guide/Date/parseTime.md +++ /dev/null @@ -1,71 +0,0 @@ -# $parseTime - -Convert human-readable time strings into a duration. This function accepts a single duration or multiple durations combined into one expression, and can optionally return the result in a different unit. - -## Usage - -```php -$parseTime[time;unit?] -``` - -**Arguments:** - -* `time`: A time duration to convert. Supported units include: - - * `ms` — milliseconds - * `s` — seconds - * `m` — minutes - * `h` — hours - * `d` — days - * `w` — weeks - * `M` — months (30 days) - * `y` — years (365 days) - -* `unit` *(optional)*: The unit to return. Supported values are `ms`, `s`, `m`, `h`, `d`, `w`, `M`, `y`, or their full names (such as `seconds`, `hours`, and `days`). Defaults to `ms`. - -Multiple durations can be combined by separating them with spaces. As a convenience, compact expressions without spaces are also supported. - -## Examples - - - - !!exec $parseTime[1m] - - - 60000 - - - - - - !!exec $parseTime[1h 30m] - - - 5400000 - - - - - - !!exec $parseTime[1h30m] - - - 5400000 - - - - - - !!exec $parseTime[1h30m;m] - - - 90 - - - -**Explanation:** - -* `$parseTime[1m]` converts 1 minute into `60000` milliseconds. -* `$parseTime[1h 30m]` converts 1 hour and 30 minutes into `5400000` milliseconds. -* `$parseTime[1h30m]` is interpreted the same way as `1h 30m` for convenience. -* `$parseTime[1h30m;m]` returns the result in minutes instead of milliseconds. diff --git a/guide/Date/second.md b/guide/Date/second.md deleted file mode 100644 index 63266e15..00000000 --- a/guide/Date/second.md +++ /dev/null @@ -1,27 +0,0 @@ -# $second - -Returns the current second (0-59). - -#### Usage: `$second` - -This function is simple! It just retrieves the current second of the minute. - -**Example:** - -
- - - - !!exec $second - - - 56 - - - -::: tip Timezone Considerations -Date functions default to using UTC timezone. You can change this if needed. [Learn More about Timezones](./timezone.md) -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Date/timeStamp.md b/guide/Date/timeStamp.md deleted file mode 100644 index 3702d0be..00000000 --- a/guide/Date/timeStamp.md +++ /dev/null @@ -1,35 +0,0 @@ -# $timeStamp - -Returns the current Unix timestamp (the number of milliseconds that have elapsed since January 1, 1970, 00:00:00 UTC). - -**Think of it as:** Getting a numerical representation of the current date and time. - -#### Usage: `$timeStamp[Return in Seconds (Yes/No)]` - -* **`Return in Seconds (Yes/No)`**: This is an optional argument. - * If set to `Yes`, the function will return the timestamp in seconds instead of milliseconds. - * If set to `No` (or left blank), the function will return the timestamp in milliseconds. - -**Alias:** This function is an alias for `$dateStamp`. You can use either one interchangeably. - -
- -**Example:** - - - - !!exec $timeStamp, $timestamp[yes] - - - 1630841854895, 1630841854 - - - -**Explanation of the example:** - -* The first value `1630841854895` is the current time in milliseconds. -* The second value `1630841854` is the current time in seconds because we specified `yes` in the function call. - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Date/timeToDate.md b/guide/Date/timeToDate.md deleted file mode 100644 index 46380835..00000000 --- a/guide/Date/timeToDate.md +++ /dev/null @@ -1,31 +0,0 @@ -# $timeToDate - -Convert a Unix timestamp (milliseconds since January 1, 1970 UTC) into a formatted date string. This function respects the timezone configured via the `$timeZone` function. - -## Usage - -```bash -$timeToDate[Timestamp;Format (optional)] -``` - -**Parameters:** - -* **Timestamp:** The Unix timestamp in milliseconds you want to convert. -* **Format (optional):** A string defining the desired date and time format. If omitted, a default format will be applied. - -### Example: - -This example converts the current timestamp (obtained using `$timeStamp`) to a `YYYY-MM-DD` format. - - - - !!exec $timeToDate[$timeStamp;%y%-%m%-%d%] - - - 2022-03-12 - - - -::: tip Accepted Time Formats -For a comprehensive list of accepted time format specifiers, refer to [this reference](../CodeReferences/ref.time_format.md). These specifiers allow you to customize the output to display the date and time in various formats. -::: \ No newline at end of file diff --git a/guide/Date/timezone.md b/guide/Date/timezone.md deleted file mode 100644 index ab0ca61f..00000000 --- a/guide/Date/timezone.md +++ /dev/null @@ -1,42 +0,0 @@ -# $timezone - -This function sets the timezone used by subsequent date and time functions within your command. Think of it as changing the "local time" for your bot's calculations. - -**Important:** This function only affects date and time calculations *after* it's called within the command's logic. - -To find a valid timezone name, refer to the comprehensive list on [Wikipedia](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Use the values from the "TZ database name" column. - -#### Usage: `$timezone[Region/City]` - -Replace `Region/City` with the desired timezone. For example, `Europe/Zurich` or `America/Los_Angeles`. - -### Accepted Zones: -Standard Zones like Africa/Cairo [(list here)](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)\ -Or you can use `UTC+hh:mm` or `UTC-hh:mm` to specify a certain offset like `UTC+03:00`. - - -### Example:** - -This example demonstrates how `$timezone` changes the output of the `$hour` function. - - - - !!exec - UTC $hour - after Change $timezone[Europe/Zurich] - Europe/Zurich $hour - - - UTC 10 - after Change Europe/Zurich 12 - - - - -In this example: - -* First, `$hour` is called without a specified timezone, so it returns the hour in UTC (Coordinated Universal Time). -* Then, `$timezone[Europe/Zurich]` sets the timezone to Zurich. -* Finally, `$hour` is called again, now returning the hour in the Europe/Zurich timezone, which is UTC+2 (or UTC+1 during standard time). - -##### Function difficulty: diff --git a/guide/Date/upvoteTime.md b/guide/Date/upvoteTime.md deleted file mode 100644 index 27a674c0..00000000 --- a/guide/Date/upvoteTime.md +++ /dev/null @@ -1,13 +0,0 @@ -# $upvoteTime - -Returns the time when the current upvote was received. - -## Usage - -```bash -$upvoteTime -``` - -This function is only available in the **On Upvote** trigger. - -The returned value is a Unix timestamp in milliseconds. diff --git a/guide/Date/year.md b/guide/Date/year.md deleted file mode 100644 index 85423456..00000000 --- a/guide/Date/year.md +++ /dev/null @@ -1,32 +0,0 @@ -# $year - -Get the current year. - -This command returns the current year based on the configured timezone (default is UTC). - -#### Usage: - -```php -$year -``` - -**Example:** - -Here's how to use the `$year` command in a Discord message: - - - - !!exec $year - - - 2021 - - - -::: tip Timezone Information -Date functions default to the UTC timezone. You can customize the timezone used by your commands. [Learn More](./timezone.md) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Events/eventCreate.md b/guide/Events/eventCreate.md deleted file mode 100644 index 4e6e21a7..00000000 --- a/guide/Events/eventCreate.md +++ /dev/null @@ -1,70 +0,0 @@ -# $eventCreate - -Creates a scheduled event on your server. - -## Usage - -The `$eventCreate` function allows you to schedule events with various types, including voice, stage, and external events. Here's how to use it: - -```bash -$eventCreate[ - {name=Your event name} - {type=Your event type i.e. voice, stage, or external} - {start=Start Timestamp} - {end=End Timestamp} - {desc=The event description (optional)} - {channel=The event channel ID (required for voice/stage events)} - {location=Your event location (required for external events)} - {cover=Event Image URL (optional)} - {return_id=Whether to return the created event ID (yes/no, default: no)} - {reason=Creation reason for audit log (optional)}] -``` - -**Explanation of Parameters:** - -* **`name`**: The name of the event. Required. -* **`type`**: The type of event. Must be one of: `voice`, `stage`, or `external`. Required. -* **`start`**: The start time of the event, expressed as a Unix timestamp (in seconds). You can use `$timestamp` and time calculations to set this. Required. -* **`end`**: The end time of the event, expressed as a Unix timestamp (in seconds). You can use `$timestamp` and time calculations to set this. Required. -* **`desc`**: A description of the event. Optional. -* **`channel`**: The ID of the voice or stage channel where the event will take place. Required if `type` is `voice` or `stage`. -* **`location`**: The location of the event. Required if `type` is `external`. -* **`cover`**: A URL to an image to use as the event cover. Optional. Must be a valid URL. -* **`return_id`**: If set to `yes`, the function will return the ID of the created event. Defaults to `no` if omitted. -* **`reason`**: A reason for creating the event. This will appear in the audit log. Optional. - -## Event Types - -The `{type=...}` parameter accepts the following values: - -* `voice`: A scheduled event within a voice channel. -* `stage`: A scheduled event within a stage channel. -* `external`: An external event with a specified location. - -## Voice and Stage Events - -When creating `voice` or `stage` events, ensure you specify: - -* `{type=voice}` or `{type=stage}` -* `{channel=Voice/Stage Channel ID}` (Replace `Voice/Stage Channel ID` with the actual channel ID) - -## External Events - -When creating `external` events, ensure you specify: - -* `{type=external}` -* `{location=Your event location}` (Replace `Your event location` with the actual location) - -### Example - -This example creates a voice channel event called "Anime Watch!" in the channel "AnimeWatchVC", starting in 10 minutes and lasting for 1 day. - -```bash -$eventCreate[ - {name=Anime Watch!} - {start=$math[$timestamp+$parseTime[10m]]} - {end=$math[$timestamp+$parseTime[1d]]} - {type=voice} - {channel=AnimeWatchVC} - {desc=Today we gonna watch anime together!}] -``` \ No newline at end of file diff --git a/guide/Events/eventDelete.md b/guide/Events/eventDelete.md deleted file mode 100644 index 99099d26..00000000 --- a/guide/Events/eventDelete.md +++ /dev/null @@ -1,31 +0,0 @@ -# $eventDelete - -Deletes an existing scheduled event. - -## Usage - -```bash -$eventDelete[event ID] -``` - -## Description - -The `$eventDelete` function deletes a scheduled event using its unique event ID. This is useful for removing events that are no longer needed or were created in error. - -**Parameters:** - -* `event ID`: The unique identifier of the event you want to delete. You can usually retrieve this ID when the event is created or by querying your event list (implementation depends on how events are being scheduled/stored). - -**Important Considerations:** - -* Ensure you have the correct `event ID` before using this function. Deleting the wrong event is permanent. -* This function will only work if the bot has the necessary permissions to manage scheduled events. -* Error handling is crucial. Implement checks to ensure the `event ID` exists and that the deletion was successful. - -**Example:** - -Let's say you have an event with the ID `1234567890`. To delete this event, you would use: - -```bash -$eventDelete[1234567890] -``` \ No newline at end of file diff --git a/guide/Events/eventEdit.md b/guide/Events/eventEdit.md deleted file mode 100644 index fc1a9ffc..00000000 --- a/guide/Events/eventEdit.md +++ /dev/null @@ -1,51 +0,0 @@ -# $eventEdit - -Edit an existing scheduled event using its ID. - -## Usage - -This function allows you to modify various aspects of a scheduled event, such as its name, type, start and end times, description, and more. - -```bash -$eventEdit[ - {event=Event ID to edit} - {name=New event name} - {type=New event type (e.g., external)} - {start=New start timestamp} - {end=New end timestamp} - {desc=New description} - {channel=New voice or stage channel ID} - {location=New location} - {cover=URL of the new event image (optional)} - {reason=Reason for editing (for audit log)} -] -``` - -**Explanation of Parameters:** - -* **`event`**: The ID of the scheduled event you want to edit. This is a required parameter. -* **`name`**: The new name for the event. -* **`type`**: The new type of event. Examples include: - * `external`: An event happening outside of Discord. -* **`start`**: The new start timestamp for the event. This should be a Unix timestamp (seconds since epoch). Use a timestamp converter to find the correct value. -* **`end`**: The new end timestamp for the event. This should be a Unix timestamp. Use a timestamp converter to find the correct value. -* **`desc`**: The new description for the event. -* **`channel`**: The ID of the voice or stage channel where the event will be held (if applicable). -* **`location`**: The new location for the event. -* **`cover`**: A URL pointing to the new image you want to use as the event's cover. This is optional. -* **`reason`**: The reason for editing the event. This will be recorded in the server's audit log. - -## Important Notes: - -* You can only modify `start`, `type`, `location`, and `channel` if the event is *not* currently active (i.e., it hasn't started yet). - -## Example: - -This example demonstrates changing the name of an event with the ID `12345` to "My event new name!". - -```bash -$eventEdit[ - {event=12345} - {name=My event new name!} -] -``` \ No newline at end of file diff --git a/guide/Events/eventEnd.md b/guide/Events/eventEnd.md deleted file mode 100644 index 34929f36..00000000 --- a/guide/Events/eventEnd.md +++ /dev/null @@ -1,29 +0,0 @@ -# $eventEnd - -Ends an active event using its unique ID. - -## Description - -The `$eventEnd` function allows you to terminate a currently running event. You must provide the specific Event ID of the event you wish to stop. - -## Usage - -```php -$eventEnd[Event ID] -``` - -**Parameters:** - -* `Event ID`: The numerical ID of the event you want to end. You can typically find this ID when the event is created or through a list of active events. - -## Example - -To end an event with the ID `12345`, you would use: - -```php -$eventEnd[12345] -``` - -## Important Notes - -* Ensure that the `Event ID` you provide is correct and corresponds to an active event. Ending a non-existent or already completed event may result in an error. \ No newline at end of file diff --git a/guide/Events/eventExists.md b/guide/Events/eventExists.md deleted file mode 100644 index d62e3503..00000000 --- a/guide/Events/eventExists.md +++ /dev/null @@ -1,32 +0,0 @@ -# $eventExists - -Checks if an event with the specified ID exists. - -## Usage - -```bash -$eventExists[event id] -``` - -**Parameters:** - -* `event id`: The ID of the event you want to check. This is usually a string of characters representing a unique event created in your bot's system. - -## Example - -This example demonstrates using `$eventExists` to check for an event with an invalid ID. - - - - !!exec $eventExists[Invalid event id] - - - false - - - -**Explanation:** - -* The user enters the command `!!exec $eventExists[Invalid event id]`. -* The `$eventExists` function checks if an event exists with the ID `Invalid event id`. -* Since no event with that ID exists, the function returns `false`. \ No newline at end of file diff --git a/guide/Events/eventStart.md b/guide/Events/eventStart.md deleted file mode 100644 index 11197c69..00000000 --- a/guide/Events/eventStart.md +++ /dev/null @@ -1,31 +0,0 @@ -# $eventStart - -Starts a scheduled event using its ID. - -## Description - -This function allows you to initiate a scheduled event immediately. You'll need to provide the specific ID of the event you wish to start. - -## Usage - -```bash -$eventStart[Event ID] -``` - -## Parameters - -* **Event ID:** The unique identifier for the scheduled event you want to start. You can find this ID in your bot's settings or from other event-related functions (if available). Make sure this ID is correct, otherwise the function will fail. - -## Example - -To start a scheduled event with the ID `my_event_123`, you would use the following: - -```bash -$eventStart[my_event_123] -``` - -## Notes - -* This function will only work if the bot has the necessary permissions to manage scheduled events. -* Make sure the Event ID is valid. -* The event will run regardless of its originally scheduled time. \ No newline at end of file diff --git a/guide/Events/getEventInfo.md b/guide/Events/getEventInfo.md deleted file mode 100644 index 35d71962..00000000 --- a/guide/Events/getEventInfo.md +++ /dev/null @@ -1,49 +0,0 @@ -# $getEventInfo - -Retrieves information about a specific event within a guild (server). - -## Usage - -```bash -$getEventInfo[event id;info type] -``` - -**Parameters:** - -* **event id:** The unique ID of the event you want to retrieve information from. You can usually find this ID in the event's URL or through Discord's API. -* **info type:** Specifies the type of information you want to retrieve about the event. See the table below for valid options. - -## Available Info Types - -| Info Type | Description | Value | -| :------------ | :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | The event's unique identifier. | Event ID like `123456789123456789` | -| `name` | The name of the event. | Event name like `My Cool Event` | -| `owner` | The ID of the user who created the event. | User ID like `123456789123456789` | -| `creator` | Alias for `owner`. The ID of the user who created the event. | User ID like `123456789123456789` | -| `channel` | The ID of the voice channel where the event is hosted (only for voice events). | Channel ID like `123456789123456789` or `undefined` if the event isn't a voice event. | -| `desc` | The event's description. | Description like `This event is so cool!` | -| `start_time` | The timestamp (in milliseconds) when the event is scheduled to start. | Timestamp in milliseconds (e.g., `1678886400000`) | -| `end_time` | The timestamp (in milliseconds) when the event is scheduled to end. | Timestamp in milliseconds (e.g., `1678893600000`) | -| `status` | The current status of the event. | `active` (event is currently running) or `scheduled` (event is planned for the future) | -| `type` | The type of event. | `voice` (hosted in a voice channel) or `external` (hosted on an external platform). | -| `location` | The location of the event (only for external events). | (The output will vary depending on how the event was created) | -| `cover` | The URL of the event's cover image, if one is set. | Image URL or `undefined` if no cover image is set. | -| `users_count` | The number of users who have expressed interest in the event. | Number (e.g., `25`) | -| `url` | The direct URL to the event. | Link (e.g., `https://discord.com/events/123456789123456789/123456789123456789`) | -| `privacy` | The event's privacy setting. | `private` (only members of the guild can see the event) or `public` (anyone can see the event). | - -## Example - -``` -!!exec $getEventinfo[123456789123456789;name] -``` - - - - !!exec $getEventinfo[123456789123456789;name] - - - Event Name - - diff --git a/guide/Events/getEventUsers.md b/guide/Events/getEventUsers.md deleted file mode 100644 index 4ec6769c..00000000 --- a/guide/Events/getEventUsers.md +++ /dev/null @@ -1,31 +0,0 @@ -# $getEventUsers - -Retrieves a list of users who have expressed interest in a specific event. - -## Usage - -```bash -$getEventUsers[event id;separator (default is ', ')] -``` - -**Parameters:** - -* **`event id`**: (Required) The unique identifier of the event you want to retrieve the user list for. This is typically a numerical ID. -* **`separator`**: (Optional) The character(s) used to separate the user IDs in the output string. Defaults to `, ` (a comma followed by a space) if not specified. - -## Example - -This example demonstrates how to retrieve the users interested in an event with the ID `123456789123456789`. - - - - !!exec $getEventUsers[123456789123456789] - - - 123456789, 987654321 - - - -**Explanation:** - -In this example, the command `$getEventUsers[123456789123456789]` is executed. The bot then returns a comma-separated list of user IDs (`123456789, 987654321`) who have shown interest in the event with the ID `123456789123456789`. \ No newline at end of file diff --git a/guide/Events/guildEvents.md b/guide/Events/guildEvents.md deleted file mode 100644 index 794d6088..00000000 --- a/guide/Events/guildEvents.md +++ /dev/null @@ -1,46 +0,0 @@ -# $guildEvents - -Retrieve a list of events happening in your Discord server. - -You can specify what information you want to retrieve about the events (`info type`) and filter the events based on their status (`filter`). - -**Info Types:** - -* `id`: Returns the IDs of the events. -* `name`: Returns the names of the events. - -**Filters:** - -* `active`: Returns only currently active events. -* `scheduled`: Returns only scheduled events. - -## Usage - -```php -$guildEvents[info type;filter;separator] -``` - -**Parameters:** - -* `info type`: The type of information to retrieve (either `id` or `name`). -* `filter`: The filter to apply to the events (either `active` or `scheduled`). Leave blank for no filter. -* `separator`: (Optional) The separator to use between the event details in the output. Defaults to `, `. - -## Example - -This example retrieves the names of all active events in the server, separated by a forward slash `/`. - -``` -!!exec $guildEvents[name;active;/] -``` - -**Result:** - - - - !!exec $guildEvents[name;active;/] - - - Event 1/Event 2 - - \ No newline at end of file diff --git a/guide/Guide/1.create.md b/guide/Guide/1.create.md deleted file mode 100644 index 6c151606..00000000 --- a/guide/Guide/1.create.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -weight: 1 ---- - -# Creating Custom Commands - -Creating custom commands for your server is easier than it looks. Read through this guide, and you'll be building your own commands in no time. - -## Creating a New Command - -To create a new command, you must first login into our [dashboard](https://ccommandbot.com/dashboard). - -::: tip Dashboard Guide -On your first visit, you'll be greeted with a helpful dashboard tour. We highly recommend taking it since it will save you a lot of time figuring things out. -::: - -After logging in, select the server where you'd like to create a new command. -![](/images/guide/creating-cc/0.png) - -After you select your server, choose `Manage Your Commands` to manage your commands. You can see all your commands there. -![](/images/guide/creating-cc/1.png) - -Now you can just click the create button and you're ready to write your code! -![](/images/guide/creating-cc/2.png) - -## Templates - -Don't want to start from scratch? The dashboard provides access to a library of pre-built command templates that you can easily import and customize. diff --git a/guide/Guide/2.faq.md b/guide/Guide/2.faq.md deleted file mode 100644 index 92872a0c..00000000 --- a/guide/Guide/2.faq.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -weight: 7 ---- - -# Frequently Asked Questions - -:::details Why are there cooldowns on certain functions? -As our bot grows, we are still subject to Discord's standard rate limits. Cooldowns help us stay within these limits and **prevent the bot from being penalized**, ensuring a smooth experience for everyone. -::: - -:::details How can I disable the command cooldown message? -It is not possible to disable this message. You can instead **limit this command to only specific roles or channels**, or **set channel slowmode to 5 seconds** to avoid it. -::: - -:::details Where can I get help with CC? -We are ready to assist you with your code in our [Discord server](https://ccommandbot.com/join). Keep in mind that **we will not code for you**, we want to encourage you to learn coding yourself, since that's the best for everyone. -::: - -:::details How many variables can I create? -Currently there is **no limitation** to how many variables you can create. However, single **variable can contain up to 5120 characters**. -::: - -:::details Why is my embed content being cut off? -If you use curl method for sending embeds, the bot may cut your content if it contains a colon (`:`). To avoid this, you can either **use the `$buffer` function** or **replace all colons with `#COLON#`**. -::: diff --git a/guide/Guide/3.policy.md b/guide/Guide/3.policy.md deleted file mode 100644 index 0b17a2ee..00000000 --- a/guide/Guide/3.policy.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -hidden: true ---- - -# Privacy Policy - -**Last Updated:** July 27, 2026 - -We take your privacy seriously and are committed to protecting the information required to operate Custom Command Bot ("the Bot"). This Privacy Policy explains what information we collect, how it is used, how long it is retained, and your rights regarding that information. - -Custom Command Bot is operated by an independent developer ("we", "us", or "our"). - -## Information We Collect - -The Bot only collects information necessary to provide its functionality. - -Depending on the features you use, this may include: - -* Discord User IDs -* Discord Server (Guild) IDs -* Server names -* Channel IDs -* Role IDs -* Message IDs (when required by specific features) -* Server configuration and settings -* Custom command names and command code created by server administrators or other authorized members -* Information intentionally stored through the Bot's variable system by custom commands - -## Dashboard Authentication - -Access to the Custom Command Bot dashboard is provided through Discord OAuth. - -When you authenticate with Discord, we receive information necessary to verify your identity and determine which servers you are authorized to manage. This may include your Discord user ID, username, avatar, and the servers you are permitted to access through Discord. - -We do not receive or store your Discord password. - -## Custom Commands & Variables - -Custom Command Bot allows server administrators and other authorized members to create custom commands that may store information using the Bot's variable system. - -The information stored depends entirely on how those custom commands have been configured. For example, a custom command may choose to store usernames, user IDs, counters, inventories, game progress, moderation data, or other information required by the server. - -User-created stored data may include any information that server administrators or authorized users choose to store through custom commands. We do not routinely monitor or review the contents of user-created stored data except where necessary to maintain the Service, investigate abuse, comply with legal obligations, or protect the security of the Service. - -The Bot does not automatically determine what information is stored through custom commands. Server administrators and authorized members are responsible for the custom commands they create and the information those commands choose to store. - -We recommend that server administrators avoid storing unnecessary personal or sensitive information. - -## Message Content - -The Bot processes message content only as necessary to detect configured command triggers and execute the requested functionality. - -Message content is processed temporarily in memory during command execution and is not stored by us unless a custom command explicitly saves information using the Bot's variable system. - - -## How We Use Your Information - -We use collected information only to: - -* Provide the Bot's features and services. -* Execute custom commands. -* Store server configuration and settings. -* Store information requested by custom commands. -* Maintain the reliability, security, and integrity of the Bot. -* Detect, investigate, and prevent abuse, spam, fraud, or violations of our Terms of Service or Discord's policies. - -We do not sell or rent your personal information. - -We do not share your information with third parties except: - -* When required by law. -* When necessary to protect the security or integrity of the Bot. -* When necessary to comply with Discord's policies or legal obligations. - -We may also disclose information when we reasonably believe it is necessary to enforce our Terms of Service, protect the rights, safety, or security of the Service or others, or respond to valid legal requests. - -# Cookies and Similar Technologies - -The Custom Command Bot dashboard may use cookies and similar technologies to provide essential functionality and improve the user experience. - -Cookies may be used for purposes such as: - -* Maintaining your dashboard login session after authenticating through Discord OAuth. -* Remembering necessary preferences and settings. -* Improving the reliability and security of the dashboard. - -We do not use cookies for advertising or tracking users across third-party websites. - -You may disable cookies through your browser settings. However, disabling certain cookies may prevent parts of the dashboard from functioning correctly. - -## Data Retention - -We retain information only for as long as reasonably necessary to provide the requested service. - -* If the Bot is removed from a server, server-specific data, including custom commands, settings, and variables, is scheduled for deletion within **30 days**. -* Variables that have not been accessed or modified for more than one (1) year are eligible for automatic deletion during routine maintenance. -* Backup deletion follows the normal backup rotation schedule and may not occur immediately after the original data deletion request. - -## Data Storage - -Data is currently hosted on infrastructure provided by Contabo in Germany. If our hosting infrastructure changes in the future, this Privacy Policy will be updated accordingly. - -## Data Security - -We use reasonable technical and organizational measures to protect stored information against unauthorized access, disclosure, alteration, or destruction. - -While we take reasonable steps to protect your information, no method of electronic storage or transmission over the Internet can be guaranteed to be completely secure. - -## Your Rights - -Depending on your location and applicable law, you may have the right to: - -* Request access to information we hold about you. -* Request correction of inaccurate information. -* Request deletion of your information. -* Request information about how your data is processed. - -Server administrators may remove most stored information by deleting custom commands or variables, or by removing the Bot from their server. - -If you would like assistance with a privacy request, please contact us. - -## Children's Privacy - -The Bot is not intended for individuals who are below the minimum age requirement to use Discord in their country or region. - -## Changes to This Privacy Policy - -We may update this Privacy Policy from time to time. Any changes will be reflected by updating the "Last Updated" date above. - -Continued use of the Service after the updated Privacy Policy becomes effective is subject to the revised Privacy Policy. - -## Contact - -If you have any questions, concerns, or requests regarding this Privacy Policy, you may contact us: - -**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) - -**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/guide/Guide/4.template.md b/guide/Guide/4.template.md deleted file mode 100644 index 684941ab..00000000 --- a/guide/Guide/4.template.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -weight: 6 ---- - -# Using Templates - -Templates are pre-built commands created by our awesome community. They're designed to be easily imported and set up directly from the dashboard, no coding knowledge required. - -## Importing Templates - -To import a template, head over to [dashboard](https://ccommandbot.com/dashboard), select your server and click `Manage Your Commands`. Now click the template button and search for a command that you need. - -![](/images/guide/templates/0.png) - -If the template has multiple handlers, you should select them all for proper functionality. - -![](/images/guide/templates/1.png) - -After choosing what to import, click next to continue. Some commands may require some data to work. For example channel that you want to use. When you input everything, click next to clone the commands on your server. - -![](/images/guide/templates/2.png) - -Once everything is done, you're ready to go! After the commands are clonned, it will show you how the commands are used. To test if it works, we can try it out in Discord now. - - - - !wordle - - - - There is a word of 5 characters, can you guess it? - - - [ ] [ ] [ ] [ ] [ ] - - - - - - Guess - - - - - -## Sharing Your Templates - -Want to contribute? Post your template projects in the `#code-sharing` channel in our [support server](https://ccommandbot.com/join). The best and most useful templates may be added to the official template library to help other users. diff --git a/guide/Guide/5.comment.md b/guide/Guide/5.comment.md deleted file mode 100644 index bc4d86f8..00000000 --- a/guide/Guide/5.comment.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -weight: 3 ---- - -# Code and Comments - -Comments are lines in your code that are ignored by the interpreter. They're useful for making your code easier to understand. - -::: info Info -Comments are important to make your code readable, and are widely used across this documentation. -::: - -## Single-Line Comments - -Single-Line comments are comments just on one line. You should use this for notes, or simple explanations. - -### Example - -```php -$let[userYear;2000] - -// User's age -$let[age;$math[$year-$userYear]] // $userYear is year the user was born in - -// Send a message with age -Your age is: $age - -// TODO: Save into user variable -``` - - - - !!exec $let[userYear;2000]

- // User's age
- $let[age;$math[$year-$userYear]] // $userYear is year the user was born in

- // Send a message with age
- Your age is: $age

- // TODO: Save into user variable -
- - Your age is: 26 - -
- -## Multi-Line Comments - -Multi-Line comments can comment multiple lines at once. You can also use this to comment inside of functions. - -### Example - -```php -/* -userYear -> Year the user was born in -age -> User's age -*/ - -$let[userYear;2000] -$let[age;$math[$year /* current year - born year */ - $userYear]] - -Your age is: $age /* <- The variable */ -``` - - - - !!exec /*
- userYear -> Year the user was born in
- age -> User's age
- */

- $let[userYear;2000]
- $let[age;$math[$year /* current year - born year */ - $userYear]]
- Your age is: $age /* <- The variable */ -
- - Your age is: 26 - -
- -::: tip Dashboard Editor -In the dashboard editor, you can quickly comment out selected line(s) by pressing `Ctrl + /` -::: diff --git a/guide/Guide/6.variables.md b/guide/Guide/6.variables.md deleted file mode 100644 index 7ac3b99a..00000000 --- a/guide/Guide/6.variables.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -weight: 4 ---- - -# Using Variables - -Variables are important for storing and manipulating data within Custom Command. There are temporary and permanent variables. - -## Temporary Variables - -Temporary variables exist only during the execution of a command. They are easy to access and are ideal for storing values during data processing. These can make your code more readable. - -### Functions - -- `$let` - Creates a temporary variable and assigns a value to it -- `$get` - Retrieves the value stored in a temporary variable - -You can also access temporary variables directly by prefixing their name with a dollar sign (`$`). - -### Example - -```php -$let[uid;$randomUserID] -$let[name;$displayName[$uid]] - -User’s name: $name -``` - - - - !!exec $let[uid;$randomUserID]
- $let[name;$displayName[$uid]]

- Random User's name: $name -
- - Random User's name: Member - -
- -## Permanent Variables - -Permanent variables persist even after the command execution is complete. Permanent variables can be stored alongside a server, channel, user or message. That means that each server, channel, user or message variable can have different value if it's different server, channel, user or message. -Permanent variables are ideal for storing settings, progress, or any other data that needs to be used later. For example, you can save different value for each user using user variables. - -### Functions - -- `$initVar` - Initializes a variable with a default value if the var does not exist -- `$setServerVar` - Creates a permanent variable accessible in the whole server -- `$getServerVar` - Retrieves the value stored in the permanent variable -- `$increaseServerVar` - Increase a server variable with a certain amount -- `$setChannelVar` - Creates a permanent variable accessible in the current channel -- `$getChannelVar` - Retrieves the value stored in the permanent variable -- `$increaseChannelVar` - Increase a channel variable with a certain amount -- `$setUserVar` - Creates a permanent variable accessible for the current user -- `$getUserVar` - Retrieves the value stored in the permanent variable -- `$increaseUserVar` - Increase a user variable with a certain amount -- `$setMessageVar` - Creates a permanent variable accessible for the current message -- `$getMessageVar` - Retrieves the value stored in the permanent variable - -### Example - -```php title="Command 1" -$setUserVar[level;4] -``` - -```php title="Command 2" -Your level: $getUserVar[level] // 4 -``` - -```php title="Command 3" -$increaseUserVar[level;1] -Your new level: $getUserVar[level] // 5 -``` -::: tip Where are the variables saved? -All variables are saved in our database. If you have privacy concerns, please read our [Privacy Policy](../Legal/policy.md). -::: diff --git a/guide/Guide/7.array.md b/guide/Guide/7.array.md deleted file mode 100644 index 0e39e6a7..00000000 --- a/guide/Guide/7.array.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -weight: 5 ---- - -# Using Arrays - -Array is a list of items that you can loop through, or join with a specific separator. -Once you create an array, you can use functions to modify it or retrieve information from it. - -## Indexes - -Each element in an array has a unique index number that identifies its position. Our array starts from index 1. - -## Example - -```php -$arrayCreate[Apple Banana Kiwi; ] // List split by space - -// Retrieve items -First item: $arrayGet[1] -Last item: $arrayGet[$arrayLength] -All items: $arrayJoin[/] -``` - - - - !!exec $arrayCreate[Apple Banana Kiwi; ]

- First item: $arrayGet[1]
- Last item: $arrayGet[$arrayLength]
- All items: $arrayJoin[/] -
- - First item: Apple
- Last item: Kiwi
- All items: Apple/Banana/Kiwi -
-
diff --git a/guide/Guide/syntax.md b/guide/Guide/syntax.md deleted file mode 100644 index 65e8eb83..00000000 --- a/guide/Guide/syntax.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -weight: 2 ---- - -# Syntax - -Learning about the syntax used by this bot is necessary to understand how to write commands. - -## Syntax Overview - -The bot's code uses two types: - -1. [Text](#what-is-text) -2. [Function](#what-is-a-function) - -## What is Text - -Anything in the code that isn't a function is considered text. - -### Example - -```php -Hello $username, how are you? -``` - -- `Hello` - Text -- `$username` - Function -- `, how are you?` - Text - -```php -$interactionReply[Hello there] -``` - -- `$interactionReply` - Function -- `Hello there` - Text - -## What is a Function - -A function is a special instruction that begins with a dollar sign (`$`), for example `$username`. -All arguments are kept inside of square brackets (`[HERE]`). -Function names are case insensitive. - -::: info How to execute functions -All functions can be either executed by writing a command in the dashboard, or using the built in `!!exec` command. -::: - -### Example - -Function case insensitivity - -```php -$math[1+1] = $mAtH[1+1] = $MATH[1+1] -``` - - - - !!exec $math[1+1] = $mAtH[1+1] = $MATH[1+1] - - - 2 = 2 = 2 - - - -Function doesn't have to be closed at the same line where it was opened: - -```php -$title[Math question] -$description[What is 2^11? -Click to reveal: ||$math[2^11]||] -``` - - - - !!exec $title[Math question]
- $description[What is 2^11?
- Click to reveal: ||$math[2^11]||] -
- - - What is 2^11?
- Click to reveal: 2048 -
-
-
- -## Function Actions - -Functions performs one of these three actions: - -- **Replace with a value:** The function is replaced by a specific value. -- **Perform an action:** The function executes a task. -- **Both:** The function executes a task and then is replaced by a specific value. - -## Multiple Arguments - -Some functions require multiple arguments. Arguments can also be required or optional. - -```php -$msg[Channel ID;Message ID;Option;Additional 1;Additional 2] -``` - -- - ID of channel you want to retrieve information from. -- - ID of the message you want to retrieve information from. -- - What kind of information you want to retrieve. -- - Additional argument. Some options need these to work properly. -- - Additional argument. Some options need these to work properly. - -### Example - -Example of using `$msg` with multiple arguments - - - - !!exec Message content: $msg[$channelID;$messageID;content] - - - Message content: !!exec Message content: $msg[$channelID;$messageID;content] - - diff --git a/guide/Image/imageBorderRad.md b/guide/Image/imageBorderRad.md deleted file mode 100644 index 474e0c7b..00000000 --- a/guide/Image/imageBorderRad.md +++ /dev/null @@ -1,41 +0,0 @@ -# $imageBorderRad - -Control the border radius of a filled box created with $imageFill. This allows you to round the corners of your shapes for softer, more visually appealing designs. - -## Usage - -You can specify a single radius value to apply to all corners, or provide individual values for each corner for more precise control. - -```bash -$imageBorderRad[border radius for all corners] -``` - -```bash -$imageBorderRad[top-left corner radius; top-right corner radius; bottom-right corner radius; bottom-left corner radius] -``` - -**Explanation:** - -* **`$imageBorderRad[...]`**: This is the function call. The values inside the square brackets determine the border radius. -* **Single Value:** If you provide only one number (e.g., `50`), it will be used as the radius for all four corners. -* **Four Values:** If you provide four numbers separated by semicolons (`;`), they represent the radius of the corners in this order: top-left, top-right, bottom-right, bottom-left. - -## Example: Creating a Red Circle - -This example demonstrates how to draw a red circle in the center of a 300x300 pixel image using `$imageBorderRad` in conjunction with `$imageCreate` and `$imageFill`. - - - - !!exec $imageCreate[300;300]
$imageBorderRad[50]
$imageFill[red;100;100;100;100]
$image[$imageOutput]

-
- - - - -
- -**Breakdown of the command:** - -1. **`$imageCreate[300;300]`**: Creates a new image with a width of 300 pixels and a height of 300 pixels. -2. **`$imageBorderRad[50]`**: Sets the border radius of the shape to 50 pixels for all corners. Because we fill a square with `$imageFill` later, this large radius effectively turns it into a circle. -3. **`$imageFill[red;100;100;100;100]`**: Fills a 100x100 pixel square with the color red, starting at the coordinates (100, 100) - which centers the square. \ No newline at end of file diff --git a/guide/Image/imageCreate.md b/guide/Image/imageCreate.md deleted file mode 100644 index bd05959e..00000000 --- a/guide/Image/imageCreate.md +++ /dev/null @@ -1,38 +0,0 @@ -# $imageCreate - -Creates a new, blank image with specified dimensions. - -## Usage - -```bash -$imageCreate[width;height] -``` - -**Parameters:** - -* **width:** The width of the new image in pixels. -* **height:** The height of the new image in pixels. - -**Returns:** - -This function creates a blank image and stores it for further processing with other image manipulation functions (e.g., `$imageFill`, `$image`). You can then use `$imageOutput` to display or save the resulting image. - -## Example - -This example creates a 300x300 pixel image, fills it with the color red, and then displays the image. - -``` -!!exec $imageCreate[300;300] -$imageFill[red] -$image[$imageOutput] -``` - - - - !!exec $imageCreate[300;300]
$imageFill[red]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageCrop.md b/guide/Image/imageCrop.md deleted file mode 100644 index 36dc6495..00000000 --- a/guide/Image/imageCrop.md +++ /dev/null @@ -1,19 +0,0 @@ -# $imageCrop - -Crop a defined image from image builder - -## Usage - -```bash -$imageCrop[image name;x;y;width;height] -``` - -### Example: - - - !!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]
$imageCrop[avatar;0;0;100;100] // crop the image from position (0, 0) with size 100
$imageDraw[avatar]
$image[$imageOutput]

-
- - [image] - -
\ No newline at end of file diff --git a/guide/Image/imageDraw.md b/guide/Image/imageDraw.md deleted file mode 100644 index c48b30c1..00000000 --- a/guide/Image/imageDraw.md +++ /dev/null @@ -1,40 +0,0 @@ -# $imageDraw - -Draws a loaded image onto the current image. This allows you to composite images together. - -## Usage - -```bash -$imageDraw[image name;x;y;width;height;opacity] -``` - -**Parameters:** - -* `image name`: The name of the image you loaded using `$imageLoad` or `$imageLoadFromURL`. This name acts as a reference to the image you want to draw. -* `x`: The x-coordinate of the top-left corner where the image will be drawn. -* `y`: The y-coordinate of the top-left corner where the image will be drawn. -* `width`: The width of the image to be drawn. If different from the original image width, the image will be scaled. -* `height`: The height of the image to be drawn. If different from the original image height, the image will be scaled. -* `opacity`: (Optional) The opacity of the image, ranging from `0` (fully transparent) to `1` (fully opaque). If not specified, the image will be drawn with full opacity (`1`). - -# Position: X & Y - -For more detailed information on how X and Y coordinates work within image manipulation, please see: [Position (X & Y)](./../CodeReferences/ref.imgbuild.position.md) - -# Size: Width & Height - -For more detailed information on how Width and Height work within image manipulation (including scaling), please see: [Size (Width & Height)](./../CodeReferences/ref.imgbuild.size.md) - -### Example: - -This example creates a 300x300 image, loads the author's avatar, draws it onto the created image, and then outputs the result. - - - - !!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] // Load Avatar as "avatar"
$imageDraw[avatar;0;0;300;300] // Draw "avatar" at (0,0) with width 300 and height 300
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageDrawBack.md b/guide/Image/imageDrawBack.md deleted file mode 100644 index 63822716..00000000 --- a/guide/Image/imageDrawBack.md +++ /dev/null @@ -1,49 +0,0 @@ -# $imageDrawBack - -Draws a loaded image behind the current image. This allows you to layer images and create more complex visuals. - -## Usage - -```bash -$imageDrawBack[image name;x;y;width;height;opacity] -``` - -**Parameters:** - -* **`image name`:** The name of the image loaded using `$imageLoad` or `$imageLoadFromURL` that you want to draw in the background. -* **`x`:** The horizontal position (X-coordinate) where the top-left corner of the background image will be placed. -* **`y`:** The vertical position (Y-coordinate) where the top-left corner of the background image will be placed. -* **`width`:** The width of the background image when drawn. You can resize the image using this parameter. -* **`height`:** The height of the background image when drawn. You can resize the image using this parameter. -* **`opacity`:** (Optional) The opacity of the background image, ranging from 0 (fully transparent) to 1 (fully opaque). If omitted, the image will be drawn with full opacity. - -# Position: X & Y - -For a more detailed explanation of X and Y coordinates, refer to this resource: [X & Y Position Reference](./../CodeReferences/ref.imgbuild.position.md) - -# Size: Width & Height - -For a more detailed explanation of Width and Height, refer to this resource: [Width & Height Reference](./../CodeReferences/ref.imgbuild.size.md) - -### Example: - -This example creates an image, loads a user's avatar, fills the background with gray, adds a transparent rectangle, and then draws the avatar behind it. - -``` -!!exec $imageCreate[300;300] -$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] -$imageFill[gray] -$imageFill[transparent;100;100;100;100] -$imageDrawBack[avatar;50;50;200;200] -$image[$imageOutput] -``` - - - - !!exec $imageCreate[300;300] // Create Image Frame
$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]
$imageFill[gray]
$imageFill[transparent;100;100;100;100]
$imageDrawBack[avatar;50;50;200;200]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageFill.md b/guide/Image/imageFill.md deleted file mode 100644 index 4f362368..00000000 --- a/guide/Image/imageFill.md +++ /dev/null @@ -1,57 +0,0 @@ -# $imageFill - -Fill a portion of an image with a specified color. - -## Usage - -```bash -$imageFill[color;x;y;width;height;opacity] -``` - -| Parameter | Description | Required | -| :-------- | :---------------------------------------------------------------------------------------------------------------------------- | :------- | -| `color` | The color to fill with. Can be a hex code (e.g., `#FF0000`) or a common color name (e.g., `gray`, `black`, `red`). | Yes | -| `x` | The x-coordinate of the top-left corner of the rectangle to fill. See [Positioning](./../CodeReferences/ref.imgbuild.position.md) for more details. | No | -| `y` | The y-coordinate of the top-left corner of the rectangle to fill. See [Positioning](./../CodeReferences/ref.imgbuild.position.md) for more details. | No | -| `width` | The width of the rectangle to fill. See [Sizing](./../CodeReferences/ref.imgbuild.size.md) for more details. | No | -| `height` | The height of the rectangle to fill. See [Sizing](./../CodeReferences/ref.imgbuild.size.md) for more details. | No | -| `opacity` | The opacity of the fill color (0-1, where 0 is fully transparent and 1 is fully opaque). Defaults to 1 if omitted. | No | - -## Examples - -### Example 1: Fill the entire image with gray. - -``` -!!exec $imageCreate[300;300] -$imageFill[gray] -$image[$imageOutput] -``` - - - - !!exec $imageCreate[300;300]
$imageFill[gray]
$image[$imageOutput]

-
- - - - -
- -### Example 2: Fill a 50x50 rectangle at (100, 100) with red. - -``` -!!exec $imageCreate[300;300] -$imageFill[gray] -$imageFill[red;100;100;50;50] -$image[$imageOutput] -``` - - - - !!exec $imageCreate[300;300]
$imageFill[gray]
$imageFill[red;100;100;50;50]
$image[$imageOutput]

-
- - - - -
diff --git a/guide/Image/imageHeight.md b/guide/Image/imageHeight.md deleted file mode 100644 index 3e748f40..00000000 --- a/guide/Image/imageHeight.md +++ /dev/null @@ -1,27 +0,0 @@ -# $imageHeight - -Retrieves the height of an image stored within the bot's memory. This function allows you to dynamically access the height of images based on their assigned name. - -## Usage - -```php -$imageHeight[image name] -``` - -* `image name`: The name you assigned to the image when you loaded it (e.g., using `$loadImage`). If no name is provided, it defaults to the most recently loaded image. - -## Examples - -### Example 1: Get the height of the last loaded image - -```php -$imageHeight -``` - -This will return the height of the most recently loaded image. If no image has been loaded, it will likely return an error. - -### Example 2: Get the height of an image named "avatar" - -```php -$imageHeight[avatar] -``` \ No newline at end of file diff --git a/guide/Image/imageLineHeight.md b/guide/Image/imageLineHeight.md deleted file mode 100644 index 5f1f1011..00000000 --- a/guide/Image/imageLineHeight.md +++ /dev/null @@ -1,41 +0,0 @@ -# $imageLineHeight - -Adjust the line height used when drawing text within the image builder. The default line height is 1.5. - -## Usage - -```bash -$imageLineHeight[New Value (optional)] -``` - -**Explanation:** - -* **`$imageLineHeight`**: This is the command to get or set the image line height. -* **`[New Value (optional)]`**: This is an optional parameter. - * If you provide a numerical value here (e.g., `1.3`), the line height will be set to that value. - * If you leave it empty, the command will return the current line height. - -## Examples - -### Setting the Line Height - -To set the line height to `1.3`, use the following command: - -```bash -$imageLineHeight[1.3] -``` - -This will change the line height used for text in future image builder commands. - -### Getting the Current Line Height - -To retrieve the current line height, use the command without any parameters: - - - - !!exec $imageLineHeight - - - 1.3 - - \ No newline at end of file diff --git a/guide/Image/imageLoadEmoji.md b/guide/Image/imageLoadEmoji.md deleted file mode 100644 index f5efb6df..00000000 --- a/guide/Image/imageLoadEmoji.md +++ /dev/null @@ -1,46 +0,0 @@ -# $imageLoadEmoji - -Loads an emoji (either a standard Unicode emoji or a custom Discord emoji) for use in image drawing. This allows you to easily add emojis to your images. - -## Usage - -```bash -$imageLoadEmoji[id;Emoji] -``` - -**Parameters:** - -* `id`: A unique identifier for the loaded emoji. You'll use this ID in the `$imageDraw` function to reference the emoji. Choose something descriptive and easy to remember. -* `Emoji`: The emoji you want to load. This can be either: - * A standard Unicode emoji (e.g., `:smile:`, `:heart:`) - * A custom Discord emoji in the format `<:emoji_name:emoji_id>` (e.g., `<:custom_emoji:123456789012345678>`). You can get the custom emoji format by typing the emoji in Discord and escaping it with a backslash (`\`), like this: `\:custom_emoji:` - -## Examples - -**Example 1: Loading and drawing a standard Unicode emoji** - -This example creates a 300x300 image, loads the `:cheese:` emoji, fills a gray rectangle, and then draws the cheese emoji on top. - - - - !!exec $imageCreate[300;300]
$imageLoadEmoji[mycheese;:cheese:]
$imageBorderRad[100]
$imageFill[gray;50;50;200;200]
$imageDraw[mycheese;100;100;100;100]
$image[$imageOutput]

-
- - - - -
- -**Example 2: Loading and drawing both a standard and a custom emoji** - -This example creates a 600x600 image, loads both a custom Discord emoji (using its ID) and the `:cheese:` emoji, and draws them both. - - - - !!exec $imageCreate[600;600]
$imageLoadEmoji[seed;<:seed:1149808771888062605>]
$imageLoadEmoji[cheese;:cheese:]
$imageBorderRad[100]
$imageFill[gray;50;200;200;200]
$imageFill[gray;350;200;200;200]
$imageDraw[cheese;100;250;100;100]
$imageDraw[seed;400;250;100;100]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageLoadFromURL.md b/guide/Image/imageLoadFromURL.md deleted file mode 100644 index 8ea0f49b..00000000 --- a/guide/Image/imageLoadFromURL.md +++ /dev/null @@ -1,45 +0,0 @@ -# $imageLoadFromURL - -Loads an image from a URL and saves it with a reference name for later use in other image manipulation functions. - -## Usage - -```bash -$imageLoadFromURL[name;URL] -``` - -* **`name`**: A unique name you'll use to refer to this image in other `$image...` functions. Choose a descriptive name like "avatar" or "background". -* **`URL`**: The full URL of the image you want to load. This URL must point directly to an image file (e.g., `.png`, `.jpg`, `.gif`). - -## Example - -This example creates a 300x300 image, loads the author's avatar from their profile picture, and then draws the avatar onto the newly created image. - - - - !!exec $imageCreate[300;300] // Create Image Frame
- $imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]] // Load the author's avatar
- $imageDraw[avatar;0;0;300;300] // Draw the avatar onto the image frame
- $image[$imageOutput] // Output the resulting image

-
- - - - -
- -**Explanation:** - -1. **`$imageCreate[300;300]`**: Creates a new image with dimensions 300x300 pixels. -2. **`$imageLoadFromURL[avatar;$replaceText[$authorAvatar;webp;png]]`**: - * Loads the image from the author's avatar URL (`$authorAvatar`). - * `$replaceText[$authorAvatar;webp;png]` replaces `.webp` extensions with `.png`. This is a common workaround since not all image libraries fully support `.webp` and `.png` is generally more compatible. This ensures a compatible image format. - * Saves the loaded image with the name "avatar". -3. **`$imageDraw[avatar;0;0;300;300]`**: Draws the image named "avatar" (loaded in the previous step) onto the created image. The coordinates `0;0` specify the top-left corner of where the avatar should be placed, and `300;300` defines the width and height of the drawn image (effectively stretching or shrinking the avatar to fill the entire canvas). -4. **`$image[$imageOutput]`**: Outputs the final image. `$imageOutput` is a special variable that tells the command processor to display the generated image. - -**Key takeaways:** - -* The `$imageLoadFromURL` function doesn't directly display the image. It loads it into memory for further processing with other `$image...` functions. -* You must provide a valid URL that points directly to an image file. -* Choose meaningful names for your loaded images; this will make your code easier to read and understand. \ No newline at end of file diff --git a/guide/Image/imageOutput.md b/guide/Image/imageOutput.md deleted file mode 100644 index d5501a38..00000000 --- a/guide/Image/imageOutput.md +++ /dev/null @@ -1,53 +0,0 @@ -# $imageOutput - -This function saves the current image being drawn into a file and returns the filename. This filename can then be used within other functions like `$image` or within the `{image:...}` tag in functions like `$sendMessage`. - -**In simpler terms:** Imagine you're drawing on a canvas using other image commands. `$imageOutput` lets you save that drawing as an actual image file (like a PNG or JPG) so you can then send it or use it elsewhere. - -## Usage - -```bash -$imageOutput[type] -``` - -**Parameters:** - -* `type`: Specifies the image file format to save as. Valid options are `png` or `jpg`. - -## Examples - -These examples assume you've already used functions like `$imageCreate` and other image manipulation commands to build the image you want to save. - -**Example 1: Sending the image directly using `$image`** - -```bash -$imageCreate[...] // Create the initial image (replace [...] with actual parameters) -// ... Building the image using other $image functions ... -$image[$imageOutput[png]] // Save as PNG and send the image using $image function -``` - -**Explanation:** - -1. `$imageCreate[...]`: This line represents the code that creates the image you want to save. You'll need to replace `[...]` with the actual parameters for `$imageCreate`. -2. `// ... Building the image using other $image functions ...`: This represents the other `$image...` functions which are used to modify the image. -3. `$imageOutput[png]`: This saves the current image as a PNG file and returns the generated filename. -4. `$image[...]`: This function takes the filename returned by `$imageOutput` and uses it to send the image. - -**Example 2: Sending the image using `{image:...}` in `$sendMessage`** - -```bash -$imageCreate[...] // Create the initial image (replace [...] with actual parameters) -// ... Building the image using other $image functions ... -$sendMessage[{image:$imageOutput[jpg]}] // Save as JPG and send the image using $sendMessage function -``` - -**Explanation:** - -1. `$imageCreate[...]`: Similar to Example 1, this creates the initial image. -2. `// ... Building the image using other $image functions ...`: This represents the other `$image...` functions which are used to modify the image. -3. `$imageOutput[jpg]`: This saves the current image as a JPG file and returns the generated filename. -4. `{image:$imageOutput[jpg]}`: This is used as parameter for `$sendMessage` to specify which image to send. - -**Important Considerations:** - -* Make sure you have created an image using `$imageCreate` or similar functions **before** calling `$imageOutput`. \ No newline at end of file diff --git a/guide/Image/imagePositionBase.md b/guide/Image/imagePositionBase.md deleted file mode 100644 index 5ab12aa3..00000000 --- a/guide/Image/imagePositionBase.md +++ /dev/null @@ -1,40 +0,0 @@ -# $imagePositionBase - -Control the base position for drawing images or objects. By default, the base position is `topleft`. This allows you to easily position elements relative to the top-left, center, or bottom-right of your image. - -## Usage - -```bash -$imagePositionBase[Base] -``` - -**Parameter:** - -* `Base`: Specifies the base position. Must be one of the valid values listed below. - -### Base Values: - -The following values are accepted for the `Base` parameter: - -* `topleft`: Top-left corner -* `top`: Top-center -* `topright`: Top-right corner -* `centerleft`: Center-left -* `center`: Center -* `centerright`: Center-right -* `bottomleft`: Bottom-left corner -* `bottom`: Bottom-center -* `bottomright`: Bottom-right corner - -### Example: - -This example creates an image, sets the base position to `centerleft`, draws a white square, then sets the base position to `centerright` and draws a red square. - - - - !!exec $imageCreate[300;300]
$imagePositionBase[centerleft]
$imageFill[white;center;center;100;100]
$imagePositionBase[centerright]
$imageFill[red;center;center;100;100]
$image[$imageOutput]

-
- - - -
diff --git a/guide/Image/imageSetOpacity.md b/guide/Image/imageSetOpacity.md deleted file mode 100644 index af6efc23..00000000 --- a/guide/Image/imageSetOpacity.md +++ /dev/null @@ -1,49 +0,0 @@ -# $imageSetOpacity - -Sets the global opacity for all subsequent drawing operations performed by the image builder. This allows you to control the transparency of elements added to your image. - -## Usage - -```bash -$imageSetOpacity[opacity] -``` - -## Parameters - -* **`opacity`**: A numerical value between 0 and 100 representing the desired opacity level. - - * `0`: Fully transparent (invisible). - * `100`: Fully opaque (completely visible). - * Values between 0 and 100 create varying degrees of transparency. - -## Example - -This example sets the opacity to 50%, making subsequent drawings semi-transparent. - -```bash -$imageSetOpacity[50] -``` - -## Practical Example - -This example demonstrates how to use `$imageSetOpacity` to draw two avatars with different opacities. It fetches the author's avatar, loads it into the image builder, draws it once at full opacity, then sets the opacity to 50% and draws it again. - -```bash -!!exec $let[avatar;$replaceText[$authoravatar;.webp;.png]] -$imageCreate[300;300] -$imageLoadFromURL[avatar;$avatar] -$imageDraw[avatar;100;10;100;100] -$imageSetOpacity[50] -$imageDraw[avatar;100;190;100;100] -$image[$imageOutput] -``` - - - - !!exec ?exec $let[avatar;$replaceText[$authoravatar;.webp;.png]]
$imageCreate[300;300]
$imageLoadFromURL[avatar;$avatar]
$imageDraw[avatar;100;10;100;100]
$imageSetOpacity[50]
$imageDraw[avatar;100;190;100;100]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageStroke.md b/guide/Image/imageStroke.md deleted file mode 100644 index 1c5217f5..00000000 --- a/guide/Image/imageStroke.md +++ /dev/null @@ -1,47 +0,0 @@ -# $imageStroke - -Draws a rectangle outline (stroke) on the canvas. - -## Usage - -```bash -$imageStroke[color;x;y;width;height;opacity] -``` - -**Parameters:** - -* `color`: The color of the stroke. Can be a named color (e.g., `red`, `blue`, `green`), a hex code (e.g., `#FF0000`), or an RGB value (e.g., `rgb(255,0,0)`). -* `x`: The x-coordinate of the top-left corner of the rectangle. Use `$imagePositionBase` to control the origin. See more details below. -* `y`: The y-coordinate of the top-left corner of the rectangle. Use `$imagePositionBase` to control the origin. See more details below. -* `width`: The width of the rectangle. See more details below. -* `height`: The height of the rectangle. See more details below. -* `opacity` (Optional): The opacity of the stroke. A value between 0 (fully transparent) and 1 (fully opaque). Defaults to 1 if not provided. - -### Stroke Width - -The thickness of the stroke is controlled by the `$imageStrokeWidth` command. - -## Position (X & Y) - -The `x` and `y` parameters define the position of the rectangle's top-left corner. You can change the reference point (origin) for these coordinates using the `$imagePositionBase` command. - -[Learn more about X and Y positioning](./../CodeReferences/ref.imgbuild.position.md) - -## Size (Width & Height) - -The `width` and `height` parameters define the dimensions of the rectangle. - -[Learn more about Width and Height sizing](./../CodeReferences/ref.imgbuild.size.md) - -### Example: - -This example creates a 300x300 canvas, sets the position base to `center`, sets the stroke width to 10, and then draws a red rectangle with a width and height of 50, centered on the canvas. - - - - !!exec $imageCreate[300;300]
$imagePositionBase[center]
$imageStrokeWidth[10]
$imageStroke[red;center;center;50;50]
$image[$imageOutput]

-
- - - -
\ No newline at end of file diff --git a/guide/Image/imageStrokeWidth.md b/guide/Image/imageStrokeWidth.md deleted file mode 100644 index 81dda819..00000000 --- a/guide/Image/imageStrokeWidth.md +++ /dev/null @@ -1,34 +0,0 @@ -# $imageStrokeWidth - -Controls the thickness of the stroke line used by the `$imageStroke` function. This allows you to customize the appearance of shapes and lines drawn on your images. - -## Usage - -```bash -$imageStrokeWidth[width] -``` - -### Parameters: - -* **`width`**: The desired thickness of the stroke line, measured in pixels. The default value is `1`. A higher number results in a thicker line. - -# Understanding Position (X & Y) - -For a deeper understanding of how to position elements using X and Y coordinates, refer to this resource: [Positioning Guide](./../CodeReferences/ref.imgbuild.position.md) - -# Understanding Size (Width & Height) - -To learn more about defining the size of elements using Width and Height, please see this guide: [Size Guide](./../CodeReferences/ref.imgbuild.size.md) - -### Example: - -This example demonstrates how to create a red square with a stroke thickness of 10 pixels, centered on a 300x300 canvas. - - - - !!exec $imageCreate[300;300]
$imagePositionBase[center]
$imageStrokeWidth[10]
$imageStroke[red;center;center;50;50]
$image[$imageOutput]

-
- -
-
-
\ No newline at end of file diff --git a/guide/Image/imageTextAlign.md b/guide/Image/imageTextAlign.md deleted file mode 100644 index fb42cb4f..00000000 --- a/guide/Image/imageTextAlign.md +++ /dev/null @@ -1,32 +0,0 @@ -# $imageTextAlign - -This command sets the text alignment for subsequent text written on an image. It affects how the `pos x` and `pos y` parameters are interpreted when using commands like `$imageText`. - -In essence, `$imageTextAlign` determines the reference point for positioning your text. - -## Usage - -```php -$imageTextAlign[Alignment] -``` - -## Alignments - -The `Alignment` parameter accepts the following values: - -* **`left`**: Aligns the text to the left. `pos x` and `pos y` specify the coordinates of the **left edge** of the text. - -* **`center`**: Centers the text horizontally. `pos x` and `pos y` specify the coordinates of the **center** of the text. - -* **`right`**: Aligns the text to the right. `pos x` and `pos y` specify the coordinates of the **right edge** of the text. - -**Example:** - -Let's say you want to center the text "Hello World" at coordinates (100, 50) on your image. You would use the following commands: - -```php -$imageTextAlign[center] -$imageText[100,50,Hello World] -``` - -In this example, (100, 50) would be the center point of the "Hello World" text. \ No newline at end of file diff --git a/guide/Image/imageTextBaseline.md b/guide/Image/imageTextBaseline.md deleted file mode 100644 index 13597ff1..00000000 --- a/guide/Image/imageTextBaseline.md +++ /dev/null @@ -1,25 +0,0 @@ -# $imageTextBaseline - -This function allows you to control the vertical alignment (baseline) of text within an image. By default, the text aligns to the `bottom`. - -## Usage - -```php -$imageTextBaseline[Baseline] -``` - -Where `Baseline` is one of the supported values. - -## Baseline Values - -The following values are supported for the `Baseline` parameter: - -* `top`: Aligns the text to the top of the specified area. -* `middle`: Centers the text vertically within the specified area. -* `bottom`: Aligns the text to the bottom of the specified area (this is the default). - -## Example - -The image below demonstrates the effect of each baseline option: - -![](https://i.imgur.com/QkqAHrO.png) \ No newline at end of file diff --git a/guide/Image/imageTextColor.md b/guide/Image/imageTextColor.md deleted file mode 100644 index 5b5862b9..00000000 --- a/guide/Image/imageTextColor.md +++ /dev/null @@ -1,37 +0,0 @@ -# $imageTextColor - -Specifies the fill and stroke color of the text in your image. This command allows you to customize the text's appearance by setting its color. - -## How to Use - -The `$imageTextColor` command takes a single argument: the color you want to use for the text. - -```bash -$imageTextColor[Color name] -``` - -**Explanation:** - -* `$imageTextColor`: This is the command itself. -* `[Color name]`: Replace this with the name of a valid color. This could be: - * A standard color name (e.g., `red`, `blue`, `green`). - * A hexadecimal color code (e.g., `#FF0000` for red). - * An RGB color code (e.g., `rgb(255, 0, 0)` for red). - -**Example:** - -To set the text color to blue: - -```bash -$imageTextColor[blue] -``` - -To set the text color to a specific shade of green using a hexadecimal code: - -```bash -$imageTextColor[#008000] -``` - -**Important Considerations:** - -* Make sure the color name or code you provide is valid. Invalid values might result in unexpected behavior or default color being used. \ No newline at end of file diff --git a/guide/Image/imageTextFill.md b/guide/Image/imageTextFill.md deleted file mode 100644 index cb2f6ec2..00000000 --- a/guide/Image/imageTextFill.md +++ /dev/null @@ -1,36 +0,0 @@ -# $imageTextFill - -Add filled text to an image. - -## Usage - -```bash -$imageTextFill[Text;position x;position y;color;opacity] -``` - -**Parameters:** - -* **Text:** The text you want to write on the image. -* **position x:** The x-coordinate for the text's position. See [Position: X & Y](./../CodeReferences/ref.imgbuild.position.md) for more details. -* **position y:** The y-coordinate for the text's position. See [Position: X & Y](./../CodeReferences/ref.imgbuild.position.md) for more details. -* **color:** The color of the text fill (e.g., `#4461b3`, `red`, `rgba(255,0,0,0.5)`). -* **opacity:** *This parameter is deprecated and no longer functional*. Use a rgba color value instead to specify opacity. - -## Related Information: - -* **Position: X & Y:** Learn more about specifying the X and Y coordinates for text placement [here](./../CodeReferences/ref.imgbuild.position.md). -* **Size: Width & Height:** Learn more about specifying width and height values related to images [here](./../CodeReferences/ref.imgbuild.size.md). *Note this link may not be directly relevant to this specific function, but is included for general context*. - -### Example: - -This example creates a 300x300 image, sets the text size to 30, aligns the text to the center, and then writes "CC is Awesome" at position 150,150 with the color #4461b3. - - - - !!exec $imageCreate[300;300]
$imageTextSize[30]
$imageTextAlign[center]
$imageTextFill[CC is Awesome;150;150;#4461b3]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageTextFillColor.md b/guide/Image/imageTextFillColor.md deleted file mode 100644 index 0ebc2dd4..00000000 --- a/guide/Image/imageTextFillColor.md +++ /dev/null @@ -1,36 +0,0 @@ -# $imageTextFillColor - -Set the color used to fill text in images. - -This function allows you to control the color of the text you add to images. You can use it in conjunction with other `$image` functions like `$imageText` to create visually appealing images. - -## Syntax - -```bash -$imageTextFillColor[Color name] -``` - -**Parameters:** - -* `Color name`: The name of the color you want to use. This can be: - * A standard CSS color name (e.g., `red`, `blue`, `green`, `white`, `black`). - * A hexadecimal color code (e.g., `#FF0000` for red, `#00FF00` for green, `#0000FF` for blue). - * An RGB color code (e.g., `rgb(255, 0, 0)` for red). - -## Example - -To set the text fill color to blue: - -```bash -$imageTextFillColor[blue] -``` - -To set the text fill color to a specific shade of green using a hex code: - -```bash -$imageTextFillColor[#008000] -``` - -**Important Considerations:** - -* Make sure the `Color name` is valid. Invalid colors will result in unexpected behavior. diff --git a/guide/Image/imageTextSize.md b/guide/Image/imageTextSize.md deleted file mode 100644 index 8886456e..00000000 --- a/guide/Image/imageTextSize.md +++ /dev/null @@ -1,29 +0,0 @@ -# $imageTextSize - -Specifies the font size for text rendered in images. - -This tag allows you to control the size of text used in image manipulation functions, ensuring readability and visual appeal. - -## Usage - -```php -$imageTextSize[font size] -``` - -**Parameters:** - -* `font size`: (Required) An integer representing the desired font size. Larger numbers result in larger text. - -**Example:** - -To set the text size to 20 pixels: - -```php -$imageTextSize[20] -``` - -**Notes:** - -* The valid range for font size depends on the font being used. Experiment to find the best size for your needs. -* If this tag is not used, a default font size will be applied. -* Using excessively large font sizes can cause text to be clipped or overflow the image boundaries. Be mindful of the overall image dimensions. \ No newline at end of file diff --git a/guide/Image/imageTextStroke.md b/guide/Image/imageTextStroke.md deleted file mode 100644 index aa934dc6..00000000 --- a/guide/Image/imageTextStroke.md +++ /dev/null @@ -1,49 +0,0 @@ -# $imageTextStroke - -Add a stroke (border) to text on an image. This effect can enhance the visibility of your text, especially when placed over complex backgrounds. - -## Usage - -```bash -$imageTextStroke[Text;position x;position y;color (optional);opacity (optional)] -``` - -**Parameters:** - -* **`Text`**: The text you want to add a stroke to. -* **`position x`**: The horizontal position of the text. See details below. -* **`position y`**: The vertical position of the text. See details below. -* **`color (optional)`**: The color of the stroke (border). You can use Hex codes (e.g., `#FFFFFF` for white) or named colors (e.g., `red`). If omitted, a default color will be used. -* **`opacity (optional)`**: The opacity of the stroke, ranging from 0 (fully transparent) to 1 (fully opaque). If omitted, the stroke will be fully opaque (1). - -## Understanding Position (X & Y) - -For a deeper understanding of how to specify the X and Y coordinates for text positioning, please refer to the detailed explanation [here](./../CodeReferences/ref.imgbuild.position.md). - -## Related: Size (Width & Height) - -While not directly used in `$imageTextStroke`, understanding how to set image dimensions can be helpful when working with text. You can learn more about width and height settings [here](./../CodeReferences/ref.imgbuild.size.md). - -## Example - -This example creates an image, sets the text size and alignment, and then adds stroked text to the image. - -```discord -!!exec $imageCreate[300;300] -$imageTextSize[30] -$imageTextAlign[center] -$imageTextStroke[CC is Awesome;150;150;#4461b3] -$image[$imageOutput] -``` - -**Result:** - - - - !!exec $imageCreate[300;300]
$imageTextSize[30]
$imageTextAlign[center]
$imageTextStroke[CC is Awesome;150;150;#4461b3]
$image[$imageOutput]

-
- - - - -
\ No newline at end of file diff --git a/guide/Image/imageTextStrokeColor.md b/guide/Image/imageTextStrokeColor.md deleted file mode 100644 index 43b1bd40..00000000 --- a/guide/Image/imageTextStrokeColor.md +++ /dev/null @@ -1,35 +0,0 @@ -# $imageTextStrokeColor - -Sets the outline (stroke) color of the text in your image. - -## Description - -The `$imageTextStrokeColor` function allows you to define the color of the outline or stroke that appears around the text you're adding to an image. This can help the text stand out and improve readability, especially when the text and background colors are similar. - -## Usage - -```bash -$imageTextStrokeColor[Color name] -``` - -**Parameters:** - -* `Color name`: The name of the color you want to use for the text stroke. This can be a standard CSS color name (e.g., `red`, `blue`, `green`, `white`, `black`) or a hexadecimal color code (e.g., `#FF0000` for red, `#0000FF` for blue). - -**Example:** - -To set the text stroke color to blue, you would use: - -```bash -$imageTextStrokeColor[blue] -``` - -To set the text stroke color to a specific shade of green using a hex code, you would use: - -```bash -$imageTextStrokeColor[#00FF00] -``` - -**Tips:** - -* Experiment with different stroke colors to find the best contrast with your text and background. \ No newline at end of file diff --git a/guide/Image/imageTextWeight.md b/guide/Image/imageTextWeight.md deleted file mode 100644 index 1b883dc1..00000000 --- a/guide/Image/imageTextWeight.md +++ /dev/null @@ -1,31 +0,0 @@ -# $imageTextWeight - -Controls the font weight (thickness) and style of text rendered on your images. Use this variable to make your text bold, italic, or both! - -## Usage - -```bash -$imageTextWeight[Weight Type] -``` - -**Explanation:** - -* `$imageTextWeight` is the variable you'll use to set the font's weight and style. -* `[Weight Type]` is where you specify the desired font weight and style. See the "Types" section below for the available options. - -## Available Weight Types - -Here's a breakdown of the allowed values for `[Weight Type]`: - -* `regular`: Normal, standard font weight (not bold or italic). -* `bold`: Displays the text in a bold font. -* `italic`: Displays the text in an italic font. -* `bold italic`: Displays the text in a bold and italic font. - -**Example:** - -To make your image text appear in bold, you would use: - -```bash -$imageTextWeight[bold] -``` \ No newline at end of file diff --git a/guide/Image/imageUseFont.md b/guide/Image/imageUseFont.md deleted file mode 100644 index 25d34f4b..00000000 --- a/guide/Image/imageUseFont.md +++ /dev/null @@ -1,50 +0,0 @@ -# $imageUseFont - -Sets the font type for text rendered on images. - -## Usage - -```bash -$imageUseFont[font name] -``` - -## Available Fonts - -You can choose from the following fonts: - -* DejaVu Serif -* DejaVu Sans Mono -* DejaVu Sans -* Courier Prime -* Lato -* Montserrat -* Open Sans -* PT Mono -* Quicksand -* Raleway -* Roboto -* Roboto Mono -* Rubik -* Space Mono -* Minecraft -* Blackout -* Motorblock - -## Font Preview - -See a preview of these fonts in the image below: - -![](https://i.imgur.com/OVSrq4l.png) - -## Example - -This example creates a 300x300 image, sets the font to "Roboto", the text color to white, the text size to 30, and then writes "Hello World" at position 20x, 50y. - - - - !!exec $imageCreate[300;300]
$imageUseFont[Roboto]
$imageTextColor[white]
$imageTextSize[30]
$imageTextFill[Hello World;20;50]
$stop[{image:$imageOutput}] -
- - - -
\ No newline at end of file diff --git a/guide/Image/imageWidth.md b/guide/Image/imageWidth.md deleted file mode 100644 index 72e6075f..00000000 --- a/guide/Image/imageWidth.md +++ /dev/null @@ -1,33 +0,0 @@ -# $imageWidth - -Retrieves the width of an image. This function allows you to dynamically get the width of an image that has been previously loaded, referenced by its assigned name. - -## Usage - -```bash -$imageWidth[image name] -``` - -* **`image name`**: (Optional) The name of the image you want to retrieve the width from. If no name is provided, it defaults to the currently loaded image. - -## Examples - -### Example 1: Get the width of the current image - -This example shows how to get the width of the currently loaded image. - -```bash -$imageWidth -``` - -This will return the width (in pixels) of the image currently being processed. - -### Example 2: Get the width of a named image - -This example shows how to get the width of an image that was loaded and assigned the name "avatar". - -```bash -$imageWidth[avatar] -``` - -This will return the width (in pixels) of the image loaded with the name "avatar". Make sure an image was previously loaded and assigned the name "avatar" for this to work correctly. \ No newline at end of file diff --git a/guide/Interaction/commandName.md b/guide/Interaction/commandName.md deleted file mode 100644 index 263f37c2..00000000 --- a/guide/Interaction/commandName.md +++ /dev/null @@ -1,36 +0,0 @@ -# $commandName - -Returns the name of the slash command that triggered the current execution. - -::: tip Trigger -This function only works within the context of a [slash command](../Trigger/slash.md). -::: - -## Usage - -```bash -$commandName -``` - -## Example - -This example demonstrates how to use `$commandName` to display the name of the command that was executed. - -### Code - -```bash -$interactionReply[:game_die: $random[1;6]] -$interactionReply[Command ran: `$commandName`] -``` - -### Result - -![Result](https://cdn.discordapp.com/attachments/957286111250624552/1091079914133934120/image.png) - -The bot will roll a dice and then reply with the result and the name of the command used. For example, if the command was `/roll`, the bot might respond with: `:game_die: 4 Command ran: \`roll\`` - -## Related Functions - -* [Slash command](../Trigger/slash.md): Learn how to create and trigger slash commands. -* `$interactionReply`: Send a reply to the interaction that triggered the command. -* `$getOption`: Retrieve the value of an option provided by the user in the slash command. \ No newline at end of file diff --git a/guide/Interaction/getOption.md b/guide/Interaction/getOption.md deleted file mode 100644 index 3cef3eb4..00000000 --- a/guide/Interaction/getOption.md +++ /dev/null @@ -1,33 +0,0 @@ -# $getOption - -Retrieves the value of a user-provided option from an interaction, such as a slash command. This function allows you to access the specific input a user has provided for a command option. - -## Usage - -```bash -$getOption[Option name] -``` - -**Explanation:** - -* **`$getOption`**: The function call. -* **`[Option name]`**: The *name* of the option you want to retrieve the user's input for. This name is case-sensitive and must match the option name defined in your slash command. - -## Example - -Let's say you have a slash command with an option named "message". The following image shows an example of how a user might input a value for this option. - -![Example Slash Command Input](https://i.imgur.com/WmibgUO.png) - -In this case, the user has entered "Hello, world!" as the value for the "message" option. To retrieve this value, you would use `$getOption[message]`. - -## Output - -If you use `$getOption[message]` in the scenario above, the output would be: - -![Example Output](https://i.imgur.com/DOzUgk9.png) - -**Important Considerations:** - -* **Case Sensitivity:** The `Option name` is case-sensitive. Make sure it exactly matches the name you defined for the option in your slash command setup. -* **Interaction Type:** This function is primarily designed for use within interaction-based commands, like slash commands. \ No newline at end of file diff --git a/guide/Interaction/interactionDelete.md b/guide/Interaction/interactionDelete.md deleted file mode 100644 index 99e17b99..00000000 --- a/guide/Interaction/interactionDelete.md +++ /dev/null @@ -1,33 +0,0 @@ -# $interactionDelete - -Deletes an interaction reply previously sent using `$interactionReply`. - -#### Usage: `$interactionDelete[message ID (optional, defaults to the previous interaction reply)]` - -
- -**Explanation:** - -This function allows you to remove an interaction reply. If you don't specify a message ID, it will delete the most recent interaction reply sent within the command. - -**Parameters:** - -* `message ID` (Optional): The ID of the message you want to delete. If left blank, it defaults to deleting the last interaction reply sent by the bot in that command execution. - -**Example:** - -To delete the previous interaction reply: - -```php -$interactionDelete -``` - -To delete a specific interaction reply by its ID: - -```php -$interactionDelete[123456789012345678] -``` - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Interaction/interactionEdit.md b/guide/Interaction/interactionEdit.md deleted file mode 100644 index a4460c15..00000000 --- a/guide/Interaction/interactionEdit.md +++ /dev/null @@ -1,32 +0,0 @@ -# $interactionEdit - -Edits a previously sent interaction, typically one created using `$interactionReply`. - -#### Usage: `$interactionEdit[New Message;message id (optional, defaults to the original interaction reply)]` - -
- -::: warning Important -This function only works within interaction-based triggers (e.g., slash commands, button clicks). Do not use it in `exec` or other trigger types. -::: - -
- -::: details Example -```php -$interactionreply[Hello world!;yes] -$wait[2s] -$interactionedit[Bye World!] -``` - -This example first sends an interaction reply ("Hello world!"). After a 2-second delay, it edits that same message to "Bye World!". - -![](https://cdn.discordapp.com/attachments/914682255346118687/937862286767435796/Screenshot_20220131210759.jpg) -::: - -::: tip Note -You can send embeds using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This allows for rich message formatting including titles, descriptions, fields, and more! -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Interaction/interactionId.md b/guide/Interaction/interactionId.md deleted file mode 100644 index e25a1c2b..00000000 --- a/guide/Interaction/interactionId.md +++ /dev/null @@ -1,21 +0,0 @@ -# $interactionId - -Retrieves the unique ID of an interaction (e.g., button press, menu selection). - -#### Usage: `$interactionId` - -This function returns the unique identifier associated with a user interaction like pressing a button or selecting an option from a menu. This ID can be useful for tracking or logging specific interactions. - -::: details Example -```php -$interactionReply[$interactionId;yes] /* Returns the interaction ID */ -``` - -This example demonstrates how to use `$interactionId` within the `$interactionReply` function to respond to the interaction while using the interaction ID. - -![](https://cdn.discordapp.com/attachments/914682255346118687/937866562159935518/unknown.jpeg) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Interaction/interactionReply.md b/guide/Interaction/interactionReply.md deleted file mode 100644 index e94084c9..00000000 --- a/guide/Interaction/interactionReply.md +++ /dev/null @@ -1,39 +0,0 @@ -# $interactionReply - -Sends a reply to an interaction (buttons, menus, slash commands). - -#### Usage: `$interactionReply[message; ephemeral(yes/no); return id(yes/no)]` - -**Parameters:** - -* `message`: The content of the reply message. -* `ephemeral(yes/no)` (Optional): Determines if the message should be ephemeral (only visible to the user who triggered the interaction). Defaults to `no` if not specified. Use `yes` for an ephemeral message. -* `return id(yes/no)` (Optional): Determines if the function should return the message ID. Defaults to `no` if not specified. - -::: tip Ephemeral Messages -Ephemeral messages are only visible to the user who triggered the interaction. Use them when you want to send a private response. To make a message ephemeral, set the `ephemeral` parameter to `yes`. -::: - -::: details Example - -```php -$interactionReply[Hello World;yes] -``` - -This code sends an ephemeral message to the user who triggered the interaction, displaying "Hello World". - -![](https://cdn.discordapp.com/attachments/914682255346118687/937856596875313212/unknown.jpeg) - -::: - -::: warning Important -This function **only** works within interaction-based trigger types (like button clicks, menu selections, and slash command executions). -If you want to reply to a regular message, use the `$reply` function or the `{reply:messageId}` tag instead. -::: - -::: tip Note -You can send embedded messages using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This allows for richer message styling, images, and more. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Interaction/modal.md b/guide/Interaction/modal.md deleted file mode 100644 index ead346f5..00000000 --- a/guide/Interaction/modal.md +++ /dev/null @@ -1,131 +0,0 @@ -# $modal -Used to send a modal, it must be used inside interaction like button/menu/slash triggers -#### Usage: `$modal[Input]` - -**Input** will accept this format: - -``` -{title=The modal title} -{id=The modal id} - -{input= - {name=Input name} - {id=Input id} - {ph=Input placeholder} - {def=Input Default Value} - {required=Is input required?} - {min=Minimum length of the input} - {max=Maximum length of the input} - {type=What is the type of input?} -} - -{input= - {name=Menu name} - {type=menu} - {id=menu id} - {subtitle=Menu subtitle (description)} - - {option=Option 1} - {value=option_1_id} - - {option=Option 2} - {value=option_2_id} -} - -{input= - {name=Attachment Input} - {type=attachment} - {id=input id} - {subtitle=Attachment subtitle (description)} - {min=Min number of attachments (1-10)} - {max=Max number of attachments (1-10)} - {required=yes/no} -} - -{input= - {name=Select Menu} - {type=user or role or mention or channel} - {id=menu id} - {subtitle=Menu subtitle (description)} - {selected=ID} // Prefilled ID for user/role/channel menus - {selected_user=ID} // Prefilled user ID for mention menus - {selected_role=ID} // Prefilled role ID for mention menus -} - -{input= - {name=Radio Group Name} - {type=radio} - {id=radio id} - {subtitle=Radio subtitle (description)} - {required=yes/no} - - {option=Option 1} - {value=option_1_id} - - {option=Option 2} - {value=option_2_id} -} - -{input= - {name=Checkbox Group Name} - {type=checkbox} - {id=checkbox id} - {subtitle=Checkbox subtitle (description)} - {required=yes/no} - {min=Minimum required choices (0-10)} - {max=Maximum allowed choices (1-10)} - - {option=Option 1} - {value=option_1_id} - - {option=Option 2} - {value=option_2_id} -} - -``` - -#### Notes on input properties: - -##### **required** - -must be `yes` or `no`, the default is `yes`
- -##### **type** - -Specifies the input type for the input. - -* **`short` (Default):** A single-line text input field. -* **`long`:** A multi-line text area for longer responses. -* **`menu/user/role/mention/channel`:** A dropdown selection menu instead of a text field. -* **`attachment/attach`:** A file upload input field. -* **`radio`:** A multiple choice list where only **one** item can be selected (Min 2 options, Max 10). -* **`checkbox`:** A multiple choice list where **several** items can be checked (Min 1 option, Max 10). - -#### Max Amount of Inputs - -You can include multiple input fields, up to a maximum of 5 total (for example: 2 text inputs, 1 attachment input, and 2 radio/checkbox fields). - -### Example -#### Code -![](https://i.imgur.com/ByYr0UI.png) - -#### Output -![](https://i.imgur.com/LF7cnOK.png) - -### Example With Menu -#### Code -![](https://i.imgur.com/ClY5l4b.png) - -#### Output -![](https://i.imgur.com/chJsAth.png) - -::: tip -This can only be used inside the [modal trigger](../Trigger/modal.md) -::: - -::: tip -Read more about the menu structure in [selectMenu](../Text/Components/selectMenu.md) -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Interaction/modalAnswer.md b/guide/Interaction/modalAnswer.md deleted file mode 100644 index f316f903..00000000 --- a/guide/Interaction/modalAnswer.md +++ /dev/null @@ -1,24 +0,0 @@ -# $modalAnswer - -Retrieves the value entered by a user in a modal. This function is used to access the data submitted through a modal triggered by the [`modal` trigger](../Trigger/modal.md). - -**Usage:** `$modalAnswer[Input Value;Seperator (optional)]` - -**Parameters:** - -* `Input Value`: The unique identifier (input value) assigned to the specific input field within the `$modal` function when the modal was created. This is how you tell the function which input field's value you want to retrieve. -* `Seperator`: In case a multiple answer provided in the modal like in a menu with 2 or more selected options, you can use this field to set the separator between them, by default it is ', '. - -**Example:** - -The following image illustrates how to use `$modalAnswer` inside the `modal` trigger to retrieve the value the user entered in the modal's input field: - -![](https://i.imgur.com/SZc3371.png) - -::: tip Important -`$modalAnswer` can *only* be used within the context of the [`modal` trigger](../Trigger/modal.md). Attempting to use it elsewhere will result in an error or unexpected behavior. -::: - -**Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Interaction/modalID.md b/guide/Interaction/modalID.md deleted file mode 100644 index b1e43ba5..00000000 --- a/guide/Interaction/modalID.md +++ /dev/null @@ -1,21 +0,0 @@ -# $modalID - -This variable returns the unique ID of the modal that activated the [modal trigger](../Trigger/modal.md). - -**Usage:** `$modalID` - -::: tip Important -You can only use `$modalID` **within** the context of a [modal trigger](../Trigger/modal.md). It won't work anywhere else! -::: - -**What does it do?** - -When a user interacts with something that opens a modal (like clicking a button linked to a specific modal), `$modalID` will hold the ID of that modal. You can then use this ID to perform actions specific to the modal that was opened. - -**Example:** - -Imagine you have two modals: "Contact Form" and "Subscription Form". When the "Contact Form" modal is triggered, `$modalID` will be set to something like `"contact-form-modal"`. When the "Subscription Form" is triggered, `$modalID` will be set to `"subscription-form-modal"`. - -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Legal/policy.md b/guide/Legal/policy.md deleted file mode 100644 index 4356cf3c..00000000 --- a/guide/Legal/policy.md +++ /dev/null @@ -1,134 +0,0 @@ -# Privacy Policy - -**Last Updated:** July 27, 2026 - -We take your privacy seriously and are committed to protecting the information required to operate Custom Command Bot ("the Bot"). This Privacy Policy explains what information we collect, how it is used, how long it is retained, and your rights regarding that information. - -Custom Command Bot is operated by an independent developer ("we", "us", or "our"). - -## Information We Collect - -The Bot only collects information necessary to provide its functionality. - -Depending on the features you use, this may include: - -* Discord User IDs -* Discord Server (Guild) IDs -* Server names -* Channel IDs -* Role IDs -* Message IDs (when required by specific features) -* Server configuration and settings -* Custom command names and command code created by server administrators or other authorized members -* Information intentionally stored through the Bot's variable system by custom commands - -## Dashboard Authentication - -Access to the Custom Command Bot dashboard is provided through Discord OAuth. - -When you authenticate with Discord, we receive information necessary to verify your identity and determine which servers you are authorized to manage. This may include your Discord user ID, username, avatar, and the servers you are permitted to access through Discord. - -We do not receive or store your Discord password. - -## Custom Commands & Variables - -Custom Command Bot allows server administrators and other authorized members to create custom commands that may store information using the Bot's variable system. - -The information stored depends entirely on how those custom commands have been configured. For example, a custom command may choose to store usernames, user IDs, counters, inventories, game progress, moderation data, or other information required by the server. - -User-created stored data may include any information that server administrators or authorized users choose to store through custom commands. We do not routinely monitor or review the contents of user-created stored data except where necessary to maintain the Service, investigate abuse, comply with legal obligations, or protect the security of the Service. - -The Bot does not automatically determine what information is stored through custom commands. Server administrators and authorized members are responsible for the custom commands they create and the information those commands choose to store. - -We recommend that server administrators avoid storing unnecessary personal or sensitive information. - -## Message Content - -The Bot processes message content only as necessary to detect configured command triggers and execute the requested functionality. - -Message content is processed temporarily in memory during command execution and is not stored by us unless a custom command explicitly saves information using the Bot's variable system. - - -## How We Use Your Information - -We use collected information only to: - -* Provide the Bot's features and services. -* Execute custom commands. -* Store server configuration and settings. -* Store information requested by custom commands. -* Maintain the reliability, security, and integrity of the Bot. -* Detect, investigate, and prevent abuse, spam, fraud, or violations of our Terms of Service or Discord's policies. - -We do not sell or rent your personal information. - -We do not share your information with third parties except: - -* When required by law. -* When necessary to protect the security or integrity of the Bot. -* When necessary to comply with Discord's policies or legal obligations. - -We may also disclose information when we reasonably believe it is necessary to enforce our Terms of Service, protect the rights, safety, or security of the Service or others, or respond to valid legal requests. - -# Cookies and Similar Technologies - -The Custom Command Bot dashboard may use cookies and similar technologies to provide essential functionality and improve the user experience. - -Cookies may be used for purposes such as: - -* Maintaining your dashboard login session after authenticating through Discord OAuth. -* Remembering necessary preferences and settings. -* Improving the reliability and security of the dashboard. - -We do not use cookies for advertising or tracking users across third-party websites. - -You may disable cookies through your browser settings. However, disabling certain cookies may prevent parts of the dashboard from functioning correctly. - -## Data Retention - -We retain information only for as long as reasonably necessary to provide the requested service. - -* If the Bot is removed from a server, server-specific data, including custom commands, settings, and variables, is scheduled for deletion within **30 days**. -* Variables that have not been accessed or modified for more than one (1) year are eligible for automatic deletion during routine maintenance. -* Backup deletion follows the normal backup rotation schedule and may not occur immediately after the original data deletion request. - -## Data Storage - -Data is currently hosted on infrastructure provided by Contabo in Germany. If our hosting infrastructure changes in the future, this Privacy Policy will be updated accordingly. - -## Data Security - -We use reasonable technical and organizational measures to protect stored information against unauthorized access, disclosure, alteration, or destruction. - -While we take reasonable steps to protect your information, no method of electronic storage or transmission over the Internet can be guaranteed to be completely secure. - -## Your Rights - -Depending on your location and applicable law, you may have the right to: - -* Request access to information we hold about you. -* Request correction of inaccurate information. -* Request deletion of your information. -* Request information about how your data is processed. - -Server administrators may remove most stored information by deleting custom commands or variables, or by removing the Bot from their server. - -If you would like assistance with a privacy request, please contact us. - -## Children's Privacy - -The Bot is not intended for individuals who are below the minimum age requirement to use Discord in their country or region. - -## Changes to This Privacy Policy - -We may update this Privacy Policy from time to time. Any changes will be reflected by updating the "Last Updated" date above. - -Continued use of the Service after the updated Privacy Policy becomes effective is subject to the revised Privacy Policy. - -## Contact - -If you have any questions, concerns, or requests regarding this Privacy Policy, you may contact us: - -**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) - -**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/guide/Legal/tos.md b/guide/Legal/tos.md deleted file mode 100644 index 0c5d6283..00000000 --- a/guide/Legal/tos.md +++ /dev/null @@ -1,287 +0,0 @@ -# Terms of Service - -**Effective Date:** July 26, 2026 - -Welcome to Custom Command Bot ("the Bot", "we", "our", or "us"). These Terms of Service ("Terms") govern your use of Custom Command Bot, its website, dashboard, and related services (collectively, the "Service"). - -By using or accessing the Service, you agree to these Terms. If you do not agree with these Terms, you may not use the Service. - -Custom Command Bot is independently operated by an individual developer and is not affiliated with or endorsed by Discord Inc. - -# Definitions - -For the purposes of these Terms: - -**"Service"** means Custom Command Bot, including the Discord bot, website, dashboard, APIs, features, and any related services provided by us. - -**"Dashboard"** means the web interface used to manage Discord server configurations, create custom commands, and configure Service features. - -**"User"** means any individual who accesses or uses the Service. - -**"Server Administration"** means the Discord server owner and any users who have been granted access to manage that server through the Dashboard by the server owner or another authorized member of the Server Administration. - -**"Server Configuration"** means any custom commands, code, settings, variables, automations, permissions, and other configuration data created or managed through the Service for a specific Discord server. - -**"Custom Commands"** means user-created commands, scripts, code, templates, or automations created through the Service that define actions performed by the bot. - -**"Variables"** means data values created, stored, or modified through Custom Commands, including user variables, server variables, or other persistent data created through the Service. - -**"User Content"** means any code, text, settings, configurations, variables, or other content submitted, created, or stored by users through the Service. - -**"Discord Data"** means information accessed from Discord through the Discord API or Discord OAuth, including server IDs, user IDs, roles, channels, permissions, and other information required for the Service to function. - -**"Authorized User"** means a user who has been granted permission by the Server Administration to access or manage a server's Dashboard configuration. - -**"Third-Party Services"** means external platforms or services that the Service depends on or interacts with, including Discord. - - -# Changes to These Terms - -We may update these Terms from time to time as the Service changes or as needed for legal, security, or operational reasons. - -When changes are made, the updated Terms will be published with a new effective date. Continued use of the Service after changes become effective means you agree to the updated Terms. - - -# Using the Service - -You may use Custom Command Bot only in compliance with: - -* These Terms. -* Discord's Terms of Service. -* Discord's Developer Terms and Policies. -* Applicable laws and regulations. - -You are responsible for ensuring that your use of the Service is permitted in your location. - -You must not use the Service if your use is prohibited by applicable laws or regulations. - - -# Discord Accounts and Permissions - -The Service may require access to your Discord account or server permissions to provide functionality. - -You are responsible for: - -* Maintaining the security of your Discord account. -* Ensuring you have permission to add and configure the Bot in a server. -* Ensuring users who create custom commands have appropriate authorization. - -You must not use another person's account or permissions without authorization. - - -# Dashboard Access and Server Authorization - -Custom Command Bot provides a web dashboard that allows users to manage server-specific settings, create custom commands, and configure features for Discord servers. - -Users access the dashboard by authenticating through Discord OAuth. We use Discord's authorization system to verify the user's identity and determine which Discord servers they are permitted to manage. - -A user may access a server's dashboard section only if they: - -* Own the Discord server; or -* Have been granted sufficient permissions or authorization by the server's administration. - -By accessing a server through the dashboard, you confirm that you have the necessary authority to manage that server's Custom Command Bot configuration. - -Server administrators are responsible for managing access to their server and ensuring that only trusted users are granted permission to create, edit, or remove custom commands and configurations. - -Actions performed through the dashboard by authorized users are considered actions performed on behalf of that Discord server's administration. - -Dashboard access is determined using information and permissions provided by Discord. We may rely on Discord's authorization and permission information when determining whether a user may access a server's dashboard. - -If your Discord permissions or server access are removed, you may lose access to that server's dashboard and its configuration. Loss of access does not automatically grant you the right to request deletion, transfer, or removal of commands or configurations created for that server. - - -# Custom Commands and User Content - -Custom Command Bot allows server administrators and authorized members to create custom commands and automations. - -You are solely responsible for: - -* The commands you create. -* The code you write. -* The actions performed by your commands. -* Any information collected, processed, or stored by your commands. -* Ensuring your commands comply with applicable laws and Discord policies. - -Custom commands may perform actions such as sending messages, assigning roles, modifying server settings, or storing information through the Bot's variable system. - -We do not routinely review, audit, approve, certify, or guarantee the correctness, security, reliability, safety, or legal compliance of custom commands created by users. - -# Prohibited Uses - -You may not use the Service to: - -* Violate Discord's Terms of Service, Community Guidelines, or Developer Policies. -* Create self-bots or automate user accounts. -* Send spam, unsolicited messages, or malicious content. -* Create scams, phishing systems, or fraudulent services. -* Distribute malware, viruses, or harmful code. -* Attempt to gain unauthorized access to accounts, servers, systems, or data. -* Abuse, overload, or disrupt the Service or Discord infrastructure. -* Store or distribute illegal content. -* Store or distribute content that is hateful, threatening, excessively violent, exploitative, or otherwise unlawful. -* Use the Service to collect personal information without appropriate permission or legal basis. - -We reserve the right to determine whether use of the Service violates these Terms. - - -# Server Administrator Responsibility - -Server owners and their authorized users are responsible for: - -* Managing who has access to create or edit custom commands. -* Reviewing commands created within their server. -* Ensuring commands comply with applicable laws, Discord's Terms of Service, Community Guidelines, Developer Policies, and their own privacy obligations. -* Determining what information is collected, processed, or stored through custom commands. -* Ensuring stored data complies with applicable privacy laws. - -Custom Command Bot provides the tools used to create custom functionality but does not determine or control what information server administrators choose to collect or store through their custom commands. - -If a server administrator allows another person to create or manage commands, the server administration remains responsible for activity performed through that server. - - -# Security and Abuse Prevention - -You must not attempt to: - -* Attempt to copy, reverse engineer, decompile, bypass, interfere with, or otherwise attempt to discover the source code or underlying functionality of the Service, except where permitted by applicable law. -* Circumvent security measures. -* Exploit bugs or vulnerabilities. -* Interfere with normal operation of the Service. -* Access data belonging to other users or servers. - -If you discover a security issue, please report it instead of exploiting it. - - -# Service Availability - -We attempt to keep the Service available and reliable, but we do not guarantee that the Service will always be uninterrupted, error-free, or available. - -We may modify, suspend, or discontinue parts of the Service at any time. -We are not responsible for interruptions or failures caused by events beyond our reasonable control, including failures of Discord, hosting providers, Internet infrastructure, denial-of-service attacks, or other third-party services. - -# Data and Deletion - -Data handling is described in our Privacy Policy. - -Server administrators may remove the Bot from their server at any time. Server-specific data is handled according to the retention periods described in the Privacy Policy. - - -# Suspension and Enforcement - -We reserve the right to suspend, restrict, or terminate access to the Service, with or without prior notice, if we reasonably believe that a user or server has: - -* Violated these Terms. -* Violated Discord's Terms of Service, Community Guidelines, or Developer Policies. -* Used the Service for unlawful, harmful, deceptive, or abusive purposes. -* Threatened the security, stability, or availability of the Service or other users. -* Attempted to abuse, exploit, or circumvent the Service or its intended functionality. - -To protect the Service, Discord, and other users, we may also remove, disable, restrict, or modify individual custom commands, automations, variables, or server configurations that we reasonably believe: - -* Violate these Terms or applicable law. -* Facilitate spam, phishing, scams, malware, or other malicious activity. -* Circumvent Discord's policies or technical limitations. -* Pose a security, operational, or reputational risk to the Service. - -Where appropriate, we may disable or remove specific commands, automations, variables, or configurations without suspending the entire server if doing so is sufficient to resolve the issue. - -Where practical, we may notify the affected server administrator before or after taking action. However, we reserve the right to act immediately when necessary to protect the Service, comply with legal obligations, or comply with Discord's requirements. - -Suspension or termination may result in the loss or deletion of data associated with the affected server or account in accordance with our Privacy Policy. - -# Custom Commands and Server Ownership - -Custom commands, automations, variables, and other server configurations created through the Service are created on behalf of the Discord server for which they are created. - -Ownership and control of such server configurations belongs to the Server Administration, not to the individual user who originally created them. - -The individual user who originally created a server configuration does not retain exclusive ownership or control over that configuration after it has been created for the server. - -By creating, editing, or submitting server configurations through the Service, you acknowledge and agree that: - -* Your contributions become part of that server's configuration. -* The Server Administration may continue to use, modify, copy, transfer, or delete those configurations. -* Leaving the server or losing dashboard access does not entitle you to require deletion, transfer, or removal of those configurations. - -Custom Command Bot will not mediate disputes regarding ownership of server configurations except where required by applicable law. - - -# Intellectual Property - -The Service, including its software, design, branding, documentation, and original materials, remains the property of the Bot operator unless otherwise stated. - -Custom commands, server configurations, and related content created within a Discord server are considered part of that server's configuration and are managed by the server's administrators through the Service. - -By creating or submitting content through the Service, you grant us a non-exclusive, worldwide, royalty-free license to store, process, reproduce, and display that content solely as necessary to operate, maintain, back up, secure, and improve the Service. - -Except as provided in the "Custom Commands and Server Ownership" section, we do not claim ownership of user-created content beyond the limited rights necessary to operate the Service. - -# Payments and Premium Features - -Certain optional features of the Service may require payment. - -Premium subscriptions grant access to additional features of the Service. They do not transfer ownership of the Service or any intellectual property. - -Payments and recurring subscriptions are processed through Ko-fi or other third-party payment providers. We do not collect or store your payment card information. - -Premium benefits remain active while your subscription is active and may be suspended or removed if your subscription expires, is cancelled, refunded, or otherwise terminated. - -Subscription management, billing, cancellations, and payment methods are handled by the applicable payment provider and are subject to that provider's terms and policies. - -Unless otherwise stated, payments are non-refundable except where required by applicable law or expressly provided by us. - - -# Third-Party Services - -The Service relies on third-party platforms, including Discord. - -We are not responsible for the availability, policies, security, or actions of third-party services. - -Your use of third-party services is subject to their own terms and policies. - -The Service may rely on third-party providers for payment processing, such as Ko-fi. Your use of those services is subject to their own terms and privacy policies. - - -# Disclaimer - -The Service is provided on an "as available" basis. - -We do not guarantee that: - -* The Service will always operate without errors. -* Custom commands will always execute as expected. -* Stored data will never be lost. -* The Service will meet every user's requirements. - -You use the Service at your own risk. - - -# Limitation of Liability - -To the maximum extent permitted by applicable law, we are not responsible for indirect, incidental, special, or consequential damages resulting from your use of the Service. - -This includes, but is not limited to: - -* Loss of data. -* Loss of server configurations. -* Incorrect execution of custom commands. -* Service interruptions. -* Actions performed by custom commands created by users. -* Actions taken by server administrators or authorized users. - -# Entire Agreement - -These Terms, together with the Privacy Policy, constitute the entire agreement between you and us regarding your use of the Service. - -# Governing Law - -These Terms are governed by the laws applicable in the jurisdiction where the Service operator resides, unless otherwise required by applicable consumer protection laws. - -# Contact - -If you have questions regarding these Terms, you can contact us: - -**Email:** [contact@ccommandbot.com](mailto:contact@ccommandbot.com) - -**Support Server:** [https://ccommandbot.com/join](https://ccommandbot.com/join) diff --git a/guide/Member/authorAvatar.md b/guide/Member/authorAvatar.md deleted file mode 100644 index b93d4fe5..00000000 --- a/guide/Member/authorAvatar.md +++ /dev/null @@ -1,44 +0,0 @@ -# $authorAvatar - -Returns the avatar (profile picture) URL of the user who executed the command. - -## Usage - -```bash -$authorAvatar[serverAvatar] -``` -1. **serverAvatar** - (Optional) default value: `no`. Can be `yes` or `no`. Discord does have two types of avatars, global and per-server (custom avatar in each server). If no server avatar is set, the global avatar will be used. - -## Examples - -#### Sending avatar URL - -How is the avatar URL displayed when sent with text and without text - - - - !!exec With text: $authorAvatar - - - With text: - https://cdn.discordapp.com/embed/avatars/0.png -
- User Avatar -
- - !!exec $authorAvatar - - - User Avatar - -
- -::: tip Note -You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. -To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). -::: - -##### Related functions: `$attachment` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/authorID.md b/guide/Member/authorID.md deleted file mode 100644 index 27a40376..00000000 --- a/guide/Member/authorID.md +++ /dev/null @@ -1,29 +0,0 @@ -# $authorID - -Returns the ID of the user who executed the command. - -## Usage - -```bash -$authorID -``` - -## Example - -#### Using $authorID - -How to use $authorID - - - - !!exec My ID is $authorID - - - My ID is 123456789123456789 - - - -##### Related functions: `$mention` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/ban.md b/guide/Member/ban.md deleted file mode 100644 index 6f75f49f..00000000 --- a/guide/Member/ban.md +++ /dev/null @@ -1,51 +0,0 @@ -# $ban - -Bans a user from the server. - -## Usage - -```bash -$ban[userID;reason;messages to delete] -``` -1. **userID** - The ID of the user to ban. -2. **reason** - The reason for the ban. -3. **messages to delete** - The number of days to delete messages from this user. Maximum is 7 days, limited by Discord. - -## Examples - -#### Sucessful ban - -Successful ban with no response - - - - !!exec $ban[123456789123456789;Spamming;7] - - - -#### Unsucessful ban - -Unsuccessful ban with error message - - - - !!exec $ban[$ownerID;Just a test;0] - - - ❌ bot is missing enough permissions at line 1 - - - -::: tip Permissions -Make sure that the bot does have sufficient permission. The bot also needs to be higher in role hierarchy then the user. -::: - -::: danger Important Note -If any member who can execute the command with this function, they will be able to ban any member below the bot's highest role. -Do not place the bot's role above Admin or Head Moderator roles to avoid banning important member. -::: - -##### Related functions: `$kick` `$unban` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/blackListIDs.md b/guide/Member/blackListIDs.md deleted file mode 100644 index f9c7b2d4..00000000 --- a/guide/Member/blackListIDs.md +++ /dev/null @@ -1,33 +0,0 @@ -# $blackListIDs - -Prevent users from using a command by blacklisting their IDs. - -## Usage - -The `$blackListIDs` function allows you to restrict access to a command for a specified list of users. If a blacklisted user attempts to use the command, the function will return a custom error message. - -```bash -$blackListIDs[userID;userID;...;error message] -``` -1. **userID** - This makes user not able to run this command. You can add as many userIDs as you want, separated with semicolon (`;`). -2. **error message** - (Optional) default value: (none). If a blacklisted user attempts to run this command, this message will be sent. If empty, no message will be sent. - -## Example - -#### Blacklisted User - -How to blacklist a user from the command - - - - !!exec $blackListIDs[$authorID;You are blacklisted from using this command!]
Message -
- - You are blacklisted from using this command! - -
- -##### Related functions: `$blackListRoleIds` `$blackListChannelIDs` `$onlyForIDs` `$onlyForRoles` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/boostingSince.md b/guide/Member/boostingSince.md deleted file mode 100644 index 244b9892..00000000 --- a/guide/Member/boostingSince.md +++ /dev/null @@ -1,43 +0,0 @@ -# $boostingSince - -Returns the date a user started boosting the server. - -## Usage - -```bash -$boostingSince[userID;date/ms] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of user to return boosting date -2. **date/ms** - (Optional) default value: `date`. If date, it will return text in this format: `Day(name), Month(name) Day(number), Year(YYYY) Hours(HH):Minutes(MM) PM/AM`. If ms, timestamp in miliseconds will be returned. You can later format the timestamp using `$formatDate`. - -## Example - -#### Using $boostingSince - -Multiple ways of using function $boostingSince - - - - !!exec $boostingSince - - - Wednesday, January 1, 2025 08:30 PM - - - !!exec $boostingSince[123456789123456789;ms] - - - 1735763400000 - - - !!exec $formatDate[$boostingSince[123456789123456789;ms];MM-DD-YYYY] - - - 01-01-2025 - - - -##### Related functions: `$formatDate` `$timeToDate` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/changeNickname.md b/guide/Member/changeNickname.md deleted file mode 100644 index 2883f977..00000000 --- a/guide/Member/changeNickname.md +++ /dev/null @@ -1,39 +0,0 @@ -# $changeNickname - -Changes the nickname of a specified member in the server. - -## Usage: - -```bash -$changeNickname[userID;nickname] -``` -1. **userID** - The ID of the member whose nickname you want to change. -2. **nickname** - The new nickname you want to assign to the member. - -## Example - -#### Using $changeNickname - -Changing the nickname of the command author - - - - !!exec $changeNickname[$authorID;Steve] - - - Hello - - - -::: tip Permissions -The bot requires the "Manage Nicknames" permission to change nicknames and only change nicknames of members with roles lower than bots highest role. -::: - -::: danger Discord restiriction -Discord doesn't allow others to change owners nickname. If you will try to change nickname of an invalid member or owner, error message will be shown. -::: - -##### Related functions: `$nickname` - -##### Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/discriminator.md b/guide/Member/discriminator.md deleted file mode 100644 index b8155590..00000000 --- a/guide/Member/discriminator.md +++ /dev/null @@ -1,34 +0,0 @@ -# $discriminator - -Returns the discriminator of the user who executed the command, or a specified member. - -## Usage: - -```bash -$discriminator[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of user you want to return the discriminator from. - -## Example - -#### Using $discriminator - -Returning a discriminator from user - - - - !!exec $discriminator - - - 1234 - - - -::: warning Note -This feature is deprecated because Discord switched to usernames. This function will return 0 as of the username update. This still works on bots. -::: - -##### Related functions: `$username` `$nickname` `$userTag` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/displayName.md b/guide/Member/displayName.md deleted file mode 100644 index 3bf21926..00000000 --- a/guide/Member/displayName.md +++ /dev/null @@ -1,30 +0,0 @@ -# $displayName - -Returns the display name of a specified user. This is the name that's shown for the user in a specific server, which might be different from their global name. - -## Usage - -```bash -$displayName[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The user ID of the user you want to return display name from. - -## Example - -#### Using $displayName - -How to return display name from author - - - - !!exec $displayName - - - User - - - -##### Related functions: `$nickname` `$username` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/eventNewNickname.md b/guide/Member/eventNewNickname.md deleted file mode 100644 index c92cbfaf..00000000 --- a/guide/Member/eventNewNickname.md +++ /dev/null @@ -1,24 +0,0 @@ -# $eventNewNickname - -Returns the new nickname of a member when their nickname is updated. Works in `On Nickname Changes` trigger. - -## Usage - -```bash -$eventNewNickname -``` - -## Example - -#### Using $eventNewNickname - -Imagine you have a Nickname Change command that logs the new nickname to a channel - -```bash -$sendMessage[User $username changed their nickname from $eventOldNickname to $eventNewNickname!] -``` - -##### Related functions: `$username` `$eventOldNickname` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/eventOldNickname.md b/guide/Member/eventOldNickname.md deleted file mode 100644 index 2c18e8ac..00000000 --- a/guide/Member/eventOldNickname.md +++ /dev/null @@ -1,24 +0,0 @@ -# $eventOldNickname - -Returns the old nickname of a member when their nickname is updated. Works in `On Nickname Changes` trigger. - -## Usage - -```bash -$eventOldNickname -``` - -## Example - -#### Using $eventOldNickname - -Imagine you have a Nickname Change command that logs the new nickname to a channel - -```bash -$sendMessage[User $username changed their nickname from $eventOldNickname to $eventNewNickname!] -``` - -##### Related functions: `$username` `$eventNewNickname` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/findMember.md b/guide/Member/findMember.md deleted file mode 100644 index 2f89d6ef..00000000 --- a/guide/Member/findMember.md +++ /dev/null @@ -1,51 +0,0 @@ -# $findMember - -Searches for a user in the current server by their nickname, ID, mention, username, or username with discriminator. Returns userID of the found user. - -## Usage: - -```bash -$findMember[query;returnCurrentUser] -``` -1. **query** - Can be userID, nickname, mention, username, username#descriminator. -2. **returnCurrentUser** - (Optional) default value: `yes`. Can be either `yes` or `no`. If this is set to yes, when user is not found, it will return $authorID. If it's no, and user is not found, it will return undefined. - -## Example - -#### Successful search - -Searching for existing user - - - - !!exec $findMember[user2;no] - - - 123456789123456789 - - - -#### Unsuccessful search - -Searching for invalid user - - - - !!exec $findMember[user123;no] - - - undefined - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$userID` `$authorID` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/getUserBadges.md b/guide/Member/getUserBadges.md deleted file mode 100644 index d481eee6..00000000 --- a/guide/Member/getUserBadges.md +++ /dev/null @@ -1,34 +0,0 @@ -# $getUserBadges - -Returns the Discord badges from specified user. If none found, returns `none`. If found multiple, separated by `, `. - -## Usage - -```bash -$getUserBadges[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. Which user to return badges from. - -## Example - -#### Using $getUserBadges - -How to return badges from command author - - - - !!exec $getUserBadges - - - Active Developer - - - -::: danger Warning -Not all badges are 100% guranteed. -::: - -##### Related functions: `$userBanner` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/globalName.md b/guide/Member/globalName.md deleted file mode 100644 index 1a7efe54..00000000 --- a/guide/Member/globalName.md +++ /dev/null @@ -1,30 +0,0 @@ -# $globalName - -Returns the global name of the user - -## Usage - -```bash -$globalName[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The user ID of the user you want to return global name from. - -## Example - -#### Using $globalName - -How to return the global name from author - - - - !!exec $globalName - - - User - - - -##### Related functions: `$displayName` `$nickname` `$username` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/hasAnyPerm.md b/guide/Member/hasAnyPerm.md deleted file mode 100644 index 68010f51..00000000 --- a/guide/Member/hasAnyPerm.md +++ /dev/null @@ -1,41 +0,0 @@ -# $hasAnyPerm - -Checks if a user has one of the given permissions. Returns `true` or `false`. - -## Usage - -```bash -$hasAnyPerm[userID;permission1;permission2;...] -``` -1. **userID** - (Optional) default value: `$authorID`. If not included or left empty, $authorID will be used. -2. **permission N** - You can add as many permissions as needed. The available permissions are here: [Permissions List](../CodeReferences/ref.permissions_list.md). - -## Example - -#### Using $hasAnyPerm - -How to use $hasAnyPerm without user argument. Keep in mind that if the user does have only one of listed permissions, true will be returned. - - - - !!exec I have managechannels OR manageroles permission: $hasAnyPerm[managechannels;manageroles] - - - I have managechannels OR manageroles permission: true - - - !!exec I have managechannels permission: $hasAnyPerm[managechannels], I have manageroles permission: $hasAnyPerm[manageroles] - - - I have managechannels permission: true, I have manageroles permission: false - - - -::: tip Suggestion -To make code stop if the user doesn't have the needed permission, you can check out `$onlyIf`. For multiple actions, check `$if`. -::: - -##### Related functions: `$hasPerms` `$hasAnyRole` `$hasRole` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/hasAnyRole.md b/guide/Member/hasAnyRole.md deleted file mode 100644 index da8a6327..00000000 --- a/guide/Member/hasAnyRole.md +++ /dev/null @@ -1,41 +0,0 @@ -# $hasAnyRole - -Checks if a user has one of the given roles. Returns `true` or `false`. - -## Usage - -```bash -$hasAnyRole[userID;roleID1;roleID2;...] -``` -1. **userID** - (Optional) default value: `$authorID`. If not included or left empty, $authorID will be used. -2. **role N** - You can add as many roles as needed. - -## Example - -#### Using $hasAnyRole - -How to use $hasAnyRole without user argument. Keep in mind that if the user does have only one of listed roles, true will be returned. - - - - !!exec I have Admin OR Manager role: $hasAnyRole[admin;manager] - - - I have Admin OR Manager role: true - - - !!exec I have Admin role: $hasAnyRole[admin], I have Manager role: $hasAnyRole[manager] - - - I have Admin role: true, I have Manager role: false - - - -::: tip Suggestion -To make code stop if the user doesn't have the needed role, you can check out `$onlyIf`. For multiple actions, check `$if`. -::: - -##### Related functions: `$hasPerms` `$hasAnyPerm` `$hasRole` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/hasPerms.md b/guide/Member/hasPerms.md deleted file mode 100644 index e3e94e59..00000000 --- a/guide/Member/hasPerms.md +++ /dev/null @@ -1,35 +0,0 @@ -# $hasPerms - -Checks if user has all of the given permissions. Returns `true` or `false`. - -## Usage: - -```bash -$hasPerms[userID;perm1;perm2;...] -``` -1. **userID** - User you want to check for permissions. -2. **perm N** - You can add as many permissions as needed. The available permissions are here: [Permissions List](../CodeReferences/ref.permissions_list.md). - -## Example - -#### Using $hasPerms - -How to use $hasPerms. Keep in mind that only if the user does have all of listed permissions, true will be returned. - - - - !!exec $hasPerms[$authorID;sendmessages] - - - true - - - -::: tip Suggestion -To make code stop if the user doesn't have the needed permission, you can check out `$onlyIf`. For multiple actions, check `$if`. -::: - -##### Related functions: `$hasAnyPerm` `$hasAnyRole` `$hasRole` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/hasRoles.md b/guide/Member/hasRoles.md deleted file mode 100644 index d6786ef4..00000000 --- a/guide/Member/hasRoles.md +++ /dev/null @@ -1,35 +0,0 @@ -# $hasRoles - -Checks if user has all of the given roles. Returns `true` or `false`. - -## Usage: - -```bash -$hasRoles[userID;role1;role2;...] -``` -1. **userID** - User you want to check for roles. -2. **role N** - You can add as many roles as needed. - -## Example - -#### Using $hasRoles - -How to use $hasRoles. Keep in mind that only if the user does have all of listed roles, true will be returned. - - - - !!exec $hasRoles[$authorID;123456789123456789] - - - true - - - -::: tip Suggestion -To make code stop if the user doesn't have the needed role, you can check out `$onlyIf`. For multiple actions, check `$if`. -::: - -##### Related functions: `$hasAnyPerm` `$hasPerms` `$hasAnyRole` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/isBanned.md b/guide/Member/isBanned.md deleted file mode 100644 index 96ae0c38..00000000 --- a/guide/Member/isBanned.md +++ /dev/null @@ -1,30 +0,0 @@ -# $isBanned - -Checks if a user is banned from the guild. Returns `true` or `false`. - -## Usage - -```bash -$isBanned[userID] -``` -1. **userID** - The ID of the user to check if it's banned. - -## Example - -#### Using $isBanned - -How to use $isBanned - - - - !!exec $isBanned[123456789123456789] - - - false - - - -##### Related functions: `$kick` `$ban` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/isUserDMEnabled.md b/guide/Member/isUserDMEnabled.md deleted file mode 100644 index 8f403afa..00000000 --- a/guide/Member/isUserDMEnabled.md +++ /dev/null @@ -1,30 +0,0 @@ -# $isUserDMEnabled - -This function checks if a user has direct messages (DMs) enabled. It returns `true` if DMs are enabled, and `false` if not. - -## Usage - -```bash -$isUserDMEnabled[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of the user you want to check. - -## Example - -#### Using $isUserDMEnabled - -How to use $isUserDMEnabled - - - - !!exec $isUserDMEnabled[123456789123456789] - - - true - - - -##### Related functions: `$dm` `$sendDM` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/kick.md b/guide/Member/kick.md deleted file mode 100644 index bf19f995..00000000 --- a/guide/Member/kick.md +++ /dev/null @@ -1,51 +0,0 @@ -# $kick - -Kicks a user from the server. - -## Usage - -```bash -$kick[userID;reason] -``` -1. **userID** - The ID of the user to kick. -2. **reason** - (Optional) The reason for kick. You can see this in Audit Log. - -## Example - -#### Successful kick - -Successfull kick with no response - - - - !!exec $kick[123456789123456789;Spamming] - - - -#### Unsucessful kick - -Unsuccessful kick with error message - - - - !!exec $kick[$ownerID;Spamming] - - - ❌ bot is missing enough permissions at line 1 - - - -::: tip Bot is missing enough permissions -The most common reason is that the bot's role is lower in the role hierarchy than the member you are trying to ban. -Discord doesn't allow members and bots from kicking members with a higher or equal highest role. Ensure the bot's highest role is above the target user. -::: - -::: danger Important Note -If any member who can execute the command with this function, they will be able to kick any member below the bot's highest role. -Do not place the bot's role above Admin or Head Moderator roles to avoid kicking important member. -::: - -##### Related functions: `$ban` `$unban` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/memberSearch.md b/guide/Member/memberSearch.md deleted file mode 100644 index 58797e08..00000000 --- a/guide/Member/memberSearch.md +++ /dev/null @@ -1,64 +0,0 @@ -# $memberSearch - -Search for members with username or nickname in the server and get their information - -## Usage - -```bash -$memberSearch[username/nickname;amount to return (Default is 1);separator (Default is ,);info to return (Default is id)] -``` - -### Info To Return: -By default it is `id`, but you can pick from: - -* `id`: to return the found user id\ -* `username`: to return the found user's username\ -* `nickname`: to return the found user's nickname in the server\ -* `name`: to return the found user's display name in the server -> You can also use combination of them, like `name (id)` to be replaced with `Mido (12345678901234567)` - -> You can know more information about the user with the use of `$user` - -### Amount to Return: -It determines how many users it will return if they match the query, by default it is 1 -> When multiple user returned, they will merged together with the `separator` - -### Example (Search and member is found): - - - !!exec $memberSearch[mido.dev]

-
- - 788361834360864808

-
-
- -### Example (Search and multiple members are found): - - - !!exec $memberSearch[A;5;, ;name]

-
- - Alpha, Alight, A living legend, A story in life

-
-
- -### Example (Search but member is not found): - - - !!exec $memberSearch[bad.dev]

-
- -
-
-
- -### Example (Search and use the user id to retrieve join date): - - - !!exec $let[user_id;$memberSearch[mido.dev]]
Mido joined the server at: $memberJoinedDate[$user_id]

-
- - Mido joined the server at: Wed Mar 09 2022 22:06:21 - -
\ No newline at end of file diff --git a/guide/Member/membersWithStatus.md b/guide/Member/membersWithStatus.md deleted file mode 100644 index 66c8f8a8..00000000 --- a/guide/Member/membersWithStatus.md +++ /dev/null @@ -1,50 +0,0 @@ -# $membersWithStatus - -Returns a list of member IDs who have specified status within the server separated by comma. - -## Usage - -```bash -$membersWithStatus[Status1;Status2;...] -``` -1. **Status N** - You can add multiple statuses. Can be `online`, `idle`, `dnd` (Do Not Disturb), `offline` (Includes invisible users), `streaming` (only valid for activities), `mobile` (only valid for platforms), `desktop` (only valid for platforms), `web` (only valid for platforms) - -## Example - -#### Single status in $membersWithStatus - -How to use $membersWithStatus with one status specified - - - - !!exec $membersWithStatus[online] - - - 123456789123456789,987654321987654321 - - - -#### Multiple statuses in $membersWithStatus - -How to use $membersWithStatus with multiple statuses specified - - - - !!exec $membersWithStatus[online;idle] - - - 123456789123456789,987654321987654321,765432198765432198 - - - -::: danger Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$status` - -##### Function difficulty: -###### Tags: diff --git a/guide/Member/mention.md b/guide/Member/mention.md deleted file mode 100644 index d174133d..00000000 --- a/guide/Member/mention.md +++ /dev/null @@ -1,32 +0,0 @@ -# $mention - -Returns a mention of a user. - -## Usage - -```bash -$mention[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of user to get mentioned. - -## Example - -#### Using $mention - -How to use $mention for author or other user - - - - !!exec Me: $mention
- Other user: $mention[123456789123456789] -
- - Me: User
- Other user: Other User -
-
- -##### Related functions: `$username` `$nickname` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/moveUser.md b/guide/Member/moveUser.md deleted file mode 100644 index 69dcb32f..00000000 --- a/guide/Member/moveUser.md +++ /dev/null @@ -1,43 +0,0 @@ -# $moveUser - -Moves a user to a different voice channel, or disconnects them from their current voice channel. - -## Usage - -```bash -$moveUser[userID;channelID;reason] -``` -1. **userID** - The ID of user to be moved. -2. **channelID** - (Optional) default: disconnect user. The channel where to move the user. If none provided, the user will be disconnected. -3. **reason** - (Optional) default value: (empty). Reason for move or disconnect. You can see this in Audit Log. - -## Examples - -#### Moving user to a channel - -How to move user to another channel - - - - !!exec $moveUser[123456789123456789;123456789987654321;AFK] - - - -#### Disconnecting user from a channel - -How to diconnect user from a channel - - - - !!exec $moveUser[123456789123456789;;AFK] - - - -::: tip Permission -Make sure that the bot does have enough permission to move or disconnect members. The bot also needs to be higher in the role hierarchy. -::: - -##### Related functions: `$vcBefore` `$vcAfter` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/muteUser.md b/guide/Member/muteUser.md deleted file mode 100644 index 6ea3b391..00000000 --- a/guide/Member/muteUser.md +++ /dev/null @@ -1,43 +0,0 @@ -# $muteUser - -Mutes or unmutes a user in a voice channel. - -## Usage - -```bash -$muteUser[userID;mute;reason] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of user to mute -2. **mute** - Can be `yes` or `no`. Yes for mute, no for unmute. -3. **reason** - (Optional) default value: `Muted by CC command` if mute is yes, `UnMuted by CC command` if mute is no. Reason for mute/unmute. You can see this in Audit Log. - -## Example - -#### Muting a member - -How to mute a member with reason - - - - !!exec $muteUser[123456789123456789;yes;AFK] - - - -#### Unmuting a member - -How to unmute a member with reason - - - - !!exec $muteUser[123456789123456789;no;Not AFK] - - - -::: tip Permission -Make sure that the bot does have enough permission to mute or unmute members. The bot also needs to be higher in the role hierarchy. -::: - -##### Related functions: `$vcBefore` `$vcAfter` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/nickname.md b/guide/Member/nickname.md deleted file mode 100644 index bfac5358..00000000 --- a/guide/Member/nickname.md +++ /dev/null @@ -1,30 +0,0 @@ -# $nickname - -Returns the nickname of the user or the display name if you specified the 2nd input - -## Usage - -```bash -$nickname[User ID;Return Display name if no nickname exists (yes/no, default is no)] -``` -1. **User ID** - (Optional) default value: `$authorID`. The ID of user to return nickname from. - -## Example - -#### Using $nickname - -How to use $nickname - - - - !!exec $nickname - - - ImUser - - - -##### Related functions: `$changeNickname` `$username` `$discriminator` `$userTag` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/status.md b/guide/Member/status.md deleted file mode 100644 index b6f4f819..00000000 --- a/guide/Member/status.md +++ /dev/null @@ -1,36 +0,0 @@ -# $status - -
- -Returns the status of a user. Can be `online`, `offline`, `idle` or `dnd`. - -## Usage - -```bash -$status[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of user to return the status from. - -## Example - -#### Using $status - -How to use $status - - - - !!exec $status - - - online - - - -::: danger Important Note -This function requires the Presence Intent to be enabled. You can change that in Discord Developer Portal under your Bot settings. -::: - -##### Related functions: `$membersWithStatus` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/unban.md b/guide/Member/unban.md deleted file mode 100644 index b2928410..00000000 --- a/guide/Member/unban.md +++ /dev/null @@ -1,32 +0,0 @@ -# $unban - -Unbans a user from the server. - -## Usage - -```bash -$unban[userID/username;reason] -``` -1. **userID/username** - The ID or username of user to unban. -2. **reason** - (Optional) default value: (none). The reason for the unban. You can see this in Audit Log. - -## Example - -#### Using $unban - -How to unban user with a reason - - - - !!exec $unban[123456789123456789;Appeal successful] - - - -::: tip Permissions -Make sure that the bot does have sufficient permission. -::: - -##### Related functions: `$kick` `$ban` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/upvoteReferralUserID.md b/guide/Member/upvoteReferralUserID.md deleted file mode 100644 index 37797699..00000000 --- a/guide/Member/upvoteReferralUserID.md +++ /dev/null @@ -1,17 +0,0 @@ -# $upvoteReferralUserID - -Returns the ID of the user whose referral link was used for the current upvote. - -## Usage - -```bash -$upvoteReferralUserID -``` - -This function is only available in the **On Upvote** trigger. - -If the vote was not made using a referral link, 'unknown' value is returned. - -::: tip Note -This function will behave like `$clientID` if the upvote command is triggered by `!!emit upvote` -::: \ No newline at end of file diff --git a/guide/Member/user.md b/guide/Member/user.md deleted file mode 100644 index 74c4a4ef..00000000 --- a/guide/Member/user.md +++ /dev/null @@ -1,53 +0,0 @@ -# $user -Retrieve an information about user given his user id, like his username. - -Multiple options to retrive informations from user. - -## Usage -```bash -$user[userID;option] -``` - -#### Supported Option List -| Property | Description | -|:-----------:|-------------| -| name | username | -| id | user ID | -| tag | user Tag | -| discrim | user discriminator | -| mention | user mention | -| avatar | user avatar URL | -| ms | Returns accounts creation time in miliseconds like 1735763400000 | -| isbot | user is a bot, returns true/false | -| lastmessagechannelid | Returns users last messages channel ID | -| lastmessageid | Returns users last messages ID | -| banner | return the user banner, undefined is returned if not found (user must be cached) | -| created | user account date and time of creation | -| timestamp | creation timestamp of user account | -| displayname | user display name if exists, otherwise username | -| globalname | user global name | -| clantag | user equipped clan tag if exists | -| clantagserver | Server id of the user equipped clan tag if exists | -| clantagicon | Icon URL of the user equipped clan tag if exists | - - -## Example - -#### Using $user - -How to show user account creation date - - - - !!exec $user[;created] - - - Wednesday, January 1, 2025 08:30 PM - - - - -##### Related functions: `$nickname` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userAvatar.md b/guide/Member/userAvatar.md deleted file mode 100644 index ef256a02..00000000 --- a/guide/Member/userAvatar.md +++ /dev/null @@ -1,46 +0,0 @@ -# $userAvatar - -Returns the avatar (profile picture) URL of the user who was specified. - -## Usage -```bash -$userAvatar[userID;size;dynamic;serverAvatar] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return avatar URL from. -2. **size** - (Optional) default value: `2048`. The size of user avatar to return in pixels. -3. **dynamic** - (Optional) default value: `yes`. Can be `yes` or `no`. If yes, animated avatar URL will be returned (if they have animated). If no, static image will be returned. -4. **serverAvatar** - (Optional) default value: `no`. Can be `yes` or `no`. Discord does have two types of avatars, global and per-server (custom avatar in each server). If no server avatar is set, the global avatar will be used. - -## Examples - -#### Sending avatar URL - -How is the avatar URL displayed when sent with text and without text - - - - !!exec With text: $userAvatar - - - With text: - https://cdn.discordapp.com/embed/avatars/0.png -
- User Avatar -
- - !!exec $userAvatar - - - User Avatar - -
- -::: tip Note -You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. -To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). -::: - -##### Related functions: `$attachment` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userBanner.md b/guide/Member/userBanner.md deleted file mode 100644 index adbae7b7..00000000 --- a/guide/Member/userBanner.md +++ /dev/null @@ -1,57 +0,0 @@ -# $userBanner - -Returns the banner URL of a user. - -## Usage - -```bash -$userBanner[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return banner URL from. If no banner is found, returns `undefined`. - -## Example - -#### Banner is available - -How is the banner URL displayed when sent with text and without text - - - - !!exec With text: $userBanner - - - With text: - https://cdn.discordapp.com/banners/287135364127129601/a_0c1e74ef99e35d10f868bd839066e022.png -
- User Banner -
- - !!exec $userBanner - - - User Banner - -
- -#### Banner is not available - -What shows when user does not have banner - - - - !!exec $userBanner - - - undefined - - - -::: tip Note -You can send the image as an attachment, so no link will be displayed. For this, you can use function `$attachment`. -To display the avatar URL as plain text, either enclose the function in backticks (`` `$authorAvatar` ``) or angle brackets (`<$authorAvatar>`). -::: - -##### Related functions: `$attachment` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userConnectedVC.md b/guide/Member/userConnectedVC.md deleted file mode 100644 index 4b556bad..00000000 --- a/guide/Member/userConnectedVC.md +++ /dev/null @@ -1,43 +0,0 @@ -# $userConnectedVC - -Returns the ID of a voice channel the user is currently connected to. - -## Usage - -```bash -$userConnectedVC[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return voice channel they are connected to. - -## Example - -#### Is connected to a voice channel - -What happens if user is connected to a voice channel - - - - !!exec $userConnectedVC - - - 123456789987654321 - - - -#### Is not connected to a voice channel - -What happens if user is not connected to a voice channel - - - - !!exec $userConnectedVC - - - undefined - - - -##### Related functions: `$vcBefore` `$vcAfter` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userExists.md b/guide/Member/userExists.md deleted file mode 100644 index 4d560cc9..00000000 --- a/guide/Member/userExists.md +++ /dev/null @@ -1,37 +0,0 @@ -# $userExists - -Checks if a user exists in the server. Returns `true` if the user exists, and `false` if not. - -## Usage - -```bash -$userExists[userID] -``` -1. **userID** - The ID of the user to check. If left empty, false will be returned. - -## Example - -#### Using $userExists - -How to use $userExists - - - - !!exec $userExists[$authorID] - - - true - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$findMember` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userID.md b/guide/Member/userID.md deleted file mode 100644 index 6a408f89..00000000 --- a/guide/Member/userID.md +++ /dev/null @@ -1,36 +0,0 @@ -# $userID - -Returns a user ID based on the given username. - -## Usage -```bash -$userID[username] -``` -1. **username** - (Optional) if not provided, $authorID will be returned. The username of a user you want to return ID of. - -## Example - -#### Using $userID - -How to use $userID - - - - !!exec $userID[user] - - - 123456789123456789 - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$authorID` `$findMember` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userPerms.md b/guide/Member/userPerms.md deleted file mode 100644 index 4a9bbd98..00000000 --- a/guide/Member/userPerms.md +++ /dev/null @@ -1,38 +0,0 @@ -# $userPerms - -Returns a list of permissions a user has across the server based on their roles. - -## Usage - -```bash -$userPerms[userID;separator] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return permissions from. -2. **separator** - (Optional) default value: `, `. The separator used for creating permission list. - -## Example - -#### Using $userPerms - -How to use $userPerms - - - - !!exec $userPerms[;/] - - - View Channel/Send Messages/Mention Everyone - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$rolePerms` `$hasPerms` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userReacted.md b/guide/Member/userReacted.md deleted file mode 100644 index 0bf95c1e..00000000 --- a/guide/Member/userReacted.md +++ /dev/null @@ -1,43 +0,0 @@ -# $userReacted - -Checks if a user has reacted to a message with the given emoji. Returns `true` or `false`. - -## Usage - -```bash -$userReacted[channelID;messageID;userID;reaction] -``` -1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to check reaction in. -2. **messageID** - (Optional) default value: `$messageID`. The ID of a message you want to check reaction on. -3. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to check from if they reacted. -4. **reaction** - The emoji you want to check if user reacted with. For custom emojis, you can use their ID, which can be found when you send it into any channel with a backslash before it. - -## Example - -#### Using $userReacted - -How to use $userReacted - - - - !!exec $wait[5s] $userReacted[;;;DogSmile] - - - - - - true - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$getMessageReactions` `$getReactionCount` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userRoleColor.md b/guide/Member/userRoleColor.md deleted file mode 100644 index 72f71a7f..00000000 --- a/guide/Member/userRoleColor.md +++ /dev/null @@ -1,37 +0,0 @@ -# $userRoleColor - -Returns the hex color code of the users highest role. - -## Usage - -```bash -$userRoleColor[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return top role color from. - -## Example - -#### Using $userRoleColor - -How to use $userRoleColor - - - - !!exec $userRoleColor - - - #d6e0ff - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$userRoles` - -##### Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userRoles.md b/guide/Member/userRoles.md deleted file mode 100644 index 547be0f6..00000000 --- a/guide/Member/userRoles.md +++ /dev/null @@ -1,39 +0,0 @@ -# $userRoles - -Returns the list of roles from a user. - -## Usage - -```php -$userRoles[userID;type;separator] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return roles from. -2. **type** - (Optional) default value: `names`. Can be `ids`, `names` or `mentions`. What format of returned roles do you want. -3. **separator** - (Optional) default value: `, `. The separator used for creating roles list. - -## Example - -#### Using $userRoles - -How to return roles from message author - - - - !!exec $userRoles[;ids;/] - - - 123456789987654321/123456789123456789 - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$hasRoles` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/userTag.md b/guide/Member/userTag.md deleted file mode 100644 index 9177961e..00000000 --- a/guide/Member/userTag.md +++ /dev/null @@ -1,34 +0,0 @@ -# $userTag - -Returns the username and tag (discriminator) of a user. - -## Usage - -```bash -$userTag[userID] -``` -1. **userID** - (Opional) default value: `$authorID`. The ID of a user you want to return username and tag from. - -## Example - -#### Using $userTag - -How to use $userTag - - - - !!exec $userTag - - - user#1234 - - - -::: warning Note -This feature is deprecated because Discord switched to usernames. This function will return only username as of the username update. This still works on bots. -::: - -##### Related functions: `$nickname` `$discriminator` `$username` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/username.md b/guide/Member/username.md deleted file mode 100644 index f491e253..00000000 --- a/guide/Member/username.md +++ /dev/null @@ -1,37 +0,0 @@ -# $username - -Returns the username of the given user. - -## Usage - -```bash -$username[userID] -``` -1. **userID** - (Optional) default value: `$authorID`. The ID of a user you want to return nickname from. - -## Example - -#### Using $nickname - -How to use $nickname - - - - !!exec $nickname - - - User - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$nickname` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/usersBanned.md b/guide/Member/usersBanned.md deleted file mode 100644 index 25acd2c1..00000000 --- a/guide/Member/usersBanned.md +++ /dev/null @@ -1,35 +0,0 @@ -# $usersBanned - -Returns a list of users banned from the current server. - -## Usage - -```bash -$usersBanned[type;separator] -``` -1. **type** - (Optional) default value: `username`. Can be `id`, `username` or `mention`. What format of returned users do you want. -2. **separator** - (Optional) default value: `, `. The separator used for creating the list of users. - -## Example - -#### Using $usersBanned - -How to use $usersBanned - - - - !!exec $usersBanned - - - user, user1, user2 - - - -::: tip Permissions -Make sure that the bot does have sufficient permission. -::: - -##### Related functions: `$ban` `$unban` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/usersInChannel.md b/guide/Member/usersInChannel.md deleted file mode 100644 index 2cb8e367..00000000 --- a/guide/Member/usersInChannel.md +++ /dev/null @@ -1,39 +0,0 @@ -# $usersInChannel - -Returns a list of users in given text or voice channel. - -## Usage - -```bash -$usersInChannel[channelID;type;separator] -``` -1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to return list of users from. -2. **type** - (Optional) default value: `username`. Can be `id`, `username`, `mention` or `count`. -3. **separator** - (Optional) default value: `, `. The separator used for creating list of users. - -## Example - -#### Using $usersInChannel - -How to use $usersInChannel - - - - !!exec $usersInChannel - - - user, user1, user2 - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$usersWithRole` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/usersTyping.md b/guide/Member/usersTyping.md deleted file mode 100644 index b09b9b0d..00000000 --- a/guide/Member/usersTyping.md +++ /dev/null @@ -1,37 +0,0 @@ -# $usersTyping - -Returns a list of users currently typing in a channel. If no users are typing, returns an empty string. - -## Usage - -```bash -$usersTyping[channelID;type;separator] -``` -1. **channelID** - (Optional) default value: `$channelID`. The ID of a channel you want to check users typing in. -2. **type** - (Optional) default value: `username`. Can be `username`, `tag` or `mention`. -3. **separator** - (Optional) default value: `, `. The separator used for creating list with users. - -## Example - -#### Using $usersTyping - -How to use $usersTyping - - - - !!exec $usersTyping - - - user, user1, user2 - - - -::: tip Tip -The bot needs the "Read Messages/View Channels" permission in the given channel to be able to see who is typing. -Rate limits may apply if this function is used excessively. -::: - -##### Related functions: `$usersInChannel` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Member/usersWithRole.md b/guide/Member/usersWithRole.md deleted file mode 100644 index 1643cf99..00000000 --- a/guide/Member/usersWithRole.md +++ /dev/null @@ -1,39 +0,0 @@ -# $usersWithRole - -Returns a list of users who have the given role. - -## Usage - -```bash -$usersWithRole[roleID;separator;type] -``` -1. **roleID** - (Optional) default value: (users without any roles). The ID of a role you want to retrive users with. -2. **separator** - (Optional) default value: `#NL#` (newline). The separator used for creating user list. -3. **type** - (Optional) default value: `tag`. Can be `tag`, `username`, `id` or `mention`. - -## Example - -#### Using $usersWithRole - -How to use $usersWithRole - - - - !!exec $usersWithRole[;, ;username] - - - user, user1, user2 - - - -::: warning Cache -This function works on the bot's cache to find members. -If the user is not cached, the function will not find them. -User will be cached after they trigger any command from this bot, but eventually they will get deleted.
-To have all members cached, you will need Tier 5 Bot. -::: - -##### Related functions: `$userRoles` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/DM.md b/guide/Message/DM.md deleted file mode 100644 index 8d2b8878..00000000 --- a/guide/Message/DM.md +++ /dev/null @@ -1,44 +0,0 @@ -# $DM - -Sends the output of your code directly to the author via Discord Direct Message (DM), or to the specified user ID's DM. - -#### Usage: `$dm[userID (optional)]` - -**Explanation:** - -* The `$DM` function is used to send the result of the preceding code to a user's DM. -* If no `userID` is provided, the message will be sent to the author of the command. -* If a `userID` is provided, the message will be sent to the user with that ID. - -
- -**Example:** - -**Command Input:** -``` -!!exec $DM[$authorID] This is a fantastic message! -``` - - - - !!exec $DM[$authorID] This is a fantastic message! - - - -**Result (Sent to the Command Author's DM):** - - - - This is a fantastic message! - - - -::: tip Related Functions -* `$sendDM`: Send the output of the console to a DM message. (More control over the DM) -* `$channelSendMessage`: Send a message to a specific channel in the server. -* `$sendMessage`: Send a message to the channel where the command was used. -::: - -**Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Message/addCmdReactions.md b/guide/Message/addCmdReactions.md deleted file mode 100644 index 74faf516..00000000 --- a/guide/Message/addCmdReactions.md +++ /dev/null @@ -1,29 +0,0 @@ -# $addCmdReactions - -Reacts to the user's message with multiple emojis. - -This function allows you to add multiple reactions to the message that triggered the command. - -#### Usage: `$addCmdReactions[emoji1;emoji2;...]` - -**Parameters:** - -* `emoji1;emoji2;...`: A semicolon-separated list of emojis to add as reactions. You can use standard emojis (e.g., 😀, 🤪) or custom emojis (if the bot has access to them). - -
- -::: tip Example - -This example adds a checkmark and a cross emoji as reactions to the user's command message. - -```php -$addCmdReactions[✅;❌] -``` - -![](https://cdn.discordapp.com/attachments/914682255346118687/940710840892551189/Screenshot_20220208174856.jpg) - -::: - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/addMessageReactions.md b/guide/Message/addMessageReactions.md deleted file mode 100644 index 2118cb37..00000000 --- a/guide/Message/addMessageReactions.md +++ /dev/null @@ -1,25 +0,0 @@ -# $addMessageReactions - -Adds reactions (emojis) to a message by its ID. - -#### Usage: `$addMessageReactions[channelId;messageId;emoji;emoji;...]` - -* **`channelId`**: The ID of the channel where the message is located. -* **`messageId`**: The ID of the message to react to. -* **`emoji`**: The emoji(s) to add as reactions. You can specify multiple emojis separated by a semicolon (`;`). These can be standard emojis or custom emojis. - -
- -::: tip Example - -This example demonstrates adding multiple reactions to a message using its ID. - -![Example Usage](https://cdn.discordapp.com/attachments/914682255346118687/940728413315027014/Screenshot_20220208185842.jpg) - -You can use the function format `{reactions}` (formatted as `curl`) to use inside functions like `$sendMessage` to easily apply reactions. - -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/addReactions.md b/guide/Message/addReactions.md deleted file mode 100644 index d7a4f29d..00000000 --- a/guide/Message/addReactions.md +++ /dev/null @@ -1,21 +0,0 @@ -# $addReactions - -Adds reactions to the bot's response. - -#### Usage: `$addReactions[emoji1;emoji2;...]` - -
- -This function allows you to add multiple reactions to the message the bot just sent. Simply list the emojis you want to use, separated by semicolons. - -::: tip Examples - -This example shows how to react to a message with specific emojis. - -![Example of $addReactions usage](https://cdn.discordapp.com/attachments/914682255346118687/940730743804551198/Screenshot_20220208190803.jpg) - -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/argsCheck.md b/guide/Message/argsCheck.md deleted file mode 100644 index 513d6357..00000000 --- a/guide/Message/argsCheck.md +++ /dev/null @@ -1,56 +0,0 @@ -# $argsCheck - -This function checks if the user has provided the correct number of arguments. It's useful for ensuring your commands receive the expected input. - -## How it Works - -`$argsCheck` verifies if the number of arguments provided by the user matches the required amount. You specify the expected number of arguments and an optional error message. If the user provides an incorrect number of arguments, the error message is sent (if provided) and the bot will stop executing further code in that command. - -## Syntax - -```bash -$argsCheck[(>//none)**: This specifies the type of comparison. Choose one of the following: - * `<`: Less than the specified `number`. - * `>`: Greater than the specified `number`. - * `none`: (optional - if omitted, this is the default). Equal to the specified `number`. Using no comparator means it expects *exactly* the specified number of arguments. -* **number**: A positive integer representing the expected number of arguments. -* **error message**: (Optional) The message to send to the user if the argument check fails. If omitted, no message is sent. - -## Examples - -**1. Checking for Exactly 2 Arguments:** - -```bash -$argsCheck[2;Please provide two arguments.] -``` - -This checks if the user provides exactly two arguments. If not, it sends the message "Please provide two arguments." - -**2. Checking for More Than 1 Argument:** - -```bash -$argsCheck[>1;You need to provide at least two arguments!] -``` - -This ensures the user provides more than one argument (e.g., 2, 3, 4, etc.). If the user provides only one or no arguments, it sends "You need to provide at least two arguments!". - -**3. Checking for Less Than 3 Arguments:** - -```bash -$argsCheck[<3;Please provide fewer than three arguments.] -``` - -This checks if the user provides less than three arguments (e.g., 0, 1, or 2 arguments). If the user provides three or more arguments, it sends "Please provide fewer than three arguments." - -**4. Checking for Exactly 1 Argument with No Error Message:** - -```bash -$argsCheck[1;] -``` - -This checks if the user provides exactly one argument. If not, the script will halt, but no error message will be sent to the user. \ No newline at end of file diff --git a/guide/Message/argsCount.md b/guide/Message/argsCount.md deleted file mode 100644 index f0bab947..00000000 --- a/guide/Message/argsCount.md +++ /dev/null @@ -1,9 +0,0 @@ -# $argsCount - -This function returns the number of arguments a user has provided to your bot's command. It's useful for validating if the correct number of arguments has been given. - -## Usage - -```bash -$argsCount -``` diff --git a/guide/Message/awaitMessage.md b/guide/Message/awaitMessage.md deleted file mode 100644 index e7cdb5ba..00000000 --- a/guide/Message/awaitMessage.md +++ /dev/null @@ -1,53 +0,0 @@ -# $awaitMessage - -The `$awaitMessage` function allows your bot to wait for a specific user's message or any message within a channel and then retrieve the message ID or content. - -## Usage - -```bash -$awaitMessage[message;userid / everyone;timeout;return message ID instead of content] -``` - -**Parameters:** - -* **`message` (Optional):** The message the bot will send to prompt the user for input. If omitted, no message will be sent. -* **`userid / everyone` (Optional, Default: `everyone`):** Specifies who the bot should listen for. - * `userid`: A specific user's ID. The bot will only respond to messages from this user. - * `everyone`: The bot will respond to any message in the channel. -* **`timeout`:** The maximum time the bot will wait for a message (e.g., `10s`). If no message is received within the timeout period, the function will return `undefined`. -* **`return message ID instead of content`:** Determines what the function returns. Accepts `yes` or `no`. - * `yes`: Returns the message ID of the user's reply. - * `no`: Returns the content of the user's reply (default). - -**Return Value:** - -Returns the user's reply (content or ID, based on the `return message ID` parameter) or `undefined` if the timeout is reached. - -### Timeout - -The `timeout` parameter specifies how long the bot will wait for a user's message. The format is `[number][s|m|h]` (e.g., `10s` for 10 seconds, `1m` for 1 minute). - -**Important:** The maximum timeout duration is limited by the bot's tier: `60 x (bot tier + 1)` seconds. For example, a tier 3 bot has a maximum timeout of `60 * (3 + 1) = 240` seconds. - -### Example: - -This example sends the message "Are you tall?" and waits for the user who executed the command to respond. It then displays the user's answer. - -```discord -!!exec Your answer is: $awaitMessage[Are you tall?;$authorID] -``` - - - - !!exec Your answer is: $awaitMessage[Are you tall?;$authorID] - - - Are you tall? - - - YES - - - Your answer is: YES - - \ No newline at end of file diff --git a/guide/Message/channelSendMessage.md b/guide/Message/channelSendMessage.md deleted file mode 100644 index b87e0ed4..00000000 --- a/guide/Message/channelSendMessage.md +++ /dev/null @@ -1,45 +0,0 @@ -# $channelSendMessage - -Sends a message to a specified channel. This function allows you to send messages to any channel your bot has access to. - -#### Usage: `$channelSendMessage[channelID;message;return ID (yes/no) (optional, default=no)]` - -| Parameter | Description | Required | Default | -|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------| -| `channelID` | The ID of the channel to send the message to. You can get this by right-clicking the channel and selecting "Copy ID" (you must have Developer Mode enabled in Discord settings). | Yes | | -| `message` | The message to send. This can be plain text, embeds, buttons, menus, or any other valid Discord message content. | Yes | | -| `return ID` | `yes` or `no`. If `yes`, the ID of the sent message will be returned. Defaults to `no`. This is useful if you need to edit or delete the message later. | No | `no` | - -
- - - !!exec $channelSendMessage[879431439299543040;This is a fantastic message!;no] - - - This is a fantastic message! - - - -#### Examples - -Here are some examples of how to use the `$channelSendMessage` function: - -### Send an Embed - -![](https://i.imgur.com/YObkPAZ.png) - -### Send a Button - -![](https://i.imgur.com/bDJ5p3a.png) - -### Send a Menu - -![](https://i.imgur.com/ApX37tb.png) - -You can send more complex messages with features like footers and fields by using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This format allows for more detailed control over your messages. - -::: tip Related Functions -* `$sendMessage`: Sends a message to the channel where the command was used. -::: - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Message/clearReaction.md b/guide/Message/clearReaction.md deleted file mode 100644 index 692f9600..00000000 --- a/guide/Message/clearReaction.md +++ /dev/null @@ -1,25 +0,0 @@ -# $clearReaction - -Removes a specific reaction from a message for a given user. - -#### Usage: `$clearReaction[channelId;messageId;userId;emoji]` - -**Parameters:** - -* `channelId`: The ID of the channel where the message is located. -* `messageId`: The ID of the message to remove the reaction from. -* `userId`: The ID of the user whose reaction should be removed. -* `emoji`: The emoji to remove (can be the emoji itself or the emoji ID for custom emojis). - -
- -::: tip Example - -This example shows how to remove a specific user's reaction from a message. - -![](https://cdn.discordapp.com/attachments/914682255346118687/940733866371612712/Screenshot_20220208191957.jpg) -::: - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/clearReactions.md b/guide/Message/clearReactions.md deleted file mode 100644 index ae1a4003..00000000 --- a/guide/Message/clearReactions.md +++ /dev/null @@ -1,34 +0,0 @@ -# $clearReactions - -This function allows you to clear reactions from a specific message. You can either clear all reactions or only those associated with a particular emoji. - -#### Usage: `$clearReactions[channelId;messageId;all/emoji]` - -**Arguments:** - -* `channelId`: The ID of the channel where the message is located. -* `messageId`: The ID of the message to clear reactions from. -* `all/emoji`: Specify either `all` to clear all reactions from the message, or provide the emoji itself to clear only reactions of that specific emoji. - -**Example:** - -Clearing all reactions from a message: - -```php -$clearReactions[8372387429384729;9483749283749283;all] -``` - -Clearing only the 👍 reactions from a message: - -```php -$clearReactions[8372387429384729;9483749283749283;👍] -``` - -::: tip Visual Example - -![](https://cdn.discordapp.com/attachments/914682255346118687/940735320889098260/Screenshot_20220208192612.jpg) -::: - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/createWebhook.md b/guide/Message/createWebhook.md deleted file mode 100644 index c815aa5e..00000000 --- a/guide/Message/createWebhook.md +++ /dev/null @@ -1,38 +0,0 @@ -# $createWebhook - -Creates a webhook in a specified channel. - -::: tip Webhooks -Webhooks are a simple way to send automated messages to different servers, potentially with custom user profiles. -::: - -::: warning Permissions -The bot requires the `Manage Webhooks` permission in the target channel to execute this function successfully. -::: - -#### Usage: `$createWebhook[channelID;name;avatarURL;returnWebhookID&Token (yes/no);separator]` - -**Parameters:** - -* `channelID`: The ID of the channel where the webhook will be created. -* `name`: The name of the webhook. -* `avatarURL`: The URL of the avatar image for the webhook. -* `returnWebhookID&Token (yes/no)`: Specifies whether the function should return the webhook's ID and token after creation. Use `yes` to return the ID and Token, and `no` to return nothing. -* `separator`: The separator used to delimit the webhook ID and token when `returnWebhookID&Token` is set to `yes`. - -
- - - !!exec $createWebHook[$channelid;WikiHook;https://cdn.discordapp.com/guilds/723032190719623289/users/327996784012034050/avatars/7aa9a46ad68d89c4eb8da9d39bbf7ba4.webp?size=2048;yes;/] - - - 94074xx.../O_BoAW... - - - -**Example:** - -In this example, a webhook named "WikiHook" is created in the channel specified by `$channelid`. The webhook is given a specific avatar. The command then returns the webhook ID and Token, separated by `/`. - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/deleteCommand.md b/guide/Message/deleteCommand.md deleted file mode 100644 index a274ddb0..00000000 --- a/guide/Message/deleteCommand.md +++ /dev/null @@ -1,28 +0,0 @@ -# $deleteCommand -deletes the user's message that triggered the command - -## Usage - -```bash -$deleteCommand[Time Delete After (optional, i.e 30s)] -``` - -### Example (Delete User Message Immediately): -```bash -$deleteCommand - - -``` - -### Example (Delete Message After Certain Time): -```bash -$deleteCommand[1m] -``` - -::: tip Related Functions -* `$deleteMessage`: Delete any message within a server. This is more flexible as it lets you target specific messages. -::: - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/deleteIn.md b/guide/Message/deleteIn.md deleted file mode 100644 index 1fdb4fd0..00000000 --- a/guide/Message/deleteIn.md +++ /dev/null @@ -1,22 +0,0 @@ -# $deleteIn - -Deletes the bot's message after a specified duration. - -#### Usage: `$deleteIn[time]` - -**Argument:** - -* `time` - The time to wait before deleting the message. This can be expressed in seconds (`s`), minutes (`m`), hours (`h`), or days (`d`). For example, `10s`, `2m`, `1h`, `1d`. - -#### Example: - -`$deleteIn[10s]` - This will delete the bot's message 10 seconds after it's sent. - -::: tip Related Functions -* `$deleteMessage`: Deletes a specific message in the server or DMs. -* `$deletecommand`: Deletes the message that triggered the command. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/deleteMessage.md b/guide/Message/deleteMessage.md deleted file mode 100644 index c4cc74d7..00000000 --- a/guide/Message/deleteMessage.md +++ /dev/null @@ -1,22 +0,0 @@ -# $deleteMessage - -Deletes a specified message from a channel. - -#### Usage: `$deleteMessage[channelID;messageID]` - -* **`channelID`**: The ID of the channel where the message is located. -* **`messageID`**: The ID of the message to delete. - -#### Example: - -`$deleteMessage[$channelID;$messageID]` - -This example will delete the message with the ID specified in `$messageID` from the channel with the ID specified in `$channelID`. Make sure your bot has the necessary permissions to delete messages in the specified channel. - -::: tip Related Functions -`$deletecommand` - Use this function to delete the message that triggered the command. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/deleteWebhook.md b/guide/Message/deleteWebhook.md deleted file mode 100644 index fc35ab70..00000000 --- a/guide/Message/deleteWebhook.md +++ /dev/null @@ -1,13 +0,0 @@ -# $deleteWebhook - -Deletes a webhook using its ID and token. - -#### Usage: `$deleteWebhook[webhookID;webhookToken]` - -This function requires both the Webhook ID and Token to function correctly. Ensure you have both available before using this function. - -
- -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/deleteWebhookMessage.md b/guide/Message/deleteWebhookMessage.md deleted file mode 100644 index 3375dc48..00000000 --- a/guide/Message/deleteWebhookMessage.md +++ /dev/null @@ -1,32 +0,0 @@ -# Delete Webhook Message - -This function deletes a message sent by a webhook. - -## Usage - -The `$deleteWebhookMessage` function requires the Webhook ID, Token, and the ID of the message you want to delete. Optionally, you can also specify a Thread ID if the message is within a thread. - -```markdown -$deleteWebhookMessage[Webhook ID;Webhook Token;Message ID;Thread ID (optional)] -``` - -## Parameters - -* **Webhook ID:** The ID of the webhook. -* **Webhook Token:** The token of the webhook. -* **Message ID:** The ID of the message you want to delete. -* **Thread ID (Optional):** The ID of the thread the message is in. This is only needed if the message is in a thread. If the message is not in a thread, you can omit this parameter. - -## Example - -Let's say you have a webhook with the ID `123456789012345678` and the token `abcdefghijklmnopqrstuvwxyz1234567890`, and you want to delete message with ID `987654321098765432`. The message is not in a thread. You would use the following: - -```markdown -$deleteWebhookMessage[123456789012345678;abcdefghijklmnopqrstuvwxyz1234567890;987654321098765432] -``` - -If the message *is* in a thread with the ID `555555555555555555`, you would use: - -```markdown -$deleteWebhookMessage[123456789012345678;abcdefghijklmnopqrstuvwxyz1234567890;987654321098765432;555555555555555555] -``` \ No newline at end of file diff --git a/guide/Message/disableChannelMentions.md b/guide/Message/disableChannelMentions.md deleted file mode 100644 index 8cce817f..00000000 --- a/guide/Message/disableChannelMentions.md +++ /dev/null @@ -1,26 +0,0 @@ -# $disableChannelMentions - -This function prevents the bot from mentioning any channels within a message. This is useful for sanitizing output or preventing accidental channel spam. - -## Usage - -Simply include `$disableChannelMentions` in your code. It doesn't require any arguments. - -```bash -$disableChannelMentions -``` - -**Example:** - -Let's say you have a command that echoes back a user's input. If the user includes a channel mention (`#general`), normally the bot would ping that channel. By using `$disableChannelMentions`, the bot will send the message, but the channel mention will be rendered as plain text and *won't* send a notification. - -```bash -$disableChannelMentions -$message -``` - -**Before `$disableChannelMentions`:** - -If a user typed `#general hello!`, the bot would ping the `#general` channel. - -**After `$disableChannelMentions`:** diff --git a/guide/Message/disableEveryoneMentions.md b/guide/Message/disableEveryoneMentions.md deleted file mode 100644 index f07277f6..00000000 --- a/guide/Message/disableEveryoneMentions.md +++ /dev/null @@ -1,20 +0,0 @@ -# Disable @everyone Mentions - -This command disables the ability for users to mention everyone in the channel using the `@everyone` role. - -## How to Use - -Simply use the command: - -```bash -$disableEveryoneMentions -``` - -**What this does:** - -* Prevents users from using `@everyone` to ping the entire server or channel. -* Helps reduce unnecessary notifications and maintain a more focused environment. - -**Example:** - -If a user tries to type `@everyone` after this command is used, it will not send a notification to everyone. \ No newline at end of file diff --git a/guide/Message/disableRoleMentions.md b/guide/Message/disableRoleMentions.md deleted file mode 100644 index 7e666fdb..00000000 --- a/guide/Message/disableRoleMentions.md +++ /dev/null @@ -1,26 +0,0 @@ -# $disableRoleMentions - -This function prevents the bot from mentioning any roles in its messages. This is useful for avoiding unnecessary notifications to server members. - -## How it Works - -`$disableRoleMentions` will remove the ability of the bot to ping any role in the server when sending a message. - -## Usage - -Simply include `$disableRoleMentions` in your command response or any message where you want to disable role mentions. - -```php -$disableRoleMentions -``` - -**Example:** - -Let's say you have a command that sends a welcome message, but you don't want to mention any roles in that message: - -```php -$disableRoleMentions -Hello and Welcome! -``` - -In this example, even if the message contained a role ID (e.g., `<@&123456789012345678>`), it would be displayed as plain text instead of pinging the role. \ No newline at end of file diff --git a/guide/Message/editEmbed.md b/guide/Message/editEmbed.md deleted file mode 100644 index b1b05b7f..00000000 --- a/guide/Message/editEmbed.md +++ /dev/null @@ -1,76 +0,0 @@ -# $editEmbed - -Edit an existing embed within a specified message. - -## Usage - -```bash -$editEmbed[channel id (optional);message id (optional);New data (curl);Embed Number (optional, default 1)] -``` - -**Parameters:** - -* **channel id (optional):** The ID of the channel containing the message. If omitted, it defaults to the current channel. -* **message id (optional):** The ID of the message containing the embed you want to edit. If omitted, it's assumed you are editing a previous command's message. -* **New data (curl):** A string containing the modifications you want to make to the embed. This string uses a specific format (explained below) to define the changes. -* **Embed Number (optional, default 1):** The index of the embed to edit if the message contains multiple embeds. The first embed is `1`, the second is `2`, and so on. Defaults to `1`. - -## Examples - -Let's illustrate how to use `$editEmbed` with practical examples. - -#### Initial Embed (Dummy Embed) - -First, let's imagine we have a message containing the following embed: - -![Dummy Embed Example](https://i.imgur.com/WINGkjW.png) - -In this example, the message ID containing the embed is `1091071622624051300`. - -#### Editing the Title - -To modify the title of the embed, use the `{title:Your title}` format. - -![Editing Title Example](https://i.imgur.com/NRKCdS1.png) - -#### Adding a Field - -To add a new field to the embed, use the `{field:Name:Value:inline}` format. `inline` should be either `true` or `false`. - -![Adding Field Example](https://i.imgur.com/M3IVHx0.png) - -#### Editing a Field - -To edit an existing field, use the `{field:Name:Value:inline:field number to edit}` format. Remember that field numbers start at 1. - -![Editing Field Example](https://i.imgur.com/14zlrvJ.png) - -#### Editing Multiple Parts Simultaneously - -You can edit multiple aspects of the embed at once by combining the format strings: - -``` -{title:Your new title} -{description:Your new description} -``` - -![Editing Multiple Parts Example](https://i.imgur.com/VoMAg9b.png) - -## Curl Format Reference - -The `New data (curl)` parameter uses a specific format to define the modifications. Here's a comprehensive list: - -| Format | Description | -| ------------------------------ | ------------------------------------------------ | -| `{title:text}` | Edits the title of the embed. | -| `{url:link}` | Edits the URL associated with the title. | -| `{footer:text:url}` | Edits the footer text and optional icon URL. | -| `{description:text}` | Edits the description of the embed. | -| `{desc:text}` | Alias for `{description:text}`. | -| `{color:hex}` | Edits the color of the embed (using a hex code). | -| `{author:text:image url:link url}` | Edits the author name, image URL, and link URL. | -| `{thumbnail:url}` | Edits the thumbnail image URL. | -| `{field:name:value:inline}` | Adds a new field. `inline` must be `true` or `false`. | -| `{field:name:value:inline:field number}` | Edits an existing field. `field number` starts at 1. `inline` must be `true` or `false`. | -| `{timestamp:ms}` | Edits the timestamp (in milliseconds since epoch). | -| `{image:url}` | Displays a large image in the embed. | \ No newline at end of file diff --git a/guide/Message/editIn.md b/guide/Message/editIn.md deleted file mode 100644 index e773774d..00000000 --- a/guide/Message/editIn.md +++ /dev/null @@ -1,29 +0,0 @@ -# $editIn - -Edits a bot's message after a specified delay. This function allows you to update the message content after a set period of time, making it useful for creating dynamic or delayed responses. - -## Usage - -```bash -$editIn[time;new message] -``` - -**Parameters:** - -* `time`: The delay before the message is edited. This should be expressed in seconds (`s`), minutes (`m`), hours (`h`), or days (`d`). For example: `3s`, `1m`, `2h`, `1d`. -* `new message`: The new content of the message after the specified time has elapsed. This can include other functions and variables. - -## Example: - -```bash -Rolling the dice... -$editIn[3s;You got $random[1;6]] -``` - -**Explanation:** - -This example first sends the message "Rolling the dice...". After a delay of 3 seconds, the message will be edited to "You got " followed by a random number between 1 and 6. - -#### Output: - -![](https://i.imgur.com/MOQMVcZ.gif) \ No newline at end of file diff --git a/guide/Message/editMessage.md b/guide/Message/editMessage.md deleted file mode 100644 index a677bc2e..00000000 --- a/guide/Message/editMessage.md +++ /dev/null @@ -1,33 +0,0 @@ -# $editMessage - -Edits a message previously sent by the bot. This function allows you to modify the content of a message. - -#### Usage: `$editMessage[messageId;newMessage;channelId (optional)]` - -* **`messageId`**: The ID of the message you want to edit. -* **`newMessage`**: The new content of the message. -* **`channelId` (optional)**: The ID of the channel where the message is located. If omitted, the function assumes the message is in the same channel where the command is executed. - -## Example - -```php -$editMessage[123456789012345678;This is the updated message content!] -``` - -In this example, the message with the ID `123456789012345678` will be edited to display "This is the updated message content!". - -::: tip Used Functions -`$messageID` - Use the `$messageID` function to retrieve the ID of the message that triggered the command. This is useful if you want to edit the same message that invoked the command. -::: - -::: tip Note -You can format your `newMessage` as an embed using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This allows you to create rich, visually appealing messages. -::: - -::: tip Related Functions -* `$deleteMessage` - The `$deleteMessage` function deletes a message from the server or in DMs. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/editWebhookMessage.md b/guide/Message/editWebhookMessage.md deleted file mode 100644 index e505ee63..00000000 --- a/guide/Message/editWebhookMessage.md +++ /dev/null @@ -1,31 +0,0 @@ -# $editWebhookMessage - -This command allows you to edit a message that was sent by a webhook. You'll need the webhook's ID, token, and the message ID of the message you want to modify. - -## Syntax - -```php -$editWebhookMessage[Webhook ID;Webhook Token;Message ID;New Content;Thread ID (Optional)] -``` - -## Parameters - -* **`Webhook ID`**: The ID of the webhook that sent the message. This is typically a long number. -* **`Webhook Token`**: The token for the webhook. Treat this like a password! Keep it secret! -* **`Message ID`**: The ID of the specific message you want to edit. This is also typically a long number. -* **`New Content`**: The updated content you want to replace the original message with. This is the text that will be displayed in the edited message. -* **`Thread ID (Optional)`**: If the message is in a thread, you'll need to provide the thread ID for the message to be edited correctly. If the message isn't in a thread, leave this parameter blank. - -## Example - -Let's say you have a webhook with the ID `123456789012345678`, the token `abcdefg1234567890abcdefg1234567890`, and you want to edit a message with the ID `987654321098765432`. You want to change the message to "Hello, world! This message has been edited." - -```php -$editWebhookMessage[123456789012345678;abcdefg1234567890abcdefg1234567890;987654321098765432;Hello, world! This message has been edited.] -``` - -If the message was in a thread with the ID `555555555555555555`, the command would look like this: - -```php -$editWebhookMessage[123456789012345678;abcdefg1234567890abcdefg1234567890;987654321098765432;Hello, world! This message has been edited.;555555555555555555] -``` \ No newline at end of file diff --git a/guide/Message/emoji.md b/guide/Message/emoji.md deleted file mode 100644 index 1df8e27f..00000000 --- a/guide/Message/emoji.md +++ /dev/null @@ -1,34 +0,0 @@ -# $emoji - -This function packs a punch with **11 different functionalities** related to emojis, all in a single compact command! Get ready to unlock a world of emoji information. - -## Usage - -The syntax is simple and powerful: - -```php -$emoji[emojiID;option] -``` - -**Let's break it down:** - -* `$emoji`: This is the function itself. -* `emojiID`: This is the ID of the emoji you want to analyze. Make sure you have the correct emoji ID! -* `;`: This separates the emoji ID from the option you want to use. -* `option`: This determines what information you want to retrieve about the emoji. - -## Available Options - -Here's a list of all the options you can use with the `$emoji` function and what they return: - -* `created`: Returns the timestamp (in milliseconds since epoch) when the emoji was created. -* `emoji`: Returns the raw emoji itself (e.g., :smile:). -* `guildid`: Returns the ID of the guild where the emoji is from. -* `id`: Returns the emoji ID (same as what you put in, but useful for confirmation). -* `identifier`: Returns the emoji's identifier, usually in the format `name:ID` which is helpful when using the emoji in reactions. -* `isanimated`: Returns `true` if the emoji is animated (a GIF), and `false` otherwise. -* `isdeleted`: Returns `true` if the emoji has been deleted, and `false` otherwise. -* `ismanaged`: Returns `true` if the emoji is managed by an integration (like Twitch), and `false` otherwise. -* `name`: Returns the name of the emoji. -* `url`: Returns the URL of the emoji image. -* `authorid`: Returns the ID of the user who created the emoji. \ No newline at end of file diff --git a/guide/Message/emojiID.md b/guide/Message/emojiID.md deleted file mode 100644 index d01a1b26..00000000 --- a/guide/Message/emojiID.md +++ /dev/null @@ -1,13 +0,0 @@ -# $emojiID - -Retrieve the ID of the emoji used in a reaction. - -This variable returns the unique ID of the emoji that a user reacted with. This is particularly useful for identifying specific emojis when handling reaction-based events or commands. - -## Usage - -Simply use `$emojiID` within your command or script where you need to access the emoji's ID. - -```php -$emojiID -``` \ No newline at end of file diff --git a/guide/Message/emojiName.md b/guide/Message/emojiName.md deleted file mode 100644 index 5a629e1f..00000000 --- a/guide/Message/emojiName.md +++ /dev/null @@ -1,11 +0,0 @@ -# $emojiName - -This function, `$emojiName`, returns the name of the emoji a user used in a reaction. It's particularly useful within reaction event triggers to understand which specific emoji prompted an action. - -## How to Use It - -The function is very straightforward. Simply use `$emojiName` within your code. - -```php -$emojiName -``` \ No newline at end of file diff --git a/guide/Message/emojiToString.md b/guide/Message/emojiToString.md deleted file mode 100644 index 0a91929c..00000000 --- a/guide/Message/emojiToString.md +++ /dev/null @@ -1,31 +0,0 @@ -# $emojiToString - -This function returns the actual emoji that a user reacted with in a reaction add/remove event. This is useful for determining which specific emoji triggered the event. - -## How it Works - -`$emojiToString` takes the emoji identifier (usually from a reaction event) and converts it into the actual emoji character or unicode representation. - -## Usage - -```bash -$emojiToString -``` - -**Example:** - -Let's say a user reacts to a message with the 👍 emoji. In a reaction add event, you might use `$emojiToString` to get the actual "👍" emoji: - -```php -$emojiToString -``` - -This would then return: - -``` -👍 -``` - -**Important Considerations:** - -* This function is primarily used within reaction add/remove events. \ No newline at end of file diff --git a/guide/Message/emojisFromMessage.md b/guide/Message/emojisFromMessage.md deleted file mode 100644 index 8d2db28a..00000000 --- a/guide/Message/emojisFromMessage.md +++ /dev/null @@ -1,64 +0,0 @@ -# $emojisFromMessage - -This function extracts all unicode and custom emojis from a user's message or provided text. - -## Usage - -You can use `$emojisFromMessage` in two ways: - -**1. From User Message (Default):** - -```bash -$emojisFromMessage -``` - -This will extract emojis from the message that triggered the command. - -**2. From Custom Text:** - -```bash -$emojisFromMessage[text;separator (optional)] -``` - -* **`text`**: The text you want to extract emojis from. -* **`separator`**: (Optional) The character(s) you want to use to separate the extracted emojis. If omitted, the emojis will be returned without a separator. - -## Example - -Let's say a user sends the following message: - -`Hello! 👋 This is a test message with :custom_emoji: and ❤️ some more text.` - -Then consider these usages: - -**Example 1: Extracting emojis from the user's message using the default usage.** - -```php -$emojisFromMessage -``` - -This would return: - -`👋❤️:custom_emoji:` (Emojis returned without a separator). - -**Example 2: Extracting emojis from the user's message, separated by a comma and a space.** - -```php -$emojisFromMessage[;, ] -``` - -This would return: - -`👋, ❤️, :custom_emoji:` (Emojis returned separated by ", "). - -**Example 3: Extracting emojis from specific text with a dash as a separator.** - -```php -$emojisFromMessage[This has 🎉 one and 😁 two emojis; - ] -``` - -This would return: - -`🎉 - 😁` - -**Explanation:** The first example uses the default behavior and extracts all emojis from the message that triggered the command. The second example shows how to provide a separator for better readability. The third example demonstrates extracting emojis from a specific text string rather than the user's message. \ No newline at end of file diff --git a/guide/Message/enableEveryoneMentions.md b/guide/Message/enableEveryoneMentions.md deleted file mode 100644 index c5b5eb0b..00000000 --- a/guide/Message/enableEveryoneMentions.md +++ /dev/null @@ -1,17 +0,0 @@ -# Enable @everyone Mentions - -This command allows you to enable the use of `@everyone` mentions in your Discord server (if disabled by default). **Use with caution!** Enabling `@everyone` can be disruptive if not managed properly. - -## How to Use - -Simply run the `$enableEveryoneMentions` command. - -```bash -$enableEveryoneMentions -``` - -**Important Considerations:** - -* Think carefully about whether enabling `@everyone` is the right choice for your community. Consider the potential for abuse and spam. -* If you enable `@everyone`, ensure you have moderation tools and guidelines in place to prevent misuse. -* Disabling `@everyone` is generally a good practice for larger servers to avoid mass notifications. Only enable it if you have a specific reason and a plan to manage its use. \ No newline at end of file diff --git a/guide/Message/forwardMessage.md b/guide/Message/forwardMessage.md deleted file mode 100644 index 9213518b..00000000 --- a/guide/Message/forwardMessage.md +++ /dev/null @@ -1,10 +0,0 @@ -# $forwardMessage -forward a message to another channel - -#### Usage: `$forwardMessage[Source Channel ID;Source Message ID;Target Channel ID;Return the new message id (yes/no)]` - -#### Example -Forwarding a message with ID `1234` to another channel called `Target Channel` -```php -$forwardMessage[$channelID;1234;Target Channel] -``` diff --git a/guide/Message/getCommandOption.md b/guide/Message/getCommandOption.md deleted file mode 100644 index dc609855..00000000 --- a/guide/Message/getCommandOption.md +++ /dev/null @@ -1,22 +0,0 @@ -# $getCommandOption - -Retrieves the value of a specific option from a slash command. - -#### Usage: `$getCommandOption[type;Option Name]` - -## Option Types - -This function requires you to specify the data type of the option you're trying to retrieve. Here's a list of valid option types: - -* `string`: For text-based input. -* `number`: For numerical input (integers or decimals). -* `boolean`: For true/false values. -* `channel`: For channel mentions/IDs. -* `role`: For role mentions/IDs. -* `mentionable`: For user or role mentions/IDs. -* `user`: For user mentions/IDs. - -
- -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/getEmbed.md b/guide/Message/getEmbed.md deleted file mode 100644 index e48a01de..00000000 --- a/guide/Message/getEmbed.md +++ /dev/null @@ -1,48 +0,0 @@ -# $getEmbed - -Retrieves information from an embed within a specific message. This function allows you to extract various details from an embed, such as its title, description, footer, and more. - -## Usage - -```bash -$getEmbed[Channel ID (optional);Message ID (optional);Info (optional, default is description);Embed Number (optional, default is 1)] -``` - -**Explanation:** - -* **Channel ID (optional):** The ID of the channel containing the message with the embed. If omitted, the current channel is used. -* **Message ID (optional):** The ID of the message containing the embed. If omitted, the last message sent in the channel is used. -* **Info (optional):** The specific piece of information you want to extract from the embed. Defaults to `description` if not provided. See the "Info Values" section below for available options. -* **Embed Number (optional):** The number of the embed to retrieve information from, if the message contains multiple embeds. Defaults to `1` (the first embed). - -## Info Values - -These are the available values you can use to specify what information to retrieve from the embed using the `Info` parameter: - -* `title`: The title of the embed. -* `footer`: The text content of the embed's footer. -* `footer_image`: The URL of the image in the embed's footer. -* `author`: The name of the embed's author. -* `author_url`: The URL associated with the embed's author. -* `author_image`: The URL of the image associated with the embed's author. -* `color`: The decimal representation of the embed's color. -* `color_hex`: The hexadecimal representation of the embed's color (e.g., `#0099ff`). -* `description`: The description of the embed. -* `field`: Gets field name by index. Example: `field;1` will get the name of the second field. (Note: Fields are numbered starting from 1). -* `field_value`: Gets field value by index. Example: `field_value;2` will get the value of the third field. (Note: Fields are numbered starting from 1). -* `field_inline`: Returns `true` or `false` if the field is inline, by index. Example: `field_inline;3` will get if the fourth field is inline or not. (Note: Fields are numbered starting from 1). -* `thumbnail`: The URL of the embed's thumbnail image. -* `timestamp`: The timestamp of the embed (in ISO 8601 format). - -### Example: - -This example retrieves the description of an embed from a message in the same channel. - - - - !!exec $getEmbed[$channelID;$messageID;description] - - - This was an embed description - - \ No newline at end of file diff --git a/guide/Message/getMessage.md b/guide/Message/getMessage.md deleted file mode 100644 index 44b9a5de..00000000 --- a/guide/Message/getMessage.md +++ /dev/null @@ -1,47 +0,0 @@ -# $getMessage - -Retrieves information about a specific message using its ID. This function allows you to access various aspects of a message, such as its content, author, and more. - -## Syntax - -```bash -$getMessage[channelID;messageID;attribute] -``` - -## Parameters - -* `channelID`: The ID of the channel where the message is located. -* `messageID`: The ID of the message you want to retrieve information from. -* `attribute`: Specifies which piece of information you want to retrieve from the message. Available attributes are: - - * `content`: The message's text content. - * `userID/authorid`: The ID of the user who sent the message. - * `description/desc`: (Applicable for embeds only) The description of the embed associated with the message. If the message has no embed or the embed has no description, this will return an empty string. - -## Example Usage - -Let's say you have a message with the ID `123456789012345678` in channel `987654321098765432`. - -1. **Getting the message content:** - - ```bash - $getMessage[987654321098765432;123456789012345678;content] - ``` - - This would return the text content of the message. For instance, if the message said "Hello, world!", the function would return "Hello, world!". - -2. **Getting the user ID of the message sender:** - - ```bash - $getMessage[987654321098765432;123456789012345678;userID] - ``` - - This would return the user ID of the user who sent the message, such as `456789012345678901`. - -3. **Getting the embed description (if the message contains an embed):** - - ```bash - $getMessage[987654321098765432;123456789012345678;desc] - ``` - - This would return the description of the embed within the message. If there is no embed or if the embed lacks a description, an empty string will be returned. diff --git a/guide/Message/getMessageReactions.md b/guide/Message/getMessageReactions.md deleted file mode 100644 index efff50c9..00000000 --- a/guide/Message/getMessageReactions.md +++ /dev/null @@ -1,53 +0,0 @@ -# $getMessageReactions - -This command retrieves the reactions present on a specified message. - -## How it Works - -The `$getMessageReactions` command allows you to list the reactions (emojis) that have been added to a particular message. It can be used to gather information about how users are responding to a message. - -## Usage - -```bash -$getMessageReactions[Channel ID (optional);Message ID (optional);Separator (optional)] -``` - -## Parameters - -* **`Channel ID` (Optional):** The ID of the channel containing the message. If not provided, the command defaults to the current channel where the command is executed. -* **`Message ID` (Optional):** The ID of the message you want to get reactions from. If not provided, the command defaults to the message ID where the command is executed (if it's responding to a message). -* **`Separator` (Optional):** The character or string used to separate the list of reactions. The default separator is a comma (`,`). - -## Examples - -* **Get reactions from the current message in the current channel (most common use):** - - ```bash - $getMessageReactions - ``` - - This will return a comma-separated list of reactions from the message the command is replying to. For example: `👍,👎,❤️` - -* **Get reactions from a specific message in the current channel:** - - ```bash - $getMessageReactions[$messageID] - ``` - - Replace `$messageID` with the actual message ID. - -* **Get reactions from a specific message in a specific channel:** - - ```bash - $getMessageReactions[123456789012345678;987654321098765432] - ``` - - Replace `123456789012345678` with the Channel ID and `987654321098765432` with the Message ID. - -* **Get reactions from a specific message in a specific channel, using a custom separator:** - - ```bash - $getMessageReactions[123456789012345678;987654321098765432; | ] - ``` - - This will separate the reactions with ` | ` instead of a comma. For example: `👍 | 👎 | ❤️` \ No newline at end of file diff --git a/guide/Message/getReactionCount.md b/guide/Message/getReactionCount.md deleted file mode 100644 index 788631e0..00000000 --- a/guide/Message/getReactionCount.md +++ /dev/null @@ -1,42 +0,0 @@ -# $getReactionCount - -Get the number of reactions for a specific emoji on a message. - -## Usage - -```bash -$getReactionCount[channelID;messageID;reaction] -``` - -**Parameters:** - -* `channelID` (optional): The ID of the channel the message is in. Defaults to the current channel if not provided. Use `$channelID` to get the current channel's ID. -* `messageID` (optional): The ID of the message to check. Defaults to the current message's ID (the message that triggered the command) if not provided. -* `reaction`: The emoji you want to count the reactions for (e.g., `👍`, `😂`, or a custom emoji ID). - -## Example - -This example shows how to use `$getReactionCount` to display how many users reacted with a thumbs-up (`👍`) to a specific message. - - - - !!exec Users agree with this decision: $getReactionCount[$channelID;12345678987654321;👍] - - - Users agree with this decision: 13 - - - -**Explanation:** - -* The command `!!exec Users agree with this decision: $getReactionCount[$channelID;12345678987654321;👍]` is executed by a user. -* `$channelID` represents the ID of the channel the command was executed in. -* `12345678987654321` is the ID of the message to check for reactions. -* `👍` is the reaction (thumbs-up emoji) to count. -* The bot replies with "Users agree with this decision: 13" because 13 users reacted to the message with the thumbs-up emoji. - -**Tips:** - -* If you're using the function in the same channel as the message you want to count reactions for, you can omit the `channelID` parameter. -* If you're using the function in the same message as the reaction you want to count, you can omit both the `channelID` and `messageID` parameters. -* Make sure the bot has access to the channel and message you're trying to get the reaction count from. \ No newline at end of file diff --git a/guide/Message/getReactions.md b/guide/Message/getReactions.md deleted file mode 100644 index 517079d0..00000000 --- a/guide/Message/getReactions.md +++ /dev/null @@ -1,39 +0,0 @@ -# $getReactions - -Retrieve a list of users who reacted with a specific emoji to a message. - -#### Usage: `$getReactions[channelId;messageId;emoji;mention/username/id]` - -**Parameters:** - -* `channelId`: The ID of the channel where the message is located. -* `messageId`: The ID of the message to retrieve reactions from. -* `emoji`: The emoji to search for. This can be the emoji itself (e.g., 👍) or its ID (if it's a custom emoji). -* `mention/username/id`: Specifies what kind of data to return for each user. Choose one of the following: - * `mention`: Returns the user's mention string (e.g., `<@123456789012345678>`). - * `username`: Returns the user's username (e.g., `ExampleUser`). - * `id`: Returns the user's ID (e.g., `123456789012345678`). - -
- -::: tip Example - -**Scenario:** You want to get a list of users who reacted with the 👍 emoji on a specific message and mention them. - -**Code:** - -```php -$getReactions[832894131844128888;940739445487988807;👍;mention] -``` - -::: tip Visual Examples - -![](https://cdn.discordapp.com/attachments/914682255346118687/940739445487988807/Screenshot_20220208194229.jpg) - -Counting how many users reacted -![](https://cdn.discordapp.com/attachments/914682255346118687/940740236466618418/Screenshot_20220208194538.jpg) -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/hasEmbeds.md b/guide/Message/hasEmbeds.md deleted file mode 100644 index 6b0ecfbb..00000000 --- a/guide/Message/hasEmbeds.md +++ /dev/null @@ -1,28 +0,0 @@ -# $hasEmbeds - -This function checks if a specific message contains any embeds. Embeds are rich content blocks within a message, which can include things like images, links, and formatted text. - -It returns `true` if the message contains at least one embed, and `false` otherwise. This is useful for creating bots that react to messages with specific types of content. - -**Important:** Uploaded images and videos are considered embeds by this function. - -## Syntax - -```bash -$hasEmbeds[channelID;messageID] -``` - -## Parameters - -* `channelID`: The ID of the channel where the message is located. -* `messageID`: The ID of the message you want to check. - -## Example - -Let's say you want to check if a message with ID `1234567890` in channel `9876543210` has any embeds. You would use the following: - -```bash -$hasEmbeds[9876543210;1234567890] -``` - -This will return either `true` or `false`. \ No newline at end of file diff --git a/guide/Message/hyperlink.md b/guide/Message/hyperlink.md deleted file mode 100644 index db314ce7..00000000 --- a/guide/Message/hyperlink.md +++ /dev/null @@ -1,31 +0,0 @@ -# $hyperlink - -The `$hyperlink` function allows you to create hyperlinks specifically designed for use within Discord embeds. This ensures your links are properly rendered and clickable within the embedded message. - -## Usage - -```php -$hyperlink[url;title] -``` - -* **url:** The complete URL you want the link to point to (e.g., `https://discord.com`). -* **title:** The text that will be displayed as the clickable link. - -## Example - -Let's say you want to create a Discord embed with a description that includes a link to your Discord server. You could use the following: - -```php -$description[$hyperlink[https://discord.com;Join us on Discord!]] -``` - -In this example: - -* `https://discord.com` is the URL of your Discord server. -* `Join us on Discord!` is the text that will be displayed as the clickable link. - -## Output - -The code above will produce an embed similar to the following: - -![Example Output](https://i.imgur.com/nADyi95.png) \ No newline at end of file diff --git a/guide/Message/message.md b/guide/Message/message.md deleted file mode 100644 index 0bec60c5..00000000 --- a/guide/Message/message.md +++ /dev/null @@ -1,76 +0,0 @@ -# $message - -The `$message` function retrieves the user's message or command arguments, providing a powerful way to interact with user input. It's particularly useful for commands where you need to process the text a user has entered. - -When used in a **Forward Message** trigger, `$message` instead returns the **content of the original forwarded message**, allowing you to inspect or respond to what was forwarded rather than the forwarding action itself. - -**Key Use Cases:** - -* **Direct Message Content:** Get the entire message a user sends after a command prefix (e.g., after `!cmd`). -* **Command Arguments:** Access individual words or phrases provided as arguments to a command. -* **Forwarded Messages:** Retrieve the content of the original forwarded message when using a **Forward Message** trigger. -* **Slash Command Data:** When used within a slash command, `$message` retrieves either the value of a specific option or all the option values entered by the user. - -## Usage - -```php -$message -$message[index] -$message[startIndex+] -``` - -* **`$message`**: Returns the entire message following the command prefix. When used in a **Forward Message** trigger, it returns the content of the forwarded message instead. -* **`$message[index]`**: Returns the argument at the specified *index* (starting from 1). -* **`$message[startIndex+]`**: Returns all arguments starting from the specified *startIndex* (including the argument at that index). - -## Examples - -Let's say a user types the following command: - -```text -!cmd Hello World, How are you? -``` - -Here's how `$message` would behave: - -* `$message` would be replaced with: `Hello World, How are you?` -* `$message[1]` would be replaced with: `Hello` -* `$message[2]` would be replaced with: `World` -* `$message[2+]` would be replaced with: `World, How are you?` - -**Explanation:** - -* `$message` captures the entire input string after the `!cmd` command. -* `$message[1]` gets the first word ("Hello"). Remember that indexing starts at **1**, not **0**. -* `$message[2]` gets the second word ("World"). -* `$message[2+]` gets all words starting from the second word ("World"), resulting in `"World, How are you?"`. - -## Forward Message Example - -If a user forwards a message containing: - -```text -Server maintenance starts in 10 minutes. -``` - -and your custom command is triggered by the **Forward Message** trigger: - -* `$message` → `Server maintenance starts in 10 minutes.` -* `$message[1]` → `Server` -* `$message[2+]` → `maintenance starts in 10 minutes.` - -This allows you to process the contents of the original forwarded message just like a normal user message. - -## Slash Command Example - -Imagine you have a slash command: - -```text -/greet user:John Doe message:Hello! -``` - -If your code uses `$message[1]`, and the slash command defines the options in the order `user` then `message`, it may return `"John Doe"`. For slash commands, it is generally more reliable to use `$getOption` to retrieve values by option name. - -##### Function Difficulty: - -###### Tags: diff --git a/guide/Message/messageAttachment.md b/guide/Message/messageAttachment.md deleted file mode 100644 index 7fb541b6..00000000 --- a/guide/Message/messageAttachment.md +++ /dev/null @@ -1,33 +0,0 @@ -# $messageAttachment - -This function retrieves the URL of the first attachment found in a message. If a message has multiple attachments, only the URL of the first one will be returned. - -#### Usage: - -```php -$messageAttachment -``` - -
- -#### Example: - -This example demonstrates how `$messageAttachment` can be used. - - - - !!exec $messageAttachment - - - https://media.discordapp.net/avatars/725721249652670555/781224f90c3b841ba5b40678e032f74a.webp - - - -**Explanation:** - -* The member sends the command `!!exec $messageAttachment`. -* The bot returns the URL of the first attachment in the member's message. If the message does not contain any attachment it will return an empty string. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/messageExists.md b/guide/Message/messageExists.md deleted file mode 100644 index 89ff9aec..00000000 --- a/guide/Message/messageExists.md +++ /dev/null @@ -1,31 +0,0 @@ -# $messageExists - -Checks if a message exists in a specified channel and returns `true` or `false`. - -#### Usage: - -`$messageExists[channelID;messageID]` - -* **channelID:** The ID of the channel where the message should be checked. -* **messageID:** The ID of the message to check for. - -
- -**Example:** - -Let's say you want to check if a message with the ID `123456789012345678` exists in the channel with the ID `987654321098765432`. - - - - !!exec $messageExists[987654321098765432;123456789012345678] - - - true - - - -In this example, if the message exists, the bot will return `true`. If the message doesn't exist, the bot will return `false`. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/messageFlags.md b/guide/Message/messageFlags.md deleted file mode 100644 index 9b4ab63a..00000000 --- a/guide/Message/messageFlags.md +++ /dev/null @@ -1,28 +0,0 @@ -# $messageFlags - -This function retrieves the flags associated with a message. Message flags provide additional information about the message, such as whether it's a crosspost or if it's a system message. - -#### Usage: `$messageFlags` - -
- -Here's a simple example demonstrating how to use `$messageFlags`: - - - - !!exec Flags: $messageFlags - - - Flags: - - - -**Explanation:** - -* The user types `!!exec Flags: $messageFlags`. -* The bot executes the command and replaces `$messageFlags` with the actual flags of the triggering message. -* The bot then replies with "Flags:" followed by the flags (if any) for that message. If there are no flags, the output will simply be "Flags:". - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/messageID.md b/guide/Message/messageID.md deleted file mode 100644 index 93369a50..00000000 --- a/guide/Message/messageID.md +++ /dev/null @@ -1,30 +0,0 @@ -# $messageID - -Retrieves the ID of the message that triggered the command. - -**Description:** This function returns the unique ID of the Discord message that initiated the execution of your custom command. - -**Usage:** `$messageID` - -**Example:** - -``` -!!exec $messageID -``` - -**Explanation:** In this example, when the command `!!exec $messageID` is executed, `$messageID` will be replaced with the actual message ID of the message that contained the command. The custom command then processes and likely outputs or uses this message ID. - -**Discord Example:** - - - - !!exec $messageID - - - 789089088989809890 - - - -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Message/messagePublish.md b/guide/Message/messagePublish.md deleted file mode 100644 index 515889e4..00000000 --- a/guide/Message/messagePublish.md +++ /dev/null @@ -1,34 +0,0 @@ -# $messagePublish - -Publishes a message to an announcement channel. This command allows you to easily share a message from one channel to another, typically an announcement channel. - -#### Usage: - -You can use `$messagePublish` in three ways: - -* **`$messagePublish`**: If executed in the same channel as the message you want to publish, it will publish the message that triggered the command. - -* **`$messagePublish[messageID]`**: Publishes the message with the specified `messageID` from the current channel. Replace `messageID` with the actual ID of the message you wish to publish. - -* **`$messagePublish[channelID;messageID]`**: Publishes the message with the specified `messageID` from the specified `channelID`. Replace `channelID` with the ID of the channel containing the message, and `messageID` with the ID of the message itself. - -##### Examples: - -* To publish the message triggering the command: - ``` - $messagePublish - ``` - -* To publish a message with the ID `123456789012345678` from the current channel: - ``` - $messagePublish[123456789012345678] - ``` - -* To publish a message with the ID `123456789012345678` from the channel with the ID `987654321098765432`: - ``` - $messagePublish[987654321098765432;123456789012345678] - ``` - -##### Function Difficulty: - -##### Tags: \ No newline at end of file diff --git a/guide/Message/messageSlice.md b/guide/Message/messageSlice.md deleted file mode 100644 index 5bbf324d..00000000 --- a/guide/Message/messageSlice.md +++ /dev/null @@ -1,49 +0,0 @@ -# $messageSlice - -Extracts a portion of the message arguments, from a specified start position to an optional end position. - -#### Usage: `$messageSlice[from;to (optional)]` - -* `from`: The starting index (1-based) of the argument you want to extract. -* `to`: (Optional) The ending index (1-based) of the argument you want to extract. If omitted, it slices from `from` to the end of the message. - -
- -**Example:** - -Let's say the message sent is: `!!exec a b c d e` - -```html - - - !!exec $messageSlice[1] - - - b c d e - - -``` - -In this example, `$messageSlice[1]` extracts arguments from index 1 to the end, resulting in `b c d e`. Remember that arguments are separated by spaces, and the command itself (`!!exec` in this case) is not included. - -
- -**Another Example:** - -Using the same message: `!!exec a b c d e` - -```html - - - !!exec $messageSlice[1;2] - - - b c - - -``` - -Here, `$messageSlice[1;2]` extracts arguments from index 1 to index 2, resulting in `b c`. - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/messageType.md b/guide/Message/messageType.md deleted file mode 100644 index 1f8908c0..00000000 --- a/guide/Message/messageType.md +++ /dev/null @@ -1,28 +0,0 @@ -# $messageType - -This function returns the type of the message that triggered the command. This can be useful for creating commands that behave differently depending on how they were called. - -#### Usage: `$messageType` - -
- -**Example:** - -Here's how `$messageType` might be used in a custom command: - - - - !!exec $messageType - - - Default - - - -::: tip Note -The `$messageType` function returns a specific message type. You can find a list of possible return values [here](../CodeReferences/ref.message_types.md). These values represent different ways a message can be sent, such as a regular text message, a system message, or an interaction response. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/messageWebhookID.md b/guide/Message/messageWebhookID.md deleted file mode 100644 index ccb82c0f..00000000 --- a/guide/Message/messageWebhookID.md +++ /dev/null @@ -1,26 +0,0 @@ -# $messageWebhookID - -Retrieves the ID of the webhook that sent the message. - -#### Usage: - -`$messageWebhookID` - -This function requires no arguments and simply returns the webhook ID. - -
- - - - !!exec $messageWebhookID - - - 683630053686378498 - - - -**Example:** If a webhook with the ID `683630053686378498` sent the message, the function would return `683630053686378498`. - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/modifyWebhook.md b/guide/Message/modifyWebhook.md deleted file mode 100644 index 8627b1c2..00000000 --- a/guide/Message/modifyWebhook.md +++ /dev/null @@ -1,29 +0,0 @@ -# Modify Webhook - -This function allows you to modify a webhook's name and avatar using its ID and token. - -#### Usage: - -`$modifyWebhook[webhookID;webhookToken;name;avatar (optional)]` - -**Parameters:** - -* `webhookID`: The ID of the webhook you want to modify. -* `webhookToken`: The token associated with the webhook. -* `name`: The new name you want to give the webhook. -* `avatar (optional)`: The URL of the new avatar for the webhook. If you don't want to change the avatar, you can leave this blank or omit it. - -
- -::: tip Example - -Here's an example of how to use this function: - -![](https://cdn.discordapp.com/attachments/914682255346118687/940753785867870278/Screenshot_20220208203936.jpg) -::: - -
- -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Message/msg.md b/guide/Message/msg.md deleted file mode 100644 index 21c9a402..00000000 --- a/guide/Message/msg.md +++ /dev/null @@ -1,113 +0,0 @@ -# $msg -The `$msg` function is a powerful and compact tool that lets you extract a wide range of information from Discord messages. - -### Usage: `$msg[channelid;messageid;property]` - -To use the `$msg` function, you need to provide the channel ID, the message ID, and the specific property you want to retrieve. Let's break it down: - -* **`channelid`**: The ID of the channel where the message is located. -* **`messageid`**: The ID of the message you want to get information from. -* **`property`**: The specific piece of information you want to retrieve from the message. - -#### Example: - -```php -$msg[1234567890;9876543210;authorname] -``` - -This would return the author's name of the message with the ID `9876543210` located in the channel with the ID `1234567890`. - -### Supported Properties - -Here's a comprehensive list of the properties you can access with the `$msg` function: - -**Author Information:** - -* **`author`**: The message author's user ID. -* **`authormention`**: A mention of the message author (e.g., `<@1234567890>`). -* **`authortag`**: The message author's full Discord tag (e.g., `Username#1234`). -* **`authorname`**: The message author's username (e.g., `Username`). -* **`authoravatar`**: The URL of the message author's avatar. - -**Channel Information:** - -* **`channel`**: The ID of the channel where the message was sent. -* **`channelname`**: The name of the channel where the message was sent. - -**Message Content:** - -* **`cleancontent`**: The message content with mentions like `@here` and `@everyone` removed. -* **`content`**: The full message content. -* **`rawcontent`**: The message content with _all_ mentions removed. - -**Message Metadata:** - -* **`created`**: The date and time the message was created. -* **`guildid`**: The ID of the guild (server) where the message was sent. -* **`guildname`**: The name of the guild (server) where the message was sent. -* **`id`**: The message ID. -* **`url`**: A direct link to the message. -* **`reference`**: The message ID of the message this message is replying to (if it's a reply). -* **`thread`**: The thread ID of the message if it exists within a thread (otherwise undefined). -* **`pinned`**: Returns `true` if the message is pinned, `false` otherwise. - -**Attachment Information:** - -* **`allattachments`**: A newline-separated list of URLs for all attachments in the message. -* **`allattachmentsname`**: A newline-separated list of filenames for all attachments in the message. -* **`attachment`**: The URL of a specific attachment. Use `additional 1` to specify which attachment (e.g., `$msg[...;attachment additional 1]` for the first attachment). Returns `undefined` if no attachment exists or the specified attachment doesn't exist. -* **`attachmentname`**: The filename of a specific attachment. Use `additional 1` to specify which attachment (e.g., `$msg[...;attachmentname additional 1]` for the first attachment). Returns `undefined` if no attachment exists or the specified attachment doesn't exist. - -**Embed Information:** - -* **`embed`**: Returns the full embed object in JSON format. Use `additional 1` to specify which embed (e.g., `$msg[...;embed additional 1]` for the first embed). Returns an empty JSON object `{}` if no embed exists or the specified embed doesn't exist. -* **`embedtitle`**: The title of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedcolor`**: The color of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embeddesc`**: The description of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedauthortext`**: The author text of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedauthorurl`**: The author URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedauthoricon`**: The author icon URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedimage`**: The image URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedthumbnail`**: The thumbnail URL of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedurl`**: The URL of a specific embed's title. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedfields`**: Returns embed fields like `NAME///VALUE///INLINE//////NAME 1///VALUE 1///INLINE 2..` of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. -* **`embedfieldname`**: The name of a specific field within a specific embed. Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. -* **`embedfieldvalue`**: The value of a specific field within a specific embed. Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. -* **`embedfieldinline`**: Whether a specific field within a specific embed is displayed inline (`true` or `false`). Use `additional 1` to specify the embed and `additional 2` to specify the field number. Returns `undefined` if no embed exists, the specified embed doesn't exist, or the specified field doesn't exist. -* **`embedtimestamp`**: The timestamp of a specific embed. Use `additional 1` to specify which embed. Returns `undefined` if no embed exists or the specified embed doesn't exist. - -**Sticker Information:** - -* **`sticker`**: Returns a specific sticker in the message. Use `additional 1` to specify which sticker. -* **`stickers`**: Returns all the stickers in the message, separated by `, `. - -**Permission Checks:** - -* **`isdeleteable`**: Returns `true` if the command author has permission to delete the message, `false` otherwise. -* **`isdeleted`**: Returns `true` if the message has been deleted, `false` otherwise. -* **`iseditable`**: Returns `true` if the command author has permission to edit the message, `false` otherwise. -* **`ispinnable`**: Returns `true` if the command author has permission to pin the message, `false` otherwise. -* **`ispinned`**: Returns `true` if the message is pinned, `false` otherwise. - -**Components:** -* **`components`** - return all components in the message like `{button:..} {container:...}` - -**Forward Message:** -* **`isforward`** – Returns `true` if the message is a forwarded message; otherwise returns `false`. -* **`forwardsvid`** – Returns the server ID where the original forwarded message was sent. -* **`forwardmsgid`** – Returns the original message ID of the forwarded message. -* **`forwardchid`** – Returns the channel ID where the original forwarded message was posted. - - -
- - - !!exec $msg[$channelID;79890890890809;content] - - - Old Messsage - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/noEscapingMessage.md b/guide/Message/noEscapingMessage.md deleted file mode 100644 index 0d48f6bc..00000000 --- a/guide/Message/noEscapingMessage.md +++ /dev/null @@ -1,35 +0,0 @@ -# $noEscapingMessage - -This function behaves similarly to `$message`, but it **does not escape special characters**. This means characters like backticks (`) or newlines will be interpreted literally and won't be replaced with their escaped counterparts. - -#### Usage: `$noEscapingMessage` - -
- - - - !!exec `` `$` $noEscapingMessage `` ` - - - `` `$` `` ` - - - !!exec `` `$` `` ` - - - `` `#CHAR#` `` ` - - - -::: danger READ CAREFULLY BEFORE USING! - -**ONLY use this function if you understand the implications and are comfortable handling potentially unsafe characters.** Using `$noEscapingMessage` carelessly can lead to command errors, unexpected behavior, or even security vulnerabilities. Always sanitize your inputs and be aware of the context in which this function is being used. -::: - -::: tip - -For most use cases, it's recommended to use `$message` to ensure proper character escaping and prevent unexpected issues. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/noMentionMessage.md b/guide/Message/noMentionMessage.md deleted file mode 100644 index 1ce382c5..00000000 --- a/guide/Message/noMentionMessage.md +++ /dev/null @@ -1,30 +0,0 @@ -# $noMentionMessage - -The `$noMentionMessage` function returns the content of the message sent by the command executor, but with all mentions removed. This is particularly useful for preventing your bot from accidentally pinging roles or users when echoing user input or using it in other command logic. - -#### Usage: - -`$noMentionMessage` - -This function doesn't require any parameters. It simply returns the message content with mentions stripped out. - -#### Example: - -Let's say you want to echo the user's message in a custom command, but you don't want the bot to actually ping anyone they mentioned. - -Here's how it would look in Discord: - - - - !!exec Server Moderator testing [$noMentionMessage] ($message) - - - Server Moderator [testing] (Server Moderator testing) - - - -In this example, even though the user mentioned "Server Moderator", the bot only mentions them once and then includes "testing" (the message with mentions removed). The original message including the mention is also included. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Message/pinMessage.md b/guide/Message/pinMessage.md deleted file mode 100644 index 913399b2..00000000 --- a/guide/Message/pinMessage.md +++ /dev/null @@ -1,38 +0,0 @@ -# $pinMessage - -Pins a message in a channel. This action requires the bot to have the "Manage Messages" permission in the target channel. - -## Functionality - -The `$pinMessage` function allows you to pin either the message that triggered the command or a specific message by providing its channel and message IDs. Pinned messages appear at the top of the chat for easy reference. - -## Usage - -There are two ways to use `$pinMessage`: - -**1. Pin the Command Message:** - - ```bash - $pinMessage - ``` - - This will pin the message that the command was used in. For example, if a user types `!pin This is important!` and the command includes `$pinMessage`, the message "This is important!" will be pinned. - -**2. Pin a Specific Message:** - - ```bash - $pinMessage[channelID;messageID] - ``` - - * `channelID`: The ID of the channel containing the message you want to pin. You can usually get the channel ID by right-clicking on the channel in Discord (with Developer Mode enabled) and selecting "Copy ID". - * `messageID`: The ID of the specific message you want to pin. You can usually get the message ID by right-clicking on the message in Discord (with Developer Mode enabled) and selecting "Copy ID". - - **Example:** - - To pin a message with the ID `123456789012345678` in the channel with the ID `987654321098765432`, you would use: - - ```bash - $pinMessage[987654321098765432;123456789012345678] - ``` - -**Important:** Ensure the bot has the necessary permissions ("Manage Messages") in the target channel to successfully pin messages. \ No newline at end of file diff --git a/guide/Message/poll.md b/guide/Message/poll.md deleted file mode 100644 index 72ac507b..00000000 --- a/guide/Message/poll.md +++ /dev/null @@ -1,34 +0,0 @@ -# $poll - -retrieve information about a poll in a message - -## Usage - -```bash -$poll[Channel ID (default $channelID);Message ID (default $messageID);data] -``` - -### data options: -`name/question`: get the poll question\ -`answers`: get the poll answers count\ -`votes`: get the total votes this poll gathered\ -`answer n name`: get the nth answer name\ -`answer n emoji`: get the nth answer emoji\ -`answer n votes`: get the nth answer votes\ -`top n name`: get the nth top-ranked name\ -`top n emoji`: get the nth top-ranked answer emoji\ -`top n votes`: get the nth top-ranked answer votes\ -`multiple`: whether poll accept multiple selection (yes/no)\ -`expired`: whether poll is expired (yes/no)\ -`expiretime`: get the expiration time of the poll in ms\ -`ended`: whether poll is ended (yes/no) - -### Example: - - - !!exec Poll name: $poll[$channelID;$messageID;name]
Total votes: $poll[$channelID;$messageID;votes]
Total answers: $poll[$channelID;$messageID;answers]
1st answer name: $poll[$channelID;$messageID;answer 1 name]
2nd answer name: $poll[$channelID;$messageID;answer 2 name]
1st answer votes: $poll[$channelID;$messageID;answer 1 votes]

-
-
- -### Output: -![](https://i.imgur.com/DRajoEQ.png) \ No newline at end of file diff --git a/guide/Message/referenceChannelID.md b/guide/Message/referenceChannelID.md deleted file mode 100644 index d3022ddd..00000000 --- a/guide/Message/referenceChannelID.md +++ /dev/null @@ -1,15 +0,0 @@ -# $referenceChannelID - -Retrieves the ID of the channel containing the message a user replied to. - -This variable is useful when you need to know the channel where the original message that triggered a reply was sent. This allows you to perform actions within that channel. - -## Syntax - -```bash -$referenceChannelID -``` - -## Explanation - -`$referenceChannelID` returns the channel ID as a text. If the message isn't a reply to another message, it will return an empty text. diff --git a/guide/Message/referenceMessageID.md b/guide/Message/referenceMessageID.md deleted file mode 100644 index 28190847..00000000 --- a/guide/Message/referenceMessageID.md +++ /dev/null @@ -1,8 +0,0 @@ -# $referenceMessageID - -This variable holds the ID of the message that a user is replying to within a channel. - -## Explanation - -When a user replies to a specific message, the `$referenceMessageID` function is populated with the unique identifier of that original message. If the user is not replying to a specific message (i.e., they're sending a new, independent message), this function will be empty - diff --git a/guide/Message/reply.md b/guide/Message/reply.md deleted file mode 100644 index 1217effe..00000000 --- a/guide/Message/reply.md +++ /dev/null @@ -1,55 +0,0 @@ -# $reply - -This command allows your bot to reply to a specific message within a channel. It's useful for referencing context or answering questions directly. - -## Usage - -```bash -$reply[messageID (optional); mention on reply (yes/no, default is no)] -``` - -**Explanation:** - -* **`$reply[...]`**: The command itself. -* **`messageID (optional)`**: The ID of the message you want the bot to reply to. If you omit this, the bot will reply to the message that triggered the command. -* **`mention on reply (yes/no, default is no)`**: Determines whether the user who sent the original message should be pinged in the reply. - * `yes`: The user will be mentioned. - * `no` (or omitting this parameter): The user will *not* be mentioned. - -## Examples - -### Example 1: Reply to User Message with Ping - -This example demonstrates how to reply to the user's message and ping them in the reply. - -```bash -Hello $username! -$reply[$messageID;yes] -``` - -**Explanation:** - -* `Hello $username!`: Greets the user (using the `$username` variable). -* `$reply[$messageID;yes]`: Replies to the message that triggered the command (because `messageID` is not explicitly specified) and mentions the user. - -**Output:** - -![](https://i.imgur.com/ekAkjX8.png) - -### Example 2: Reply to User Message without Ping - -This example shows how to reply to the user's message without mentioning them. - -```bash -Hello $username! -$reply[$messageID;no] -``` - -**Explanation:** - -* `Hello $username!`: Greets the user. -* `$reply[$messageID;no]`: Replies to the message that triggered the command and *does not* mention the user. - -**Output:** - -![](https://i.imgur.com/AAZZu4T.png) \ No newline at end of file diff --git a/guide/Message/sendCrosspostingMessage.md b/guide/Message/sendCrosspostingMessage.md deleted file mode 100644 index 190a4b8f..00000000 --- a/guide/Message/sendCrosspostingMessage.md +++ /dev/null @@ -1,35 +0,0 @@ -# $sendCrosspostingMessage - -Send a message to multiple channels simultaneously. This function is useful for quickly broadcasting announcements or information across various channels on your server. - -## Syntax - -```bash -$sendCrosspostingMessage[message;channel1;channel2;...] -``` - -* **message:** The message content you want to send. This is the text that will be displayed in each of the specified channels. -* **channel1;channel2;...:** A semicolon-separated list of channel names or IDs where the message will be sent. Make sure the bot has permission to send messages in all specified channels. - -## Usage Notes - -* Ensure the bot has the necessary permissions (Send Messages) in each target channel. -* Channel names are case-sensitive. Using Channel IDs is more reliable to avoid any potential naming conflicts. To use a channel ID, simply replace the channel name with its numerical ID. - -## Example - -This example demonstrates sending the message "Hello World!" to the channels named `#general` and `#off-topics`. - -```bash -$sendCrosspostingMessage[Hello World!;general;off-topics] -``` - -**How to find Channel IDs:** - -To use Channel IDs instead of names, you'll need to enable Developer Mode in Discord. Go to User Settings -> Advanced, and toggle Developer Mode on. Then, right-click on the channel you want to use and select "Copy ID." You can then paste this ID into the `$sendCrosspostingMessage` function. For example: - -```bash -$sendCrosspostingMessage[Hello World!;123456789012345678;987654321098765432] -``` - -This would send "Hello World!" to the channels with IDs `123456789012345678` and `987654321098765432`. Using Channel IDs is the recommended approach for reliability. \ No newline at end of file diff --git a/guide/Message/sendDM.md b/guide/Message/sendDM.md deleted file mode 100644 index 916c40fd..00000000 --- a/guide/Message/sendDM.md +++ /dev/null @@ -1,42 +0,0 @@ -# $sendDM - -Sends the output of the code to the message author's DMs or to the DMs of a specified user. - -#### Usage: `$sendDM[userID;message]` - -* `userID`: (Optional) The ID of the user to send the DM to. If omitted, the DM will be sent to the message author. -* `message`: The message to send in the DM. - -
- -**Example 1: Sending a DM to the message author multiple times.** - - - - !!exec $sendDM[$authorID;I can add this multiple times in my code! This is time 1] - $sendDM[$authorID;I can add this multiple times in my code! This is time 2] - - - -
- - - - I can add this multiple times in my code! This is time 1 - - - I can add this multiple times in my code! This is time 2 - - - -::: tip Note -You can send embeds using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This allows you to create richly formatted messages within the DM. -::: - -::: tip Related Functions -* `$channelSendMessage`: Sends a message to a specific channel in the server. -* `$sendMessage`: Sends a message to the channel where the command was used. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/sendMessage.md b/guide/Message/sendMessage.md deleted file mode 100644 index 2113a50a..00000000 --- a/guide/Message/sendMessage.md +++ /dev/null @@ -1,46 +0,0 @@ -# $sendMessage - -Sends a message to the channel where the command was executed. - -#### Usage: `$sendMessage[message;return ID (yes/no) (optional)]` - -**Arguments:** - -* `message`: The content of the message to send. -* `return ID`: (Optional) Determines whether to return the ID of the sent message. Use `yes` to return the ID, `no` to not return it. Defaults to `no` if not provided. - -
- -**Example:** - -```discord -!!exec $sendMessage[This is a fantastic message!;no] -``` - - - - !!exec $sendMessage[This is a fantastic message!;no] - - - This is a fantastic message! - - - -#### More Examples - -**Sending an embed:** - -It is recommended to use [Message Curl Format](../CodeReferences/ref.message_curl_format.md) to send more complex messages like embeds - -![](https://i.imgur.com/A7UbSpj.png) - -::: tip Note -You can send more complex structures like embed titles, footers, buttons, and menus through [Message Curl Format](../CodeReferences/ref.message_curl_format.md). This provides greater control over the appearance and functionality of your messages. -::: - -::: tip Related Functions -* `$channelSendMessage`: Send a message to a specific channel. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/sendWebhook.md b/guide/Message/sendWebhook.md deleted file mode 100644 index 14589e3f..00000000 --- a/guide/Message/sendWebhook.md +++ /dev/null @@ -1,37 +0,0 @@ -# $sendWebhook - -Sends a message via a Discord webhook using its ID and token. - -#### Usage: `$sendWebhook[webhookID;webhookToken;message;return message ID (yes/no, optional);username (optional);avatar URL (optional)]` - -* **webhookID:** The ID of the webhook. -* **webhookToken:** The token of the webhook. -* **message:** The message content to send. -* **return message ID (optional):** If set to `yes`, the function will return the ID of the sent message. Defaults to `no`. -* **username (optional):** The username to display for the webhook message. If not provided, the webhook's default name will be used. -* **avatar URL (optional):** The URL of the avatar to display for the webhook message. If not provided, the webhook's default avatar will be used. - -#### Example: - -```discord -!!exec $sendWebhook[98723xxxx...;K9oJxxxx...;Hello world!] -``` - -```discord -Webhook: Hello world! -``` - -::: tip -You can customize the `username` and `avatar URL` parameters to display different names and avatars for each message. -::: - -::: tip Note -You can send complex messages with embeds using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md). -::: - -::: warning Warning! -For non-premium bots, this function will behave exactly as `$sendMessage` due to rate limit avoidance mechanisms. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Message/sentMessageID.md b/guide/Message/sentMessageID.md deleted file mode 100644 index 1c042608..00000000 --- a/guide/Message/sentMessageID.md +++ /dev/null @@ -1,29 +0,0 @@ -# $sentMessageID - -Get the ID of the last sent message. - -This function allows you to retrieve the message ID of the most recently sent message within your code. This is particularly useful for subsequent actions you want to perform on that specific message, such as editing or deleting it. - -## Usage - -Simply use `$sentMessageID` in your commands to reference the last message's ID. - -```bash -$sentMessageID -``` - -### Example: Deleting a Sent Message After 3 Seconds - -This example demonstrates how to send a message, wait for 3 seconds, and then delete the message using its ID obtained with `$sentMessageID`. - -```bash -$sendMessage[Hello World] -$wait[3s] -$deleteMessage[$sentMessageID] -``` - -**Explanation:** - -1. `$sendMessage[Hello World]`: Sends the message "Hello World" to the current channel. -2. `$wait[3s]`: Pauses the script execution for 3 seconds. -3. `$deleteMessage[$sentMessageID]`: Deletes the message whose ID is stored in the `$sentMessageID` function. Since the `$sendMessage` command was executed immediately before, `$sentMessageID` contains the ID of the "Hello World" message. \ No newline at end of file diff --git a/guide/Message/unpinMessage.md b/guide/Message/unpinMessage.md deleted file mode 100644 index 3542554a..00000000 --- a/guide/Message/unpinMessage.md +++ /dev/null @@ -1,44 +0,0 @@ -# $unpinMessage - -Unpins a specific message from a channel. You can either unpin the message that triggered the command, or unpin a message in another channel by providing the channel and message IDs. - -## Syntax - -```php -$unpinMessage -$unpinMessage[channelID;messageID] -``` - -* **`$unpinMessage`**: Unpins the message that triggered the command. Requires `Manage Messages` permission in the channel. -* **`$unpinMessage[channelID;messageID]`**: Unpins a specific message in the specified channel. Requires `Manage Messages` permission in the channel specified by `channelID`. - -## Parameters - -* **`channelID`**: (Optional) The ID of the channel where the message to unpin is located. -* **`messageID`**: (Optional) The ID of the message to unpin. - - **Note:** If `channelID` is provided, `messageID` must also be provided. - -## Examples - -**1. Unpinning the message that triggered the command:** - -This will unpin the message the user sent that triggered the command (e.g., a command like `$unpinMessage`). - -```php -$unpinMessage -``` - -**2. Unpinning a specific message in another channel:** - -This will unpin the message with ID `987654321098765432` from the channel with ID `123456789012345678`. Replace these with the actual Channel and Message IDs you wish to unpin. - -```php -$unpinMessage[123456789012345678;987654321098765432] -``` - -**Important Considerations:** - -* The bot requires the `Manage Messages` permission in the channel where the message is being unpinned. -* Make sure the provided `channelID` and `messageID` are valid IDs. -* If the message is already unpinned, the function will not return an error. \ No newline at end of file diff --git a/guide/Message/webhookExists.md b/guide/Message/webhookExists.md deleted file mode 100644 index d3e87402..00000000 --- a/guide/Message/webhookExists.md +++ /dev/null @@ -1,25 +0,0 @@ -# $webhookExists - -Checks if a webhook exists using its ID and token. Returns `true` if the webhook exists, and `false` otherwise. - -#### Usage: - -`$webhookExists[webhookID;webhookToken]` - -* **webhookID:** The ID of the webhook to check. -* **webhookToken:** The token of the webhook to check. - -
- - - - !!exec $webhookExists[940749xx...;Oc_BoyAWxx...] - - - true - - - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Other/CustomBot.md b/guide/Other/CustomBot.md deleted file mode 100644 index 5c36b4be..00000000 --- a/guide/Other/CustomBot.md +++ /dev/null @@ -1,67 +0,0 @@ -# Setting Up Your Custom Bot - -This guide will walk you through setting up your own custom bot. This feature is available to users who have achieved Tier 3+ access, either by redeeming it or by winning it in our support server. - -## One-Time Setup Steps - -Follow these steps to create and connect your custom bot. You only need to do this once! - -### 1. Access the Discord Developer Portal - -Go to the [Discord Developer Portal](https://discord.com/developers/applications). This is where you'll create and manage your bot. - -### 2. Create a New Application - -Click the "New Application" button. - -![Create a new application](https://i.imgur.com/kA8EKS7.png) - -### 3. Name Your Application - -Enter a name for your bot application and click the "Create" button. This name is what your bot will be called on Discord. - -![Enter a name and press the create button](https://i.imgur.com/46zlT4y.png) - -### 4. Navigate to the Bot Section - -In the left-hand menu, click on the "Bot" section. - -![Go to section bot](https://i.imgur.com/xUCbccq.png) - -### 5. Generate a Bot Token - -Click the "Reset Token" button. This will generate a new, valid token for your bot. **Keep this token secure! Do not share it with anyone!** - -![](https://i.imgur.com/GbWfwyy.png) - -### 6. Copy the Token - -Click the "Copy" button next to the token to copy it to your clipboard. - -![](https://i.imgur.com/pHYqcIT.png) - -### 7. Access the CCommandBot Dashboard - -Go to the [Dashboard](https://ccommandbot.com/dashboard) and select the server where you want to use your premium features. - -![](https://i.imgur.com/Ostshet.png) - -![](https://i.imgur.com/fQXdiT3.png) - -### 8. Paste the Token and Save - -Paste the copied token into the "Token" input field and click the "Save" button. - -![](https://i.imgur.com/2FAuEKp.png) - -### 9. Invite Your Bot to Your Server - -Click on the "Invite your bot" button. This will take you to a Discord authorization page where you can select the server you want to add your bot to. **Make sure you have the "Manage Server" permission in the server you're inviting the bot to.** - -![](https://i.imgur.com/zkjCUvB.png) - -### 10. All Done! - -You're finished! Wait a few minutes for your bot to come online. :tada: - -**Important:** Make sure the main CCommandBot remains in your server. Removing the main bot will prevent you from accessing the dashboard and managing your custom bot. \ No newline at end of file diff --git a/guide/Other/curl.md b/guide/Other/curl.md deleted file mode 100644 index 38b28aea..00000000 --- a/guide/Other/curl.md +++ /dev/null @@ -1,35 +0,0 @@ -# Curl Arguments - -Tired of long, complicated function calls with tons of empty parameters? Curl arguments are here to help! They provide a more readable and intuitive way to pass options to functions, making your code cleaner and easier to understand. - -Instead of using parameter arrays like `$randomText[one;two;three]`, curl arguments allow you to specify options using a key-value format, similar to how you would in a URL. This eliminates the need for placeholder values and improves the overall clarity of your code. - -**Key Benefits:** - -* **Improved Readability:** No more deciphering long strings of semicolons and empty parameters. Curl arguments make it clear what each option is intended for. -* **Simplified Code:** Avoid unnecessary placeholder values for optional parameters. You only need to specify the options you want to change. -* **Reduced Errors:** Easier to see and avoid mistakes when specifying function parameters. - -## Example: Creating a Channel with Curl Arguments - -Let's say you want to create a text channel. Using traditional parameters, you might need to include several empty values for optional settings. With curl arguments, it's much simpler: - -```bash -$createChannel[ - {name=channelName} - {type=text} - {topic=channel topic} -] -``` - -This code clearly defines the channel's name, type, and topic without requiring you to specify values for "return ID" or "NSFW" (or leave them blank with `;;;`). - -## Checking for Curl Support - -Not all functions support curl arguments yet. To find out if a specific function supports them, use the `!!func` command: - -``` -!!func function name -``` - -This will provide information about the function, including whether curl arguments are supported. Look for a "Curl Support" or similar indicator in the function documentation. If it's supported, you can start taking advantage of this cleaner, more efficient way to pass options! \ No newline at end of file diff --git a/guide/Other/embedBuilder.md b/guide/Other/embedBuilder.md deleted file mode 100644 index 5e48ff30..00000000 --- a/guide/Other/embedBuilder.md +++ /dev/null @@ -1,34 +0,0 @@ -# Creating Embeds with the Embed Builder - -This guide will walk you through using the Embed Builder within the dashboard to create and send custom embeds to your Discord server. - -## Accessing the Embed Creator - -1. After logging into the dashboard, navigate to the `Embed Creator` tab. - ![](./images/embedBuilder/1.png) - -## Customizing Your Embed - -2. In the `Embed Editor` section, you can define all the details of your embed, such as the title, description, color, fields, author, and more. Experiment with the options to create the perfect embed for your needs! - ![](./images/embedBuilder/2.png) - ![](./images/embedBuilder/embedInfo.png) - -## Selecting a Destination Channel - -3. Once you've configured your embed, choose the channel where you want to send it. Click the channel selection box to reveal a dropdown menu of available channels. - ![](./images/embedBuilder/3.png) - -4. Select the desired channel. In this example, we're using `#general`. **Important:** Ensure the bot has permission to view and send messages, including embeds and images, in the selected channel. This usually requires the "View Channel," "Send Messages," "Embed Links," and "Attach Files" permissions. - ![](./images/embedBuilder/4.png) - -## Sending Your Embed - -5. To send your embed to the selected channel, click the `Send` button. If you wish to discard your changes, click the orange "Cancel" button. - ![](./images/embedBuilder/5.png) - -## Success! - -6. Your embed should now appear in the chosen channel. - ![](./images/embedBuilder/6.png) - -Now you can create visually appealing and informative messages for your Discord server using the Embed Builder! \ No newline at end of file diff --git a/guide/Other/ratelimits.md b/guide/Other/ratelimits.md deleted file mode 100644 index ba08f76f..00000000 --- a/guide/Other/ratelimits.md +++ /dev/null @@ -1,54 +0,0 @@ -# Understanding Discord Rate Limits and Bot Cooldowns - -To ensure fair usage and prevent abuse, Discord implements rate limits on its API. Our bot also uses a cooldown system to manage requests efficiently. This page explains how these limits work and how they might affect your custom commands. - -## What are Cooldowns and Limits? - -Think of cooldowns and limits as restrictions designed to prevent the bot from being overwhelmed or misused. They control how frequently certain actions can be performed. - -* **Cooldown:** A waiting period before a function can be used again with the same inputs (e.g., by the same user, in the same channel, or in the same guild). - -* **Limit:** A maximum number of times a function can be called within a specific context (e.g., within a single custom command). - -## Function Cooldowns - -Many functions have a built-in cooldown period. This means that after using the function, there will be a delay before it can be used again with the same input data. - -**What happens when a function is on cooldown?** - -The bot's behavior depends on the function and its configuration: - -* **Wait and Execute:** The bot waits for the cooldown to expire and then executes the function. -* **Error Message:** The bot sends an error message indicating that the function is on cooldown. -* **Silent Cancellation:** The bot cancels the execution without any warning message. - -::: tip How to Check Function Cooldowns -You can use the command `!!func function name` to check the cooldown period (if any) of a specific function. This will help you understand how long you need to wait before using the function again. -::: - -## Function Limits - -Even with cooldowns in place, a function can only be called a limited number of times within a single custom command. - -**Function Limit:** A function with cooldown can be called a maximum of **5 times** within a single custom command. - -If this limit is reached, the bot will silently cancel the execution of the function. - -## Execution Limits - -These limits control how many custom commands can run simultaneously and how quickly they can be triggered. - -* **Parallel Execution Limit:** The bot supports up to **5 parallel executions** of the same custom command. - -* **Execution Cooldown:** The same custom command can only be triggered **once every 5 seconds**. - -## Premium Benefits (Tier 3/4/5) - -Premium tiers (3, 4, and 5) allow you to run your own dedicated bot instance. This comes with significantly relaxed limitations, as your bot runs in an isolated environment. - -**Removed/Increased Limits for Premium Tiers:** - -* **Function Cooldown:** Removed entirely. -* **Function Limit:** Hard capped to 20 calls per custom command. -* **Execution Limits:** Hard capped to 60 parallel executions. -* **Execution Cooldown:** Hard capped to 0.5 seconds. \ No newline at end of file diff --git a/guide/Other/syntax.md b/guide/Other/syntax.md deleted file mode 100644 index a561df77..00000000 --- a/guide/Other/syntax.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -hidden: true ---- - -# Syntax - -Learning about the syntax used by this bot is necessary to understand how to write commands. - -## Syntax Overview - -The bot's code uses two types: - -1. [Text](#what-is-text) -2. [Function](#what-is-a-function) - -## What is Text - -Anything in the code that isn't a function is considered text. - -### Example - -```php -Hello $username, how are you? -``` - -- `Hello` - Text -- `$username` - Function -- `, how are you?` - Text - -```php -$interactionReply[Hello there] -``` - -- `$interactionReply` - Function -- `Hello there` - Text - -## What is a Function - -A function is a special instruction that begins with a dollar sign (`$`), for example `$username`. -All arguments are kept inside of square brackets (`[HERE]`). -Function names are case insensitive. - -::: info How to execute functions -All functions can be either executed by writing a command in the dashboard, or using the built in `!!exec` command. -::: - -### Example - -Function case insensitivity - -```php -$math[1+1] = $mAtH[1+1] = $MATH[1+1] -``` - - - - !!exec $math[1+1] = $mAtH[1+1] = $MATH[1+1] - - - 2 = 2 = 2 - - - -Function doesn't have to be closed at the same line where it was opened: - -```php -$title[Math question] -$description[What is 2^11? -Click to reveal: ||$math[2^11]||] -``` - - - - !!exec $title[Math question]
- $description[What is 2^11?
- Click to reveal: ||$math[2^11]||] -
- - - What is 2^11?
- Click to reveal: 2048 -
-
-
- -## Function Actions - -Functions performs one of these three actions: - -- **Replace with a value:** The function is replaced by a specific value. -- **Perform an action:** The function executes a task. -- **Both:** The function executes a task and then is replaced by a specific value. - -## Multiple Arguments - -Some functions require multiple arguments. Arguments can also be required or optional. - -```php -$msg[Channel ID;Message ID;Option;Additional 1;Additional 2] -``` - -- - ID of channel you want to retrieve information from. -- - ID of the message you want to retrieve information from. -- - What kind of information you want to retrieve. -- - Additional argument. Some options need these to work properly. -- - Additional argument. Some options need these to work properly. - -### Example - -Example of using `$msg` with multiple arguments - - - - !!exec Message content: $msg[$channelID;$messageID;content] - - - Message content: !!exec Message content: $msg[$channelID;$messageID;content] - - diff --git a/guide/Other/troubleshooting.md b/guide/Other/troubleshooting.md deleted file mode 100644 index 38af7254..00000000 --- a/guide/Other/troubleshooting.md +++ /dev/null @@ -1,34 +0,0 @@ -# Troubleshooting - -Our bot's advanced features mean users may encounter unique issues. This section addresses common problems, ordered from most frequent to less frequent. - -Each problem is presented as a question, followed by troubleshooting steps and the trigger type. - -## My command doesn't trigger - -**Possible Causes:** - -* **Incorrect Permission Level:** Have you set the minimum permission level for the command execution to `None`? - - * **No:** Change the permission level to `None`, save the changes, and try again. - - * **Yes:** Continue to the next possible cause. - -* **Special Characters in Trigger:** Does your command trigger contain any [special characters](../CodeReferences/specialCharacters)? Special characters can sometimes interfere with trigger recognition. - -## The bot failed to assign a role - -**Troubleshooting Steps:** - -1. **Insufficient Bot Permissions:** Ensure the bot has sufficient permissions to assign roles. Granting the bot Administrator permissions is the easiest way to resolve permission issues. - -2. **Role Hierarchy:** The bot's role (@Custom Command) must be higher in the server's role hierarchy than: - * The role the bot is trying to assign. - * All roles the member already has. - - You can adjust the role hierarchy in your Discord server settings. - - -**Still having trouble?** - -If these steps don't resolve the issue, please reach out to our staff on the [support server](https://ccommandsbot.com/join) for personalized assistance. \ No newline at end of file diff --git a/guide/Other/useful.md b/guide/Other/useful.md deleted file mode 100644 index 0703d9c7..00000000 --- a/guide/Other/useful.md +++ /dev/null @@ -1,59 +0,0 @@ -# Useful Information - -This page provides helpful information about the bot and this documentation itself. Let's get you started! - -## Understanding the Docs - -### Function Parameters Explained - -::: tip What are Parameters? - -Parameters are values that a function needs to operate correctly. Think of them as ingredients for a recipe. Let's look at the function `$giveRoles[userid;roleid]` as an example. - -* **Parameter 1: `userid`** - This is the unique ID of the user you want to give the role to. You can get this ID using the `$authorID` function, which returns the ID of the command executor. - -* **Parameter 2: `roleid`** - This is the ID of the role you want to give. You can copy the role ID directly from Discord or use the `$roleID[rolename]` function to get the ID by the role's name. -::: - -#### Parameter Examples - -* **Multiple Parameters:** `$giveRoles[authorid;roleid1;roleid2;...]` - - * The `...` indicates that the function can accept multiple parameters of the same type (in this case, `roleid`). Each parameter is separated by a semicolon (`;`). - -* **Optional Parameters:** `$random[min;max;allowDecimals (yes/no)(optional, default=no)]` - - * `(optional)` means that the parameter is not required. - * `default=no` indicates the default value for the optional parameter. If you don't provide a value, the function will assume the default value (`no` in this case). - * You can simply omit the optional parameter if you want to use the default. - -### How Functions Work - -## Functions - -A function is a fundamental building block of your code. It performs a specific action. For example, to send a message to a channel, you might use the ``$channelSendMessage`` or ``$sendMessage`` function. To kick a member, you'd use ``$kick``. - -### Taking the Next Step: Triggers - -## Triggers - -Now that you understand the basic components, you need to choose a trigger. A trigger defines what action causes your code to run. - -| Trigger Type | Description | -| :------------------------------------------- | :------------------------------------------------------------------------------------------------------ | -| [Word](../Trigger/word.md) | Executes when a user sends a message containing a specific word or phrase. | -| [On Join/Leave](../Trigger/joinorleave.md) | Executes when a user joins or leaves your server. | -| [On Reaction](../Trigger/reaction.md) | Executes when a user reacts to a message. | -| [Voice](../Trigger/voicecondecon.md) | Executes when a user connects to or disconnects from a voice channel. | -| [Timed or Interval](../Trigger/time.md) | Executes repeatedly at a set interval or at a specific time. | -| [Button](../Trigger/button.md) | Executes when a user clicks a Discord button. | -| [Role add/remove](../Trigger/roleaddremove.md) | Executes when a user receives or loses a role. | -| [On Upvote](../Trigger/upvote.md) | Executes when someone upvote in Top.gg. | -| [User Command (Context Menu)](../Trigger/app_cmd_user.md) | Executes when someone select user command on the user. | -| [Message Command (Context Menu)](../Trigger/app_cmd_message.md) | Executes when someone select message command on the selected message. | - -| [Library](../Trigger/library.md) | Create A library | - -### Congratulations! Ready to Create? - -Now that you grasp the basics, let's create your first command! Head over to [this page](../Guide/1.create.md). \ No newline at end of file diff --git a/guide/Other/welcomer.md b/guide/Other/welcomer.md deleted file mode 100644 index 690ef380..00000000 --- a/guide/Other/welcomer.md +++ /dev/null @@ -1,45 +0,0 @@ -# Setting Up Welcomer - -Welcome to the Welcomer setup guide! This feature allows you to automatically send a custom message when a new member joins your server or when a member leaves. Let's walk through the process step-by-step. - -1. **Access the Welcomer Tab:** - - First, navigate to the dashboard and click on the `welcomer` tab. This will bring you to the Welcomer settings page. - - ![](./images/welcomer/1.png) - -2. **Configure Member Join/Leave Settings:** - - Within the Welcomer tab, you'll find a section labeled `Member Join/Leave`. This is where you customize the messages for when members join or leave your server. Set your desired custom details in this section, such as the welcome message, member goodbye message, and image. - - ![](./images/welcomer/2.png) - -3. **Select a Channel:** - - Next, you need to specify the channel where the welcome and leave messages will be sent. Click on the channel selection box. A dropdown menu will appear, displaying the available channels. - - ![](./images/welcomer/3.png) - -4. **Choose Your Channel:** - - Select the channel you want the messages to be sent to. In this example, `#general` is selected. You can choose any channel that your bot can *see* and has the necessary permissions to *send messages*. - - **Important:** Ensure the bot has the "Embed Links" and "Attach Files" permissions in the selected channel. This is crucial for the bot to be able to send rich embedded messages and images without any issues. - - ![](./images/welcomer/4.png) - -5. **Save or Deactivate:** - - * **Save:** Once you've configured your settings and chosen a channel, click the `Save` button to save your changes. Your Welcomer feature is now active! - - * **Deactivate:** If you want to temporarily disable the Welcomer, simply click the red "Deactivate" button. - - ![](./images/welcomer/5.png) - -6. **Example Outcome:** - - After saving, your Welcomer configuration should look similar to this, reflecting the channel and custom settings you've chosen: - - ![](./images/welcomer/6.png) - -That's it! You've successfully configured the Welcomer feature. New members joining or members leaving will now receive your personalized messages in the specified channel. Remember to adjust the settings as needed to keep your community welcoming and engaged. \ No newline at end of file diff --git a/guide/README.md b/guide/README.md deleted file mode 100644 index b52b46cf..00000000 --- a/guide/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Getting Started - -::: warning Before you start -It is highly recommended not to skip this guide, or to read only parts of it. -::: - -## What is Custom Command Bot? - -Same as it sounds - Custom Command (CC) is a bot that allows you to create fully customizable commands. -It is a perfect tool for both experienced developers and complete beginners looking for a quick and easy command system. - -## Examples - -![Word Trigger](/images/guide/get-started/get-started-word.png) -![Slash Command](/images/guide/get-started/get-started-slash-cmd.png) -![Join Event Trigger](/images/guide/get-started/get-started-join-event.png) - -## Do I have to know coding? - -No, you don't need any previous coding experience. CC uses an easy-to-learn pseudo-language that has been designed specifically for easy Discord bot development. - -## Inviting Custom Command - -1. Invite the bot using this [link](https://ccommandbot.com/add) -2. Log in to the [dashboard](https://ccommandbot.com/dashboard) -3. Choose your server and start building! diff --git a/guide/Random/random.md b/guide/Random/random.md deleted file mode 100644 index c1a20153..00000000 --- a/guide/Random/random.md +++ /dev/null @@ -1,45 +0,0 @@ -# $random - -This function returns a random number within a specified range. - -#### Usage: - -`$random[min;max;allowDecimals (yes/no)(optional, default=no)]` - -* **min:** The minimum value of the range (inclusive). -* **max:** The maximum value of the range. The behavior of this value depends on whether decimals are allowed: - * **If `allowDecimals` is `no` (or omitted):** `max` is *inclusive*. The random number will be between `min` and `max`, *including* `max`. - * **If `allowDecimals` is `yes`:** `max` is *exclusive*. The random number will be between `min` and `max`, *not including* `max`. -* **allowDecimals:** An optional parameter specifying whether the random number can be a decimal. Defaults to `no` (integers only). Acceptable values are `yes` or `no`. - -## Important Notes: - -* Remember that `max` is treated differently depending on whether `allowDecimals` is set to `yes` or `no`. - -
- -**Example:** - -```discord -!!exec $random[1;6] -``` - -This command will return a random integer between 1 and 6 (inclusive). Possible outputs: 1, 2, 3, 4, 5, or 6. - - - - !!exec `$random[1;6]` - - - 4 - - - -**More Examples:** - -* `$random[0;1;yes]` - Returns a random decimal number between 0 (inclusive) and 1 (exclusive), such as `0.345`. -* `$random[5;10]` - Returns a random integer between 5 and 10 (inclusive). -* `$random[-10;10;yes]` - Returns a random decimal number between -10 (inclusive) and 10 (exclusive). - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomChannelID.md b/guide/Random/randomChannelID.md deleted file mode 100644 index 640575f1..00000000 --- a/guide/Random/randomChannelID.md +++ /dev/null @@ -1,27 +0,0 @@ -# $randomChannelID - -This function returns a random Channel ID from any channel within the server. - -#### Usage: - -Simply use `$randomChannelID` in your command or custom function. - -
- -**Example:** - -```discord -!!exec $randomChannelID -``` - -**Result:** - -```discord -37907890789087988 -``` - -This will output a random channel ID from the server where the command is executed. The actual ID returned will, of course, be different each time. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomMention.md b/guide/Random/randomMention.md deleted file mode 100644 index 2667183b..00000000 --- a/guide/Random/randomMention.md +++ /dev/null @@ -1,31 +0,0 @@ -# $randomMention - -Returns a random mention from the current server. This function is useful for things like raffles, giveaways, or randomly selecting a user. - -#### Usage: - -```php -$randomMention -``` - -
- -**Example:** - -This example shows how to use `$randomMention` to mention a random user in a command. - - - - !!exec $randomMention - - - @Lisa - - - -::: danger Warning -The mentions returned by this function are pulled from the server's cached member list. This means that if all members haven't been cached yet (common in larger servers, especially those below "Tier 5" boosting), it may not include *every* member in the server. For best results, ensure your bot has access to all members. -::: - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomRoleID.md b/guide/Random/randomRoleID.md deleted file mode 100644 index a2124f73..00000000 --- a/guide/Random/randomRoleID.md +++ /dev/null @@ -1,30 +0,0 @@ -# $randomRoleID - -This function returns a random Role ID from a Role present in the server. It's a simple way to pick a random role ID for various purposes in your custom commands. - -#### Usage: - -```php -$randomRoleID -``` - -
- -**Example:** - -Here's how you can use `$randomRoleID` in a custom command: - - - - !!exec $randomRoleID - - - 82907890789087988 - - - -In this example, the command `!!exec $randomRoleID` will output a random role ID from your server (e.g., `82907890789087988`). - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomString.md b/guide/Random/randomString.md deleted file mode 100644 index 5eb8f85f..00000000 --- a/guide/Random/randomString.md +++ /dev/null @@ -1,29 +0,0 @@ -# $randomString - -Generates a random string of a specified length. This function is useful for creating unique identifiers, temporary passwords, or simply adding randomness to your commands. - -#### Usage: - -`$randomString[length]` - -* `length`: (Required) The desired length of the random string. This should be a positive integer. - -
- -#### Example: - -This example demonstrates how to use `$randomString` to generate a 6-character random string. - - - - !!exec `$randomString[6]` - - - qe90bT - - - -In this example, the command `!!exec $randomString[6]` will generate a random string of 6 characters, such as `qe90bT`. The output will vary each time the command is executed. - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomText.md b/guide/Random/randomText.md deleted file mode 100644 index 4613e437..00000000 --- a/guide/Random/randomText.md +++ /dev/null @@ -1,38 +0,0 @@ -# $randomText - -Returns a random text from a list of provided texts. This function is useful for creating variety in your bot's responses. - -#### Usage: - -`$randomText[text1;text2;text3;...]` - -* **text1;text2;text3;...**: A semicolon-separated list of texts. The function will randomly choose one of these texts to return. - -
- -**Example:** - -```php -$randomText[Hello;Hi;Hey] -``` - -This example will randomly return either "Hello", "Hi", or "Hey". - -
- - - - !!exec `$randomText[I'm sad;I'm very happy]` - - - I'm very happy - - - -**Explanation:** - -In this example, the command `!!exec $randomText[I'm sad;I'm very happy]` instructs the bot to execute the `$randomText` function with the options "I'm sad" and "I'm very happy". The bot randomly selects one of these options and returns it, in this case, "I'm very happy". - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Random/randomTextBiased.md b/guide/Random/randomTextBiased.md deleted file mode 100644 index ae03fc30..00000000 --- a/guide/Random/randomTextBiased.md +++ /dev/null @@ -1,66 +0,0 @@ -# $randomTextBiased - -Similar to `$randomText`, but with weighted randomness! This allows you to influence the probability of specific text being selected. - -## Usage - -```bash -$randomTextBiased[Text1,Weight1;Text2,Weight2;Text3,Weight3] -``` - -**Explanation:** - -* `Text1`, `Text2`, `Text3`: The text options you want to randomly select from. -* `Weight1`, `Weight2`, `Weight3`: Numerical values representing the weight or probability associated with each corresponding text option. **Higher weight = Higher chance of selection.** - -**Important:** - -* Separate each `Text,Weight` pair with a semicolon (`;`). -* Weights don't need to add up to 100; they are relative to each other. - -### Note: - -The higher the weight a text option has, the more likely it is to be selected. For example, an item with a weight of 80 is much more likely to be chosen than an item with a weight of 2. - -### Example: Reward Box with Varying Rarities - -This example demonstrates a reward box system where the rarity of the reward is weighted. - -**Command:** - -``` -!!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box -``` - -**Explanation:** - -* `Common` has a weight of `80`, making it the most likely outcome. -* `Rare` has a weight of `10`. -* `Epic` has a weight of `8`. -* `Platinum` has a weight of `2`, making it the least likely outcome. - -**Possible Outcomes:** - -Here are a couple of example scenarios demonstrating the range of possibilities: - -**Example (Unlucky guy):** - - - - !!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box

-
- - Your reward is: Common Box

-
-
- -**Example (Lucky guy):** - - - - !!exec Your reward is: $randomTextBiased[Common,80;Rare,10;Epic,8;Platinum,2] Box

-
- - Your reward is: Epic Box - -
\ No newline at end of file diff --git a/guide/Random/randomUserID.md b/guide/Random/randomUserID.md deleted file mode 100644 index 8dc95205..00000000 --- a/guide/Random/randomUserID.md +++ /dev/null @@ -1,28 +0,0 @@ -# $randomUserID - -Retrieves a random user ID from a user within the server. - -#### Usage: - -```php -$randomUserID -``` - -
- - - - !!exec $randomUserID - - - 97907890789087988 - - - -::: danger Important -The user ID is selected randomly from the server's cached members. This means the returned user ID might not always represent a currently active member, especially if all guild members are not cached (typically only guaranteed in higher server tiers). -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Random/resetRandom.md b/guide/Random/resetRandom.md deleted file mode 100644 index 0a069483..00000000 --- a/guide/Random/resetRandom.md +++ /dev/null @@ -1,36 +0,0 @@ -# $resetRandom - -The `$resetRandom` function clears the stored seed used by the `$random` function, effectively resetting the random number generator. This means that subsequent calls to `$random` will generate a new sequence of random numbers, potentially different from the previous sequence before the reset. This is useful when you want to ensure a fresh set of random numbers. - -### Usage: `$resetRandom` - -**Explanation:** - -When you use `$random` multiple times without resetting, it might produce the same number due to how it's seeded. `$resetRandom` ensures each subsequent `$random` call behaves truly randomly by clearing that internal seed. - -**Example:** - -```html - - - !!exec Number:$random[1;6] - Number:$random[1;6] - $resetRandom after reset - $random[1;6] - - - Number:5 - Number:5 - after reset - 1 - - -``` - -**Breakdown of the Example:** - -1. `Number:$random[1;6]` is called twice *before* the reset. In this example, the same number `5` is generated for both calls. *Note: The actual number generated here is random and will vary.* -2. `$resetRandom after reset` resets the random seed. The text "after reset" is just literal text included for explanation. -3. `$random[1;6]` is called again *after* the reset. It now generates a new, potentially different random number (in this example, it's `1`). - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Request/httpRequest.md b/guide/Request/httpRequest.md deleted file mode 100644 index 877cedbb..00000000 --- a/guide/Request/httpRequest.md +++ /dev/null @@ -1,86 +0,0 @@ -# $httpRequest - -Performs an HTTP request with the specified content and headers, then returns the response body. - -## Usage - -```bash -$httpRequest[URL;Method;Content;Header 1;Header 2;...] -``` - -## Parameters - -### Method - -Supported HTTP methods: - -* `GET` -* `POST` -* `PUT` -* `PATCH` -* `DELETE` -* `HEAD` - -If no method is provided, `GET` is used by default. - -### Content - -The request body to send. - -The format of the content should match the `Content-Type` header. For example, if you specify: - -```text -Content-Type: application/json -``` - -the content should be valid JSON. - -### Headers - -Headers should be provided in the following format: - -```text -Header-Name: Value -``` - -For example: - -```text -Content-Type: application/json -``` - -You can provide as many headers as needed. - -## Timeout - -Requests automatically timeout after **1 minute**. - -For **Tier 4 and above**, the timeout is extended to **30 minutes**. - -## Example - -### Sending a JSON request - - - - !!exec $let[response;$httpRequest[My API URL;post;{"name":"Mido"};Content-Type: application/json]]
Response is $response
Response Status is $httpRequestStatus

-
- - Response is {"success":true}
Response Status is 200

-
-
- -## Notes - -* This function **does not throw an error** when the server returns a non-success status code (such as `404` or `500`). Always check `$httpRequestStatus` to verify that the request completed successfully. -* The response body must be **smaller than 1 MB**. Requests that exceed this limit will be rejected. -* The destination URL must be **whitelisted** before it can be used. If the URL has not yet been approved, please open a ticket in our Support Server to request whitelisting. - -## Related Functions - -* `$httpRequestStatus` -* `$httpRequestHeader` - -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Request/httpRequestHeader.md b/guide/Request/httpRequestHeader.md deleted file mode 100644 index d684df25..00000000 --- a/guide/Request/httpRequestHeader.md +++ /dev/null @@ -1,32 +0,0 @@ -# $httpRequestHeader - -Returns the value of a given header from the last request. - -## Usage - -```bash -$httpRequestHeader[header name] -``` -1. **header name** - The header name to return value from. (case-insensitive) - -## Example - -#### Using $httpRequestHeader - -How to return Content-Type from last request - - - - !!exec $httpRequest[https://api.example.com/]
- Content-Type Header: $httpRequestHeader[content-type] -
- - {"message": "Api response!"}
- Content-Type Header: application/json -
-
- -##### Related functions: `$httpRequest` `$httpRequestStatus` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Request/httpRequestStatus.md b/guide/Request/httpRequestStatus.md deleted file mode 100644 index c3e88a8f..00000000 --- a/guide/Request/httpRequestStatus.md +++ /dev/null @@ -1,31 +0,0 @@ -# $httpRequestStatus - -Returns the $httpRequest status code of the last request. - -## Usage - -```bash -$httpRequestStatus -``` - -## Example - -#### Using $httpRequestStatus - -How to use $httpRequestStatus to display status code of request - - - - !!exec $httpRequest[https://api.example.com/]
- Code: $httpRequestStatus -
- - Api response!
- Code: 200 -
-
- -##### Related functions: `$httpRequest` `$httpRequestHeader` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/blackListRoleIDs.md b/guide/Role/blackListRoleIDs.md deleted file mode 100644 index 4b731acb..00000000 --- a/guide/Role/blackListRoleIDs.md +++ /dev/null @@ -1,42 +0,0 @@ -# $blackListRoleIds - -This function prevents users with specific roles from using a command. You specify the role IDs and an error message to display when someone with a blacklisted role tries to execute the command. - -#### Usage: `$blackListRoleIDs[roleID;roleID;...;error message]` - -* **roleID:** The ID of the role you want to blacklist. Separate multiple role IDs with a semicolon (;). -* **error message:** The message the bot will send if a user with a blacklisted role tries to use the command. - -
- -**Example:** - -Let's say you have a command `!ban` and you want to prevent users with a specific role from using it. - -```bash -$blackListRoleIds[9872xx..;You are not authorized to use this command!] -$ban[$mentioned[1]] -Successfully banned user. -``` - -**Explanation:** - -* `$blackListRoleIds[9872xx..;You are not authorized to use this command!]`: This line checks if the user executing the command has the role with the ID `9872xx..`. If they do, the bot will reply with "You are not authorized to use this command!". -* `$ban[$mentioned[1]]`: This line executes the ban command, banning the mentioned user. It only executes if the user does *not* have a blacklisted role. -* `Successfully banned user.`: This line sends a confirmation message after a successful ban. - - - - !ban @RAKE - - - You are not authorized to use this command! - - - -::: tip Note -You can send an embed instead of a simple text message by using the [Message Curl Format](../CodeReferences/ref.message_curl_format.md) in your error message. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/colorRole.md b/guide/Role/colorRole.md deleted file mode 100644 index 2a03da78..00000000 --- a/guide/Role/colorRole.md +++ /dev/null @@ -1,17 +0,0 @@ -# $colorRole -Changes the color of given role ID - -#### Usage: `$colorRole[Role ID;Primary Color (i.e hex or int);Second Color (optional);Third Color (optional)]` - -### Example (Primary Color) -```php -$colorRole[Role name;green] -``` - -### Example (Gradient) -```php -$colorRole[Role name;green;red] -``` - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/createRole.md b/guide/Role/createRole.md deleted file mode 100644 index 8b0a2345..00000000 --- a/guide/Role/createRole.md +++ /dev/null @@ -1,33 +0,0 @@ -# $createRole -Creates a role in the server - -#### Usage: -`$createRole[name;color (optional);mentionable (optional);hoisted (optional);position (optional);permission;permission;...;return role id (yes/no, default no, optional)]` - -#### Parameters: -* **name:** The name of the role to create. -* **color (optional):** The color of the role in hexadecimal format (e.g., `#ffa500` for orange). -* **mentionable (optional):** Whether the role can be mentioned (true/false). Defaults to `false`. -* **hoisted (optional):** Whether the role is displayed separately in the member list (true/false). Defaults to `false`. -* **position (optional):** The position of the role in the role hierarchy. Lower numbers appear higher in the list. -* **permission;permission;...:** A list of permissions to grant to the role. Refer to the [Permission List](../CodeReferences/ref.permissions_list.md) for valid permission names. -* **return role id (yes/no, optional):** Specifies whether to return the ID of the newly created role. Defaults to `no`. If set to `yes`, the function will return the role ID. - -#### Example: -`$createRole[Orange;#ffa500]` -This will create a role with the name "Orange" and the color orange. - -`$createRole[Moderator;#00ff00;true;true;;managemessages;kick;yes]` -This will create a role named "Moderator" with a green color, set as mentionable and hoisted and give it the manage messages and kick user permission. The ID of the created role is returned by the function. - -::: tip Available Permissions -For a comprehensive list of available permissions, please see the [Permission List](../CodeReferences/ref.permissions_list.md). -::: - -::: tip Related Functions - -`$createChannel`, creates a channel -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/deleteRoles.md b/guide/Role/deleteRoles.md deleted file mode 100644 index e0dedcaa..00000000 --- a/guide/Role/deleteRoles.md +++ /dev/null @@ -1,34 +0,0 @@ -# $deleteRoles - -Deletes one or more roles from the server. - -#### Usage: - -`$deleteRoles[roleID1;roleID2;roleID3;...]` - -**Parameters:** - -* `roleID1;roleID2;roleID3;...`: A semicolon-separated list of role IDs to delete. You can specify multiple role IDs to delete several roles at once. - -#### Example: - -`$deleteRoles[879889890890890]` - -This will delete the role with the ID `879889890890890`. - -**Example with multiple roles:** - -`$deleteRoles[879889890890890;987654321098765]` - -This will delete the role with the ID `879889890890890` and the role with the ID `987654321098765`. - -::: tip Related Functions - -* `$deleteChannels`: Deletes one or more channels. -* `$deleteThreads`: Deletes one or more threads. - -::: - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/findRole.md b/guide/Role/findRole.md deleted file mode 100644 index 21df3229..00000000 --- a/guide/Role/findRole.md +++ /dev/null @@ -1,49 +0,0 @@ -# $findRole - -Searches for a role by its ID, mention, or name. This function allows you to retrieve a role's ID based on the provided search query. - -#### Usage: - -`$findRole[ID/mention/name;return current channelID, (yes/no) (Optional, default=yes)]` - -**Parameters:** - -* **`ID/mention/name`**: The ID, mention, or name of the role you want to find. -* **`return current channelID, (yes/no)`** (Optional): Determines whether to return the current channel's ID if the role is found. - * `yes` (Default): Returns the current channel ID along with the role ID (e.g., `869243919697846379,123456789012345678` where the first number is the Role ID and the second one is the Channel ID). - * `no`: Returns only the role ID. - -**Example:** - -Finding a role named "Mika#6359" and not returning the current channel ID: - -
- - - !!exec $findRole[Mika#6359;no] - - - 869243919697846379 - - - -**Example (Role Not Found):** - -If the role is not found, the function will return `undefined`. - -
- - - !!exec $findRole[mika#6359;no] - - - undefined - - - -::: tip Related Functions -* `$roleID`: Returns the role ID based on the role's name. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/getRoleColor.md b/guide/Role/getRoleColor.md deleted file mode 100644 index 11e0102f..00000000 --- a/guide/Role/getRoleColor.md +++ /dev/null @@ -1,27 +0,0 @@ -# $getRoleColor - -Retrieves the hexadecimal color code of a role. - -#### Usage: `$getRoleColor[roleID]` - -**Arguments:** - -* `roleID`: The ID of the role whose color you want to retrieve. This can be obtained using functions like `$mentioned[1]` or `$findRole[roleName]`. - -
- -**Example:** - -Let's say you want to get the color of the role with the ID `123456789012345678`. You would use: - -```php -$getRoleColor[123456789012345678] -``` - -This would return the hex color code of the role, such as `#FF0000` (red). - -
- -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Role/giveRoles.md b/guide/Role/giveRoles.md deleted file mode 100644 index f70223da..00000000 --- a/guide/Role/giveRoles.md +++ /dev/null @@ -1,37 +0,0 @@ -# $giveRoles - -Grants one or more roles to a specified user. - -#### Usage: - -`$giveRoles[userID;roleID 1;roleID 2;roleID 3;...]` - -* **userID:** The ID of the user you want to give roles to. -* **roleID 1;roleID 2;roleID 3;...:** A semicolon-separated list of role IDs to grant to the user. - -
- -**Example:** - -This example grants the "Muted" role to the command executor. - - - - !!exec $giveRoles[$authorID;$roleID[Muted]] - - - -::: tip Useful Functions -* ``$roleID``: Retrieves a role's ID based on its name. -* ``$authorID``: Returns the ID of the command executor (the user who ran the command). -::: - -::: tip Related Functions -* ``$toggleRoles``: Toggles a user's roles (adds if they don't have it, removes if they do). -* ``$takeRoles``: Removes roles from a user. -* ``$setRoles``: Removes all roles from a user and then grants only the specified roles. -::: - -##### Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/guildRoles.md b/guide/Role/guildRoles.md deleted file mode 100644 index 76013c98..00000000 --- a/guide/Role/guildRoles.md +++ /dev/null @@ -1,40 +0,0 @@ -# $guildRoles - -Returns a list of all roles in the guild, displaying their names, IDs, or mentions. - -You can specify the type of information you want (ID, name, or mention) and limit the number of roles returned. - -#### Usage: - -`$guildRoles[type;amount;separator]` - -**Parameters:** - -* `type` (Optional): Determines what information to return for each role. Possible values are: - * `id`: Returns the role's ID. - * `name`: Returns the role's name. (Default) - * `mention`: Returns the role's mention. -* `amount` (Optional): The maximum number of roles to return. If omitted, all roles will be returned. -* `separator` (Optional): The separator between the returned list, default is ', ' - -
- -**Example:** - -This example shows how to retrieve the IDs of all roles in the guild. - - - - !!exec $guildRoles[id] - - - 869243918787686431, 869243918817058856, 869243918489878654, 869250889813213244, 871289098231513098, 869251802556678154, 869243918489878650, 878284024232165407, 869249016213422150, 869250128136003614, 869243918787686434, 869248264426356736, 869243918787686436, 869243918489878657, 869243918489878653, 869250129272651787, 869250127347453992, 869250888106115092, 869243918787686430, 869243918787686432, 869243918817058857, 869249218169147422, 869243918489878652, 869244293959794720, 869250129901813820 - - - -::: tip Related Functions -* `$roleID`: Retrieves a role ID by its name. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/hasRole.md b/guide/Role/hasRole.md deleted file mode 100644 index 2db1ecf2..00000000 --- a/guide/Role/hasRole.md +++ /dev/null @@ -1,29 +0,0 @@ -# $hasRole - -Determines if a user possesses a specific role within the server. Returns `true` if the user has the role, and `false` otherwise. - -#### Usage: `$hasRole[userID;roleID]` - -* **userID:** The ID of the user you want to check. You can use `$authorID` to check the message author. -* **roleID:** The ID of the role you want to check for. - -
- -**Example:** - -Checks if the message author has the role with the ID `99871..xx`. - - - - !!exec $hasRole[$authorid;99871..xx] - - - false - - - -
- -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/highestRole.md b/guide/Role/highestRole.md deleted file mode 100644 index 700803c1..00000000 --- a/guide/Role/highestRole.md +++ /dev/null @@ -1,40 +0,0 @@ -# $highestRole - -Retrieves the highest role (in terms of hierarchy) a user has in the current guild. - -#### Usage: - -`$highestRole[userID]` - Returns the highest role of the user with the specified `userID`. - -`$highestRole` - Returns the highest role of the command executor (the user who triggered the command). - -
- -**Example:** - -This example shows how to use `$highestRole` with `$roleName` to output the role's name. - -```discord -!!exec $roleName[$highestRole] -``` - -**Result:** - -(Assuming the user's highest role is "Admin") - -```discord -Admin -``` - - - - !!exec $roleName[$highestRole] - - - Admin - - - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/highestServerRole.md b/guide/Role/highestServerRole.md deleted file mode 100644 index 35d0b0f7..00000000 --- a/guide/Role/highestServerRole.md +++ /dev/null @@ -1,12 +0,0 @@ -# $highestServerRole - -Retrieves the ID of the server's highest role. This is the role with the highest position in the server's role hierarchy. - -#### Usage: `$highestServerRole` - -This function is very simple to use and requires no arguments. It will simply return the ID of the highest role on the server where the command is executed. - -
- -##### Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/lowestRole.md b/guide/Role/lowestRole.md deleted file mode 100644 index f2129695..00000000 --- a/guide/Role/lowestRole.md +++ /dev/null @@ -1,36 +0,0 @@ -# $lowestRole - -Returns the user's lowest role in the current guild. You can specify a user ID, or if omitted, it will use the command executor (the user who ran the command). "Lowest" refers to the role with the lowest position in the server's role hierarchy (typically, the role created first). - -#### Usage: - -* `$lowestRole[userID]` - Returns the lowest role for the user with the specified `userID`. -* `$lowestRole` - Returns the lowest role for the user who executed the command. - -
- -**Example:** - -This example retrieves the role ID of the user's lowest role and displays it. - -```discord -!!exec $roleName[$lowestRole] -``` - -**Explanation:** - -* `!!exec` is used to execute a custom command. -* `$lowestRole` retrieves the lowest role of the command executor. -* `$roleName` retrieves the ID of the role obtained from `$lowestRole`. - -**Discord Output:** - -```discord -Member -``` - -(The bot will output the role ID of the user's lowest role. This example only provides a placeholder "Member".) - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/lowestServerRole.md b/guide/Role/lowestServerRole.md deleted file mode 100644 index 1bf36ac4..00000000 --- a/guide/Role/lowestServerRole.md +++ /dev/null @@ -1,11 +0,0 @@ -# $lowestServerRole - -Retrieves the ID of the server's lowest role (the role with the highest position in the role hierarchy). - -#### Usage: `$lowestServerRole` - -This function returns the ID of the role that's at the bottom of your server's role list. Think of it as the highest role in terms of permissions and precedence. - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/mentionRole.md b/guide/Role/mentionRole.md deleted file mode 100644 index 2ffb1e6a..00000000 --- a/guide/Role/mentionRole.md +++ /dev/null @@ -1,21 +0,0 @@ -# $mentionRole - -mention a role by name or id - -## Usage - -```bash -$mentionRole[Name/ID] -``` - -### Example: -```bash -$mentionRole[Member] - - -``` - -### Example: -```bash -$mentionRole[1234567898765431] -``` \ No newline at end of file diff --git a/guide/Role/modifyRole.md b/guide/Role/modifyRole.md deleted file mode 100644 index fe3207db..00000000 --- a/guide/Role/modifyRole.md +++ /dev/null @@ -1,62 +0,0 @@ -# $modifyRole - -Modifies the properties of a role, such as its name, color, mentionability, hoisted status, and position. - -#### Usage: - -`$modifyRole[roleID;name (optional);color (optional);mentionable (yes/no, optional);hoisted (yes/no, optional);position (optional)]` - -#### Parameters: - -* `roleID`: The ID of the role you want to modify. -* `name` (Optional): The new name for the role. If omitted, the role's name will remain unchanged. -* `color` (Optional): The new hexadecimal color code for the role (e.g., `#666666`). If omitted, the role's color will remain unchanged. -* `mentionable` (Optional): Whether the role can be mentioned. Use `yes` to make it mentionable and `no` to prevent it from being mentioned. If omitted, the role's mentionability will remain unchanged. -* `hoisted` (Optional): Whether the role should be displayed separately in the member list. Use `yes` to hoist the role and `no` to prevent it from being hoisted. If omitted, the role's hoisted status will remain unchanged. -* `position` (Optional): The new position of the role in the role hierarchy (an integer). If omitted, the role's position will remain unchanged. Lower numbers are higher in the hierarchy. Use with caution. - -#### Example: - -`$modifyRole[$roleID[moderators];New Moderator Name;#666666;yes;yes;1]` - -This example will: - -* Find the role named "moderators" using `$roleID[moderators]`. -* Change the role's name to "New Moderator Name". -* Set the role's color to `#666666` (a gray color). -* Make the role mentionable. -* Hoist the role. -* Set the role's position to 1 (highest position). - -**Example Without All Parameters:** - -`$modifyRole[$roleID[moderators];;;#666666;yes;yes]` - -This example will: - -* Find the role named "moderators" using `$roleID[moderators]`. -* Set the role's color to `#666666` (a gray color). -* Make the role mentionable. -* Hoist the role. -* Leave the name and position as they are. - -::: tip Important Notes - -* You can omit parameters by leaving them blank (e.g., `;;` to skip the name and color). -* Use caution when modifying role positions, as incorrect positions can affect permissions. -* The color parameter must be a valid hexadecimal color code. -::: - -::: tip Used Functions - -* `$roleID`D by its name. -::: - -::: tip Related Functions - -* `$editChannel`: Modifies the name or category of a channel. -* `$modifyRolePerms`: Modifies the permissions of a role. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/modifyRolePerms.md b/guide/Role/modifyRolePerms.md deleted file mode 100644 index 8b2ba3b1..00000000 --- a/guide/Role/modifyRolePerms.md +++ /dev/null @@ -1,45 +0,0 @@ -# $modifyRolePerms - -Modifies the permissions of a specified role. - -#### Usage: - -`$modifyRolePerms[roleID;+perm1;-perm2;/perm3;+perm4;...]` - -#### Parameters: - -* **`roleID`:** The ID of the role to modify. -* **`+perm1;-perm2;/perm3;+perm4;...`:** A semicolon-separated list of permission modifications. - - * Use `+` to **grant** a permission. - * Use `-` to **deny** a permission. - * Use `/` to **reset** a permission to its default value. - -#### Example: - -`$modifyRolePerms[$roleID[muted];-sendmessages;]` - -This example modifies the permissions of the role named "muted" so that members with this role will not be able to send messages in the server. - -::: tip Permissions List -Refer to this [list](../CodeReferences/ref.permissions_list.md) for a complete overview of available permission names. -::: - -::: tip Helpful Functions -* **`$roleID`:** Returns a role ID based on its name. -::: - -::: tip Related Functions -* **`$modifyChannelPerms`:** Modifies the permissions of a channel. -* **`$modifyRole`:** Edits a role's name or color. -::: - -::: tip Important Notes -* Use a `+` sign to grant a specific permission. -* Use a `-` sign to deny a specific permission. -* Use a `/` sign to reset a permission to its default state (neither granted nor denied). -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/modifyUserRoles.md b/guide/Role/modifyUserRoles.md deleted file mode 100644 index 091587f5..00000000 --- a/guide/Role/modifyUserRoles.md +++ /dev/null @@ -1,34 +0,0 @@ -# $modifyUserRoles - -This function allows you to modify a user's roles by adding, removing, or toggling them. You can perform multiple operations in a single function call. - -**Operations (op):** - -* `+`: **Add** the specified role. -* `-`: **Remove** the specified role. -* `~`: **Toggle** the role (add if the user doesn't have it, remove if they do). - -## Usage - -```bash -$modifyUserRoles[User ID;[op]Role 1;[op]Role 2;...] -``` - -**Parameters:** - -* **`User ID`**: The ID of the user whose roles you want to modify. -* **`[op]Role N`**: A series of role modifications. Each modification consists of an *operation* (`+`, `-`, or `~`) followed by the *role name or ID*. Separate each role modification with a semicolon (`;`). - -## Example - -Let's say you want to add the "VIP" role and remove the "Newbie" role from a user. Here's how you would do it: - -```bash -$modifyUserRoles[$authorID;+VIP;-Newbie] -``` - -In this example: - -* `$authorID` represents the ID of the message author (the user whose roles you want to modify). -* `+VIP` adds the "VIP" role to the user. -* `-Newbie` removes the "Newbie" role from the user. \ No newline at end of file diff --git a/guide/Role/role.md b/guide/Role/role.md deleted file mode 100644 index 3bc4be38..00000000 --- a/guide/Role/role.md +++ /dev/null @@ -1,54 +0,0 @@ -# $role - -A powerful and compact function to retrieve various properties of a Discord role! - -### Usage: `$role[roleid;property]` - -This function takes two arguments: - -* `roleid`: The ID of the role you want to get information from. -* `property`: The specific piece of information you want to retrieve. - -#### Supported Properties: - -Here's a list of the available properties you can use with the `$role` function: - -* `name`: The role's name (e.g., "Moderator"). -* `mention`: The role's mention string (e.g., `<@&1234567890>`). -* `id`: The role's ID (e.g., `1234567890`). -* `hex`: The role's color in hexadecimal format (e.g., `#FF0000` for red). -* `color`: The role's color as a 10-base number. -* `primaryColor`: same as color. -* `secondColor`: secondary color in case of gradient color. -* `thirdColor`: third color in case of there is tertiary color. -* `created`: The date and time when the role was created. -* `position`: The role's position in the role hierarchy. Lower numbers mean higher priority. -* `rawposition`: The role's raw position in the role list. -* `guildid`: The ID of the guild (server) where the role exists. -* `guildname`: The name of the guild (server) where the role exists. -* `timestamp`: The creation timestamp of the role. -* `ismentionable`: Returns `true` if the role can be mentioned, `false` otherwise. -* `iseditable`: Returns `true` if the bot can edit the role, `false` otherwise. -* `ismanaged`: Returns `true` if the role is managed by an integration (like a bot), `false` otherwise. -* `ishoisted`: Returns `true` if the role is hoisted (displayed separately in the member list), `false` otherwise. -* `usercount`: The number of users who have this role. (Note: This value is cached and might not be perfectly up-to-date.) -* `icon`: Returns the role's icon URL if it exists. Returns `undefined` if the role has no icon. - -
- -#### Example: - - - - !!exec $role[798789079070970;position] - - - 2 - - - -This example retrieves the position of the role with the ID `798789079070970`. The bot responds with `2`, indicating the role's position in the role hierarchy. - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/roleCount.md b/guide/Role/roleCount.md deleted file mode 100644 index 7e3389ab..00000000 --- a/guide/Role/roleCount.md +++ /dev/null @@ -1,32 +0,0 @@ -# $roleCount - -The `$roleCount` function returns the total number of roles present in your Discord server (guild). - -#### Usage: `$roleCount` - -This function is straightforward to use. Simply include it in your command response to display the role count. - -
- -**Example:** - -Let's create a custom command that announces the total number of roles in the server. - - - - !!exec There are `$roleCount` roles in the server! - - - There are `23` roles in the server - - - -In this example: - -* The user triggers the custom command with `!!exec`. -* The command uses `$roleCount` to retrieve the role count. -* The bot responds with a message stating, "There are `23` roles in the server" (the number will reflect the actual role count of the server). - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/roleExists.md b/guide/Role/roleExists.md deleted file mode 100644 index 9a212d26..00000000 --- a/guide/Role/roleExists.md +++ /dev/null @@ -1,42 +0,0 @@ -# $roleExists - -Checks if a role exists within the server and returns a boolean value (true or false). - -#### Usage: - -`$roleExists[roleID]` - -**Parameters:** - -* `roleID`: The ID of the role you want to check. - -
- -**Example:** - -```discord - - - !!exec $roleExists[$roleID[muted]] - - - true - - -``` - -**Explanation:** - -This example checks if a role with the name "muted" exists on the server. First, `$roleID[muted]` resolves to the role ID of the role named "muted" (if it exists). Then, `$roleExists` checks if a role with that ID exists. The command returns `true` if the role exists and `false` if it doesn't. - -::: tip Used Functions -* `$roleID`: Retrieves a role's ID by its name. -::: - -::: tip Related Functions -* `$findRole`: Finds roles by name or mention. -::: - -##### Function Difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/roleID.md b/guide/Role/roleID.md deleted file mode 100644 index 2c944708..00000000 --- a/guide/Role/roleID.md +++ /dev/null @@ -1,35 +0,0 @@ -# $roleID - -Retrieves the ID of a specified role. - -#### Usage: - -`$roleID[ROLE NAME]` - -**Argument:** - -* `ROLE NAME`: The name of the role you want to get the ID for. This is case-sensitive. - -
- -**Example:** - -Let's say you have a role named "muted" in your server. The following example demonstrates how to retrieve its ID. - - - - !!exec $roleID[muted] - - - 772053356378062889 - - - -In this example, the command returns `772053356378062889`, which is the ID of the "muted" role. - -::: tip Related Functions -* `$findRole`: Use this function to find a role by its name or mention if you are unsure of the exact name. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Role/roleIcon.md b/guide/Role/roleIcon.md deleted file mode 100644 index a348097b..00000000 --- a/guide/Role/roleIcon.md +++ /dev/null @@ -1,51 +0,0 @@ -# $roleIcon - -This function allows you to either retrieve or set the icon of a role within a guild (server). - -## Usage - -```bash -$roleIcon[role; icon (optional)] -``` - -**Parameters:** - -* **`role`**: (Required) This can be the name or ID of the role you want to interact with. -* **`icon`**: (Optional) If provided, this will set the role's icon. If omitted, the function will return the role's current icon URL. This can be a direct image URL or a custom emoji. - -## Examples - -### Example 1: Getting a Role's Icon - -This example demonstrates how to retrieve the icon of a role named "Support". - -```bash -$roleIcon[Support] -``` - -**Output:** - -![](https://i.imgur.com/d0PfOjB.png) - -### Example 2: Setting a Role's Icon with an Image URL - -This example sets the icon of a role named "Member" using an image URL. - -```bash -$roleIcon[Member;https://cdn-icons-png.flaticon.com/512/6080/6080057.png] -``` - -**Important:** The bot needs the necessary permissions to modify roles in the server for this to work. - -### Example 3: Setting a Role's Icon with a Custom Emoji - -This example sets the icon of a role named "Member" using a custom emoji. - -```bash -$roleIcon[Member;<:happy:862641528890851328>] -``` - -**Note:** - -* Make sure the bot has access to the custom emoji you are using (i.e., it's from a server the bot is in). -* Again, the bot requires the necessary permissions to modify roles in the guild. The bot needs "Manage Roles" permissions. \ No newline at end of file diff --git a/guide/Role/roleMembersCount.md b/guide/Role/roleMembersCount.md deleted file mode 100644 index 038f0dac..00000000 --- a/guide/Role/roleMembersCount.md +++ /dev/null @@ -1,23 +0,0 @@ -# $roleMembersCount - -This function returns the number of members in a Discord server that have a specific role. - -::: danger Warning -The data used by this function comes from the bot's cache, not the Discord API directly. This means the count might not be 100% accurate *unless* all members of the server are cached by the bot. Full caching is generally only achieved in Tier 5 servers due to the sheer volume of members. -::: - -**Usage:** `$roleMembersCount[roleId]` - -* `roleId`: The ID of the Discord role you want to count members for. You can get this ID by right-clicking the role in your server settings (make sure you have Developer Mode enabled in Discord settings). - -**Example:** - -If you have a role with the ID `123456789012345678`, the function would look like this: - -`$roleMembersCount[123456789012345678]` - -This would return the number of members who currently have that role. - -**Function Difficulty:** - -**Tags:** \ No newline at end of file diff --git a/guide/Role/roleName.md b/guide/Role/roleName.md deleted file mode 100644 index 226c6fd2..00000000 --- a/guide/Role/roleName.md +++ /dev/null @@ -1,28 +0,0 @@ -# $roleName - -Retrieves the name of a role using its ID. - -#### Usage: - -`$roleName[roleID]` - -Replace `roleID` with the actual ID of the role you want to find. - -
- -#### Example: - -This example shows how to use the `$roleName` function to find the name of the role with the ID `869243918787686439`. - - - - !!exec $roleName[869243918787686439] - - - Custom Command - - - -##### Function difficulty: - -###### Tags: \ No newline at end of file diff --git a/guide/Role/rolePerms.md b/guide/Role/rolePerms.md deleted file mode 100644 index cb6adcd6..00000000 --- a/guide/Role/rolePerms.md +++ /dev/null @@ -1,33 +0,0 @@ - -Returns the permissions a role has. - -#### Usage: - -`$rolePerms[roleID;separator (optional)]` - -* `roleID`: The ID of the role to check. -* `separator`: (Optional) The separator to use when listing the permissions. Defaults to no separator. - -
- -**Example:** - - - - !!exec $rolePerms[$roleID[muted]; | ] - - - View Channel | Read Message History - - - -::: tip Permissions List -For a comprehensive list of all permission names, refer to the [Permissions List](../CodeReferences/ref.permissions_list.md). This list includes all the permissions a role can have. - -::: - -::: tip Related Functions -* `$userPerms`: Returns a member's permissions. -::: - -##### Function difficulty: diff --git a/guide/Role/rolePosition.md b/guide/Role/rolePosition.md deleted file mode 100644 index 7e3c5455..00000000 --- a/guide/Role/rolePosition.md +++ /dev/null @@ -1,40 +0,0 @@ -# $rolePosition - -Returns the position of a role in the server's role hierarchy. Roles with higher positions appear higher in the server's role list. - -#### Usage: - -`$rolePosition[role ID]` - -**Example:** - -`$rolePosition[827482937492837492]` - -* Replace `827482937492837492` with the actual role ID. - -
- -**Example Scenario:** - -Let's say you have a custom command that checks the position of the "Muted" role. - - - - !!exec $rolePosition[$roleID[muted]] - - - 2 - - - -**Explanation:** - -* `!!exec $rolePosition[$roleID[muted]]`: This command attempts to execute the `$rolePosition` function using the role ID of the role named "muted" (obtained via `$roleID`). -* `2`: The bot responds with `2`, indicating that the "muted" role is in the 2nd position in the server's role hierarchy (higher numbers are generally higher positions, although some systems may number from 0). - -**Important Notes:** - -* Role positions are relative to other roles within the server. -* The role ID can be obtained by enabling Developer Mode in Discord (Settings > Advanced) and right-clicking on a role to copy its ID. - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Role/setRoles.md b/guide/Role/setRoles.md deleted file mode 100644 index 39063b78..00000000 --- a/guide/Role/setRoles.md +++ /dev/null @@ -1,56 +0,0 @@ -# $setRoles - -Gives a user specific roles, removing all other roles. This is useful for setting a user's roles to a specific configuration, like assigning a "Muted" role and removing all other roles. - -#### Usage: - -```php -$setRoles[userID;roleID 1;roleID 2;roleID 3;...] -``` - -* **`userID`**: The ID of the user you want to modify roles for. -* **`roleID 1;roleID 2;roleID 3;...`**: A semicolon-separated list of role IDs that the user should have. All other roles will be removed. - -
- -**Example:** - -Sets the command executor's roles to only the "Muted" role. - -```discord -!!exec $setRoles[$authorID;$roleID[Muted]] -``` - -
- -**Explanation:** - -* `!!exec`: Executes the command. Replace with your bot's command prefix. -* `$setRoles`: The function being used. -* `$authorID`: Gets the ID of the user who executed the command (using the `$authorID` function). -* `$roleID[Muted]`: Gets the ID of the role named "Muted" (using the `$roleID` function). - -::: tip Important Notes - -* The bot needs the **Manage Roles** permission to use this function. -* The bot can only manage roles that are below its highest role in the server's role hierarchy. -* Invalid role IDs or user IDs will cause the function to fail. - -::: - -::: tip Used Functions - -* `$roleID[roleName]`: Returns the ID of a role, given its name. [See RoleID Documentation](../Role/roleID.md) -* `$authorID`: Returns the ID of the command executor. [See AuthorID Documentation](../Member/authorID.md) - -::: - -::: tip Related Functions - -* `$giveRoles[userID;roleID 1;roleID 2;...]`: Gives roles to a user without removing existing roles. [See GiveRoles Documentation](../Role/giveRoles.md) -* `$takeRoles[userID;roleID 1;roleID 2;...]`: Removes roles from a user. [See TakeRoles Documentation](../Role/takeRoles.md) -* `$toggleRoles[userID;roleID 1;roleID 2;...]`: Toggles the specified roles on a user. [See ToggleRoles Documentation](../Role/toggleRoles.md) - -::: - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Role/takeRoles.md b/guide/Role/takeRoles.md deleted file mode 100644 index 329e63c6..00000000 --- a/guide/Role/takeRoles.md +++ /dev/null @@ -1,39 +0,0 @@ -# $takeRoles -Takes away a role from a user. - -#### Usage: - -`$takeRoles[userID;roleID 1;roleID 2;roleID 3;...]` - -* **userID:** The ID of the user to take the roles from. -* **roleID 1;roleID 2;roleID 3;...:** A semicolon-separated list of role IDs to remove from the user. - -
- - - - !!exec $takeRoles[$authorID;$roleID[Muted]] - - - -**Example Breakdown:** - -This example takes the "Muted" role from the user who executed the command. - -* `!!exec`: Executes the custom command function. -* `$takeRoles[...]`: The function that removes roles. -* `$authorID`: Gets the ID of the command executor. (See [here](../Member/authorID.md) for more info) -* `$roleID[Muted]`: Gets the ID of the role named "Muted". (See [here](../Role/roleID.md) for more info) - -::: tip Used Functions -* `$roleID`: Returns a role ID based on the role's name. -* `$authorID`: Returns the ID of the command executor. -::: - -::: tip Related Functions -* `$giveRoles`: Gives roles to a user. -* `$setRoles`: Removes all roles from a user and then gives them the specified roles. -* `$toggleRoles`: Toggles roles on a user (adds if they don't have it, removes if they do). -::: - -##### Function Difficulty: \ No newline at end of file diff --git a/guide/Role/toggleRoles.md b/guide/Role/toggleRoles.md deleted file mode 100644 index 8d70c874..00000000 --- a/guide/Role/toggleRoles.md +++ /dev/null @@ -1,36 +0,0 @@ -# $toggleRoles - -Toggles roles on a user. This means it removes specified roles if the user already has them, and adds them if they don't. - -#### Usage: - -`$toggleRoles[userID;roleID 1;roleID 2;roleID 3;...]` - -* **userID:** The ID of the user to toggle the roles on. -* **roleID 1;roleID 2;roleID 3;...:** A list of role IDs to toggle, separated by semicolons. - -
- - - - !!exec $toggleRoles[$authorID;$roleID[Member +]] - - - -**Example:** - -This example toggles the "Member +" role on the command executor. If the user has the role it will be removed, if they don't have it, it will be added. - -::: tip Used Functions -`$roleID`, to get the ID of a role by name. This is used to dynamically find the role ID based on its name. -::: - -::: tip Related Functions - -* `$giveRoles`: Gives roles to a user. -* `$takeRoles`: Removes roles from a user. -* `$setRoles`: Removes all existing roles from a user and then adds the specified roles. - -::: - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/addEmoji.md b/guide/Server/addEmoji.md deleted file mode 100644 index 9fa58879..00000000 --- a/guide/Server/addEmoji.md +++ /dev/null @@ -1,34 +0,0 @@ -# $addEmoji - -Adds an emoji to the current Discord server (guild). You can optionally restrict the emoji's use to specific roles. - -#### Usage: `$addEmoji[url;name;returnEmoji (yes/no)(optional);roleID1;roleID2;...]` - -**Parameters:** - -* `url`: The URL of the image to use for the emoji. Must be a direct link to the image file (e.g., `.png`, `.jpg`, `.gif`). -* `name`: The name you want to give the emoji. This will be used to reference the emoji in chat (e.g., `:CustomCommandSupport:`). -* `returnEmoji (yes/no) (optional)`: Determines whether the function returns the new emoji's ID. If set to `yes`, the function will return the emoji ID. If `no` (or omitted), it won't return anything. -* `roleID1;roleID2;... (optional)`: A semicolon-separated list of role IDs. If provided, only users with one or more of these roles will be able to use the emoji. Leave blank for no role restrictions. - -
- -**Example:** - - - - !!exec $addEmoji[https://media.discordapp.net/avatars/725721249652670555/781224f90c3b841ba5b40678e032f74a.webp;CustomCommandSupport;no] - - - -**Explanation:** - -This example will add an emoji to the server named "CustomCommandSupport" using the image from the provided URL. The emoji will be available to all members of the server as `CustomCommandSupport`. The function will not return the ID of the new emoji. - -**Permissions:** - -This function requires the bot to have the following permissions: - -* **Manage Emojis** - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/allMembersCount.md b/guide/Server/allMembersCount.md deleted file mode 100644 index e6aed888..00000000 --- a/guide/Server/allMembersCount.md +++ /dev/null @@ -1,17 +0,0 @@ -# $allMembersCount - -Returns the total number of users the bot is currently serving across all servers it's in. - -#### Usage: `$allMembersCount` - -
- - - !!exec <@$clientID> serves $allMembersCount users in total! - - - Custom Command serves 6852280 users in total! - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/createAutomodKeyword.md b/guide/Server/createAutomodKeyword.md deleted file mode 100644 index efb245d3..00000000 --- a/guide/Server/createAutomodKeyword.md +++ /dev/null @@ -1,78 +0,0 @@ -# $createAutomodKeyword - -Creates a new auto-moderation rule based on keywords within the server. This allows you to automatically take actions when specific words or phrases are used. - -## Usage - -```bash -$createAutomodKeyword[ - {name=Rule name} - {keyword=Keyword to trigger on} - {allow_keyword=Exempt this keyword from triggering} - {regex=Regex expression to trigger on} - {action= - {type=block} - {message=Block message displayed to the user} - } - {action= - {type=alert} - {channel=Channel ID to send an alert message to} - } - {action= - {type=timeout} - {duration=Timeout duration for the user (e.g., 10m, 1h, 1d)} - } - {exempt_role=Role ID to exempt from the rule} - {exempt_channel=Channel ID to exempt from the rule} - {disabled=yes/no (default: no)} - {return_id=yes/no (default: no)} -] -``` - -### Parameters Explained - -* **`name`**: The name of the auto-moderation rule. This should be descriptive. -* **`keyword`**: The keyword or phrase that will trigger the rule. Up to 1000 keywords can be defined. -* **`allow_keyword`**: Keywords that are whitelisted; if these appear, the rule will *not* trigger, even if another keyword matches. Up to 100 allowed keywords can be defined. -* **`regex`**: A regular expression to match. For advanced filtering. Up to 10 regex expressions can be defined. -* **`action`**: Defines the action(s) to be taken when the rule is triggered. Multiple actions can be specified. - * **`type`**: The type of action. Possible values: - * `block`: Blocks the message containing the triggering keyword. - * `alert`: Sends an alert message to a specified channel. - * `timeout`: Times out the user for a specified duration. - * **`message`**: (Only for `block` action) The message displayed to the user when their message is blocked. - * **`channel`**: (Only for `alert` action) The ID of the channel to send the alert message to. - * **`duration`**: (Only for `timeout` action) The duration of the timeout. Examples: `10m` (10 minutes), `1h` (1 hour), `1d` (1 day). -* **`exempt_role`**: The ID of a role that is exempt from this rule. Users with this role will not be affected by the rule. Up to 20 exempt roles can be defined. -* **`exempt_channel`**: The ID of a channel that is exempt from this rule. Messages in this channel will not be checked by the rule. Up to 50 exempt channels can be defined. -* **`disabled`**: Whether the rule is disabled or not. Defaults to `no` (enabled). Set to `yes` to disable the rule. -* **`return_id`**: Whether to return the ID of the created rule. Defaults to `no`. Set to `yes` to return the rule ID. - -### Notes: - -* The bot requires the **Manage Server** (`manageserver`) [permission](../CodeReferences/ref.permissions_list.md) to create automod rules. -* The following inputs can be repeated: - * `{keyword}`: Up to 1000. - * `{allow_keyword}`: Up to 100. - * `{regex}`: Up to 10. - * `{exempt_role}`: Up to 20. - * `{exempt_channel}`: Up to 50. - * `{action}`: As many as you like (within reason). - -### Example: - -```bash -$createAutomodKeyword[ - {name=Block Fatty Words} - {keyword=fat} - {keyword=obese} - {action= - {type=block} - {message=Hey! Stop fat-shaming.} - } - {action= - {type=timeout} - {duration=1h} - } -] -``` diff --git a/guide/Server/deleteAutomod.md b/guide/Server/deleteAutomod.md deleted file mode 100644 index 2b237835..00000000 --- a/guide/Server/deleteAutomod.md +++ /dev/null @@ -1,19 +0,0 @@ -# $deleteAutomod - -Deletes an automod rule from the server. - -## Usage - -```php -$deleteAutomod[Rule ID] -``` - -* **Rule ID:** The ID of the automod rule you want to delete. You can usually find this ID through the Discord interface or another Custom Command that retrieves automod rule information. - -## Example - -```php -$deleteAutomod[123456789] -``` - -This command will attempt to delete the automod rule with the ID `123456789`. \ No newline at end of file diff --git a/guide/Server/deleteEmojis.md b/guide/Server/deleteEmojis.md deleted file mode 100644 index f9ec15ca..00000000 --- a/guide/Server/deleteEmojis.md +++ /dev/null @@ -1,25 +0,0 @@ -# $deleteEmojis - -Delete a custom emoji(s) from the server. - -## Usage - -```bash -$deleteEmojis[emoji1;emoji2;...] -``` - -This function allows you to delete one or more custom emojis from your Discord server. You must have the `Manage Emojis` permission to use this function. - -**Parameters:** - -* `emoji1;emoji2;...`: A semi-colon separated list of the emojis to delete. You can use the emoji name, ID, or the emoji itself. - -**Example:** - -```php -$deleteEmojis[customEmoji1;customEmoji2] -``` - -This example will delete the custom emojis named `customEmoji1` and `customEmoji2` from the server. - - diff --git a/guide/Server/editAutomodKeyword.md b/guide/Server/editAutomodKeyword.md deleted file mode 100644 index 8a4e02e5..00000000 --- a/guide/Server/editAutomodKeyword.md +++ /dev/null @@ -1,88 +0,0 @@ -# $editAutomodKeyword - -Modify an AutoMod rule of type "keywords" in the server. This function allows you to modify various aspects of an existing keyword AutoMod rule, such as adding or removing keywords, regex expressions, actions, and exemptions. - -## Usage - -```bash -$editAutomodKeyword[ - {id=Rule ID} - {name=Rule name} - {keyword=add keyword to trigger on} - {remove_keyword=keyword to remove} - {allow_keyword=add exempt keyword} - {remove_allow_keyword=remove exempt keyword} - {regex=add regex expression} - {remove_regex=remove regex expression} - {action= - {type=block} - {message=block message appear for user} - } - {action= - {type=alert} - {channel=channel to alert for} - } - {action= - {type=timeout} - {duration=timeout duration of user i.e 10m} - } - {remove_action=action type like block} - {exempt_role=add Exempt role} - {remove_exempt_role=remove Exempt role} - {exempt_channel=add Exempt channel} - {remove_exempt_channel=remove Exempt channel} - {disabled=yes/no} -] -``` - -### Parameters: - -* **`id`**: The ID of the AutoMod rule you want to modify. This is *required*. -* **`name`**: (Optional) A new name for the rule. -* **`keyword`**: (Optional) A keyword to add to the trigger list. The bot needs the `manageserver` permission. -* **`remove_keyword`**: (Optional) A keyword to remove from the trigger list. The bot needs the `manageserver` permission. -* **`allow_keyword`**: (Optional) A keyword that will be exempt from triggering the rule. The bot needs the `manageserver` permission. -* **`remove_allow_keyword`**: (Optional) A keyword to remove from the exemption list. The bot needs the `manageserver` permission. -* **`regex`**: (Optional) A regular expression to add to the rule. The bot needs the `manageserver` permission. -* **`remove_regex`**: (Optional) A regular expression to remove from the rule. The bot needs the `manageserver` permission. -* **`action`**: (Optional) Defines an action to take when the rule is triggered. Can be one of the following types: - * **`type=block`**: Blocks the message. `manageserver` permission needed. - * **`message`**: (Required if `type=block`) The message to display to the user when their message is blocked. - * **`type=alert`**: Sends an alert to a specified channel. `manageserver` permission needed. - * **`channel`**: (Required if `type=alert`) The channel ID to send the alert to. - * **`type=timeout`**: Times out the user. `manageserver` permission needed. - * **`duration`**: (Required if `type=timeout`) The timeout duration (e.g., `10m`, `1h`, `1d`). -* **`remove_action`**: (Optional) Removes a specific action from the rule. Specify the `type` of action to remove (e.g., `block`, `alert`, `timeout`). Requires `manageserver` permission. -* **`exempt_role`**: (Optional) A role ID that will be exempt from the rule. The bot needs the `manageserver` permission. -* **`remove_exempt_role`**: (Optional) A role ID to remove from the exemption list. The bot needs the `manageserver` permission. -* **`exempt_channel`**: (Optional) A channel ID that will be exempt from the rule. The bot needs the `manageserver` permission. -* **`remove_exempt_channel`**: (Optional) A channel ID to remove from the exemption list. The bot needs the `manageserver` permission. -* **`disabled`**: (Optional) Whether the rule is disabled. Set to `yes` to disable, or `no` to enable. - -### Notes: -* The following inputs can be repeated: - - * `keyword` - * `remove_keyword` - * `allow_keyword` - * `remove_allow_keyword` - * `regex` - * `remove_regex` - * `exempt_role` - * `remove_exempt_role` - * `exempt_channel` - * `remove_exempt_channel` - * `action` - * `remove_action` - -### Example: - -```bash -$editAutomodKeyword[ - {id=1234567} - {name=Block Fatty Words Improved} - {keyword=fat2} - {keyword=obese2} - {disabled=no} -] -``` diff --git a/guide/Server/emojiCount.md b/guide/Server/emojiCount.md deleted file mode 100644 index 39d2991f..00000000 --- a/guide/Server/emojiCount.md +++ /dev/null @@ -1,10 +0,0 @@ -# $emojiCount - -Returns the amount of emojis in this server - -## Usage - -```bash -$emojiCount -``` - diff --git a/guide/Server/emojiExists.md b/guide/Server/emojiExists.md deleted file mode 100644 index cb1e1072..00000000 --- a/guide/Server/emojiExists.md +++ /dev/null @@ -1,21 +0,0 @@ -# $emojiExists - -Checks if a given emoji ID is available to the bot. - -## Usage - -```bash -$emojiExists[emojiID] -``` - -## Arguments - -* `emojiID` - The ID of the emoji to check. - -## Example - -```bash -$emojiExists[123456789012345678] -``` - -This would return `true` if an emoji with the ID `123456789012345678` exists and is accessible by the bot, and `false` otherwise. \ No newline at end of file diff --git a/guide/Server/getInviteInfo.md b/guide/Server/getInviteInfo.md deleted file mode 100644 index c809bdc0..00000000 --- a/guide/Server/getInviteInfo.md +++ /dev/null @@ -1,59 +0,0 @@ -# $getInviteInfo - -Gets invite info from a given invite code. - -## Usage - -```bash -$getInviteInfo[code/url;Property] -``` - -**Parameters:** - -* `code/url`: The invite code or full invite URL to retrieve information from. -* `Property`: The specific property you want to extract. Leave empty to get all properties in JSON format. - -### Available Properties - -These properties are available for **all** invites: - -* `guildid`, `serverid`: The ID of the server. -* `servername`: The name of the server. -* `servericon`: The URL of the server icon. -* `serversplash`: The URL of the server splash image. -* `serverdesc`: The description of the server. -* `memberscount`: The total number of members in the server. -* `membersonlinecount`: The number of members currently online in the server. -* `code`: The invite code itself. -* `userid`: The ID of the user who created the invite. -* `expiresat`: The expiration date of the invite (if applicable). -* `url`: The full invite URL. -* `channelid`: The ID of the channel the invite is for. -* `channelname`: The name of the channel the invite is for. - -These properties are available **only for invites from the current server**: - -* `uses`: The number of times the invite has been used. -* `maxuses`: The maximum number of times the invite can be used. -* `ownerid`: The ID of the user who created the invite. -* `istemporary`: Whether the invite is temporary (grants temporary membership). -* `createdat`: The date and time the invite was created. - -### Getting All Properties - -If you leave the `Property` parameter empty (e.g., `$getInviteInfo[ZFQNZA4Ekz]`), the function will return a JSON string containing all available properties. You can then parse this JSON using `$objectCreate` and `$objectGet` to access individual values. This is useful when you need to retrieve multiple pieces of information about an invite. - -### Example - -```discord -!!exec $getInviteInfo[ZFQNZA4Ekz;servername] -``` - - - - !!exec $getInviteInfo[ZFQNZA4Ekz;servername] - - - Custom Command - - diff --git a/guide/Server/getServerInvite.md b/guide/Server/getServerInvite.md deleted file mode 100644 index f16423de..00000000 --- a/guide/Server/getServerInvite.md +++ /dev/null @@ -1,19 +0,0 @@ -# $getServerInvite - -Creates an invite link to the current server. - -## Usage - -```bash -$getServerInvite -``` - -### Example: - - - !!exec My server invite is: $getServerInvite

-
- - My server invite is: https://discord.gg/midoworkshopsv - -
\ No newline at end of file diff --git a/guide/Server/guild.md b/guide/Server/guild.md deleted file mode 100644 index 3518d1c6..00000000 --- a/guide/Server/guild.md +++ /dev/null @@ -1,42 +0,0 @@ -# $guild - -A versatile function packed with information about the current server! - -### Usage: `$guild[property]` - -This function allows you to retrieve various details about the server where the command is executed. Simply specify the desired property within the square brackets. - -#### Supported Properties: - -* `name` - The name of the server. -* `id` - The unique ID of the server. -* `acronym` - The acronym of the server's name. -* `afkchannelid` - The ID of the server's AFK voice channel. -* `boostcount` - The number of boosts the server has. -* `boostlevel` - The server's boost level. -* `created` - The date and time the server was created. -* `description` - The server's description (if any). -* `emojicount` - The total number of emojis in the server. -* `ispartnered` - Returns `true` if the server is partnered, `false` otherwise. -* `isverified` - Returns `true` if the server is verified, `false` otherwise. -* `membercount` - The total number of members in the server. -* `ruleschannel` - The ID of the server's rules channel. -* `systemchannelid` - The ID of the server's system channel. -* `timestamp` - The creation timestamp of the server. -* `updateschannel` - The ID of the server's moderator news channel. -* `verificationlvl` - The server's verification level. - -
- -#### Example: - - - - !!exec This Server has $guild[boostcount] boosts! - - - This Server has 2 boosts! - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/membersCount.md b/guide/Server/membersCount.md deleted file mode 100644 index a728a1b7..00000000 --- a/guide/Server/membersCount.md +++ /dev/null @@ -1,22 +0,0 @@ -# $membersCount - -Returns the amount of users in your server/guild! - -#### Usage: `$membersCount` - -``` -!!exec There are `$membersCount` members in the server! -``` - -**Example:** - - - - !!exec There are `$membersCount` members in the server! - - - There are `599` members in the server - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/ownerID.md b/guide/Server/ownerID.md deleted file mode 100644 index 5a98fcbb..00000000 --- a/guide/Server/ownerID.md +++ /dev/null @@ -1,17 +0,0 @@ -# $ownerID -Returns the guild's owner ID. - -#### Usage: `$ownerID` - -
- - - !!exec $ownerID - - - 683630053686378498 - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/resolveEmojiID.md b/guide/Server/resolveEmojiID.md deleted file mode 100644 index 5a07f4aa..00000000 --- a/guide/Server/resolveEmojiID.md +++ /dev/null @@ -1,27 +0,0 @@ -# $resolveEmojiID - -Resolves a full emoji, emoji name, or emoji ID into its ID. This function is useful for extracting the ID from an emoji, regardless of its format. - -## Usage - -```bash -$resolveEmojiID[emoji string/name/id] -``` - -## Arguments - -* `emoji string/name/id` - The emoji, emoji name, or ID of the emoji to resolve. This can be a standard emoji (e.g., :smile:), a custom emoji name (e.g., my_custom_emoji), or an emoji ID. - -## Example - -Let's say you have a custom emoji named `cool_emoji` in your server. - -```bash -$resolveEmojiID[cool_emoji] -``` - -This would return the unique ID associated with the `cool_emoji` emoji. - -```bash -$resolveEmojiID[<:cool_emoji:123456789012345678>] -``` diff --git a/guide/Server/securityPause.md b/guide/Server/securityPause.md deleted file mode 100644 index d6e6f13d..00000000 --- a/guide/Server/securityPause.md +++ /dev/null @@ -1,27 +0,0 @@ -# $securityPause - -a beta feature, where discord allow you to pause invites and DMs for a period of time - -## Usage - -```bash -$securityPause[Duration of Pause (i.e 2h);Pause Invite (Yes/No);Pause DM (Yes/No)] -``` - -### Duration of Pause: -The value determines how much time a pause should be applied, maximum allowed duration is `24h` - -### Example (Pause invites for 24 hours): -```bash -$securityPause[24h;yes;no] -``` - -### Example (Pause DMs for 12 hours): -```bash -$securityPause[12h;no;yes] -``` - -### Example (Pause invites and DMs for 24 hours): -```bash -$securityPause[24h;yes;yes] -``` \ No newline at end of file diff --git a/guide/Server/serverBanner.md b/guide/Server/serverBanner.md deleted file mode 100644 index 0f6cb317..00000000 --- a/guide/Server/serverBanner.md +++ /dev/null @@ -1,25 +0,0 @@ -# $serverBanner - -Returns the current server banner - -#### Usage: `$serverBanner[size (optional);dynamic (yes/no)(optional)]` - -**Description:** - -This function retrieves the server's banner image URL. You can optionally specify the size and whether the image should be dynamic (e.g., animated GIF). - -**Parameters:** - -* `size` (optional): The desired size of the image. This should be a number representing the width/height (e.g., `1024`). -* `dynamic` (optional): Specifies whether to use the dynamic (animated) version of the banner, if available. Use `yes` to try to get the animated version, or `no` to force the static version. - -**Example:** - -* `$serverBanner`: Returns the default-sized server banner URL. -* `$serverBanner[512]`: Returns the server banner URL with a size of 512x512. -* `$serverBanner[;yes]`: Returns the server banner URL, attempting to use the dynamic (animated) version. -* `$serverBanner[1024;no]`: Returns the server banner URL with a size of 1024x1024, forcing the static version. - -Learn more about server banners: https://support.discord.com/hc/en-us/articles/360028716472-Server-Banner-Background-Invite-Banner-Image - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/serverBoostCount.md b/guide/Server/serverBoostCount.md deleted file mode 100644 index 82b7fd44..00000000 --- a/guide/Server/serverBoostCount.md +++ /dev/null @@ -1,18 +0,0 @@ -# $serverBoostCount - -Returns the number of boosts this server has. - -#### Usage: `$serverBoostCount` - -
- - - !!exec $serverBoostCount - - - 6 - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverBoostLevel.md b/guide/Server/serverBoostLevel.md deleted file mode 100644 index 329da64b..00000000 --- a/guide/Server/serverBoostLevel.md +++ /dev/null @@ -1,19 +0,0 @@ -# $serverBoostLevel - -Returns the boost level of the server. - -#### Usage: `$serverBoostLevel` - -This command retrieves the current boost level of the Discord server. Boost levels range from 0 (no boosts) to 3 (highest level). - -
- - - !!exec $serverBoostLevel - - - 1 - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/serverContentFilter.md b/guide/Server/serverContentFilter.md deleted file mode 100644 index cc1957c6..00000000 --- a/guide/Server/serverContentFilter.md +++ /dev/null @@ -1,18 +0,0 @@ -# $serverContentFilter - -Returns the content filter level of this guild. This determines the level of explicit content filtering applied to media content within the server. - -#### Usage: `$serverContentFilter` - -
- - - !!exec $serverContentFilter - - - All Members - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverDescription.md b/guide/Server/serverDescription.md deleted file mode 100644 index 7dd88c14..00000000 --- a/guide/Server/serverDescription.md +++ /dev/null @@ -1,33 +0,0 @@ -# $serverDescription -Returns the current server description - -#### Usage: `$serverDescription` -
- - - !!exec $serverDescription - - - Custom Command Support Server - - - -##### Function difficulty: -###### Tags: # serverDescription - -Returns the current server description. This command retrieves the description set for the Discord server. - -#### Usage: `$serverDescription` - -
- - - - !!exec $serverDescription - - - Custom Command Support Server - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/serverEmojis.md b/guide/Server/serverEmojis.md deleted file mode 100644 index 905a33be..00000000 --- a/guide/Server/serverEmojis.md +++ /dev/null @@ -1,18 +0,0 @@ -# serverEmojis - -Returns the server emojis. - -#### Usage: `$serverEmojis` - -
- - - - !!exec $serverEmojis - - - :cc: , :blob: - - - -##### Function difficulty: diff --git a/guide/Server/serverFeatures.md b/guide/Server/serverFeatures.md deleted file mode 100644 index d77c6eb7..00000000 --- a/guide/Server/serverFeatures.md +++ /dev/null @@ -1,17 +0,0 @@ -# serverFeatures - -Returns the server features. This function returns a comma-separated list of features enabled on the server. - -#### Usage: `$serverFeatures` - -
- - - !!exec $serverFeatures - - - Preview Enabled, Threads Enabled, Member Verification Gate Enabled, New Thread Permissions, News, Community, Welcome Screen Enabled - - - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Server/serverIcon.md b/guide/Server/serverIcon.md deleted file mode 100644 index ed976fa9..00000000 --- a/guide/Server/serverIcon.md +++ /dev/null @@ -1,19 +0,0 @@ -# $serverIcon - -Returns the current server's icon. - -#### Usage: `$serverIcon` - -
- - - - !!exec $serverIcon - - - - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverName.md b/guide/Server/serverName.md deleted file mode 100644 index 9a2ab4dc..00000000 --- a/guide/Server/serverName.md +++ /dev/null @@ -1,22 +0,0 @@ -# $serverName - -Returns the name of the current server. - -#### Usage: `$serverName` - -
- - - - !!exec $serverName - - - Custom Command - - - My server's name is: Your Server Name - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverRegion.md b/guide/Server/serverRegion.md deleted file mode 100644 index 34aee60d..00000000 --- a/guide/Server/serverRegion.md +++ /dev/null @@ -1,19 +0,0 @@ -# $serverRegion - -Returns the current server region or `undefined` if not available. - -#### Usage: `$serverRegion` - -
- - - - !!exec $serverRegion - - - Europe - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverSplash.md b/guide/Server/serverSplash.md deleted file mode 100644 index a7a88d4f..00000000 --- a/guide/Server/serverSplash.md +++ /dev/null @@ -1,9 +0,0 @@ -# $serverSplash -Returns the current server invite splash - -#### Usage: `$serverSplash[size (optional)]` - -Learn more about it: https://support.discord.com/hc/en-us/articles/360028716472-Server-Banner-Background-Invite-Splash-Image - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/serverVerificationLevel.md b/guide/Server/serverVerificationLevel.md deleted file mode 100644 index d94fb792..00000000 --- a/guide/Server/serverVerificationLevel.md +++ /dev/null @@ -1,16 +0,0 @@ -# $serverVerificationLevel -Returns the verification level of the server - -#### Usage: `$serverVerificationLevel` -
- - - !!exec $serverVerificationLevel - - - Medium - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/setGuildIcon.md b/guide/Server/setGuildIcon.md deleted file mode 100644 index e9f09358..00000000 --- a/guide/Server/setGuildIcon.md +++ /dev/null @@ -1,12 +0,0 @@ -# $setGuildIcon -Sets a new Icon for the server - -#### Usage: `$setGuildIcon[URL]` - -::: tip Related Functions -`$setGuildName`, to set a server's name -::: - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/setGuildName.md b/guide/Server/setGuildName.md deleted file mode 100644 index be1adbfc..00000000 --- a/guide/Server/setGuildName.md +++ /dev/null @@ -1,12 +0,0 @@ -# $setGuildName -Sets the name of your server to something, you have put in. - -#### Usage: `$setGuildName[name]` - -::: tip Related Functions -`$setGuildIcon`, to set a server's logo/ icon -::: - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Server/systemChannelID.md b/guide/Server/systemChannelID.md deleted file mode 100644 index 3e33604c..00000000 --- a/guide/Server/systemChannelID.md +++ /dev/null @@ -1,16 +0,0 @@ -# $systemChannelID -Returns the system channel ID of this server (if any) - -#### Usage: `$systemChannelID` -
- - - !!exec $systemChannelID - - - -::: warning -This function is currently not functioning as expected! -::: - -##### Function difficulty: \ No newline at end of file diff --git a/guide/Stickers/createSticker.md b/guide/Stickers/createSticker.md deleted file mode 100644 index 0cb6fd1f..00000000 --- a/guide/Stickers/createSticker.md +++ /dev/null @@ -1,27 +0,0 @@ -# $createSticker - -create a new sticker in the server - -## Usage - -```bash -$createSticker[name;image url;emoji;description (optional);return sticker id (yes/no)] -``` - -### Example: -```bash -$createSticker[Happy Earth;https://media.discordapp.net/attachments/951590503370063872/1028690645222690867/happy_earth.png;😄;I'm happy when earth is happy] -``` - -### Output -![](https://i.imgur.com/RnZdfeL.png) - - -## Notes -> sticker name should be within 2-30 characters\ - -> image url should be from trusted source like discord attachment or imgur.com\ - -> image size should be less than 512KB\ - -> accepted image extensions are .png or .apng \ No newline at end of file diff --git a/guide/Stickers/deleteSticker.md b/guide/Stickers/deleteSticker.md deleted file mode 100644 index 1bf65f32..00000000 --- a/guide/Stickers/deleteSticker.md +++ /dev/null @@ -1,10 +0,0 @@ -# $deleteSticker - -To delete a sticker inside the server - -## Usage - -```bash -$deleteSticker[Sticker ID] -``` - diff --git a/guide/Stickers/editSticker.md b/guide/Stickers/editSticker.md deleted file mode 100644 index b7eda8d2..00000000 --- a/guide/Stickers/editSticker.md +++ /dev/null @@ -1,15 +0,0 @@ -# $editSticker - -To edit a sticker inside the server\ -**Info** can be: name,desc,emoji - -## Usage - -```bash -$editSticker[Sticker ID;Info;New Value] -``` - -### Example: -```bash -$editSticker[992974663099629588;name;MyNewSmily] -``` \ No newline at end of file diff --git a/guide/Stickers/messageStickers.md b/guide/Stickers/messageStickers.md deleted file mode 100644 index 1c465f01..00000000 --- a/guide/Stickers/messageStickers.md +++ /dev/null @@ -1,20 +0,0 @@ -# $messageStickers - -To return the user message stickers (id)\ -**Index**: starts with 1, leaving it empty return all stickers ids separated by `, ` - -## Usage - -```bash -$messageStickers[Index] -``` - -### Example: - - - !!exec $messageStickers[1]

-
- - 992970796031017080 - -
\ No newline at end of file diff --git a/guide/Stickers/serverStickers.md b/guide/Stickers/serverStickers.md deleted file mode 100644 index 027d6f44..00000000 --- a/guide/Stickers/serverStickers.md +++ /dev/null @@ -1,14 +0,0 @@ -# $serverStickers - -To return all server stickers's id - -## Usage - -```bash -$serverStickers[Separator] -Example: -$serverStickers[, ] -``` - -### Output: - 992974663099629588, 992970796031017080 \ No newline at end of file diff --git a/guide/Stickers/sticker.md b/guide/Stickers/sticker.md deleted file mode 100644 index 16571b45..00000000 --- a/guide/Stickers/sticker.md +++ /dev/null @@ -1,20 +0,0 @@ -# $sticker - -To return an information about a sticker using ID\ -**Info** can be: name,desc,url,tags,time - -## Usage - -```bash -$sticker[Sticker ID;name;Info] -``` - -### Example: - - - !!exec $sticker[992974663099629588;name]

-
- - Smiley - -
\ No newline at end of file diff --git a/guide/Templates/eco_bal.md b/guide/Templates/eco_bal.md deleted file mode 100644 index 712f7485..00000000 --- a/guide/Templates/eco_bal.md +++ /dev/null @@ -1,17 +0,0 @@ -# Economy - Balance - -## Info: -A command for checking your economy balance - -## Configuration: -Trigger Type: `Message`
-Trigger: `/!(bal|balance)/gi`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `None`
- -## Token: -Clone by using this command in your own server: `!!clone vFHnD` - -###### Tags: \ No newline at end of file diff --git a/guide/Templates/eco_rob.md b/guide/Templates/eco_rob.md deleted file mode 100644 index 8c8a6ae2..00000000 --- a/guide/Templates/eco_rob.md +++ /dev/null @@ -1,17 +0,0 @@ -# Economy - Rob - -## Info: -A command for robbing someone - -## Configuration: -Trigger Type: `Message`
-Trigger: `/!(rob|robbery)/gi`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `None`
- -## Token: -Clone by using this command in your own server: `!!clone XC5sK` - -###### Tags: \ No newline at end of file diff --git a/guide/Templates/mod_ban.md b/guide/Templates/mod_ban.md deleted file mode 100644 index e46ecb7b..00000000 --- a/guide/Templates/mod_ban.md +++ /dev/null @@ -1,22 +0,0 @@ -# Moderation - Ban - -## Info: -A command for banning members from your server. - -## Configuration: -Trigger Type: `Word`
-Trigger: `!ban`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `None`
- -## Clone: -Clone by using this command in your own server: `!!clone VyCfP` - -::: danger -Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters -::: - - -###### Tags: \ No newline at end of file diff --git a/guide/Templates/mod_joinGate.md b/guide/Templates/mod_joinGate.md deleted file mode 100644 index e08de5f2..00000000 --- a/guide/Templates/mod_joinGate.md +++ /dev/null @@ -1,17 +0,0 @@ -# Moderation - Captcha Verification - -## Info: -A command for verification before the user can join the server. - -## Configuration: -Trigger Type: `On Join/Leave`
-Trigger: `add`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `YOUR STAFF CHAT`
- -## Clone: -Clone by using this command in your own server: `!!clone 5Tr2e` - -###### Tags: \ No newline at end of file diff --git a/guide/Templates/mod_mute.md b/guide/Templates/mod_mute.md deleted file mode 100644 index dc8ba12a..00000000 --- a/guide/Templates/mod_mute.md +++ /dev/null @@ -1,21 +0,0 @@ -# Moderation - Mute - -## Info: -A command for muting members from your server. - -## Configuration: -Trigger Type: `Word`
-Trigger: `/!(mute|shut)/gi`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `None`
- -## Clone: -Clone by using this command in your own server: `!!clone Otk6C` - -::: danger -Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters -::: - -###### Tags: \ No newline at end of file diff --git a/guide/Templates/mod_warn.md b/guide/Templates/mod_warn.md deleted file mode 100644 index aae3dcd8..00000000 --- a/guide/Templates/mod_warn.md +++ /dev/null @@ -1,21 +0,0 @@ -# Moderation - Warn - -## Info: -A command for warning members from your server. - -## Configuration: -Trigger Type: `Word`
-Trigger: `/!(warn|warning)/gi`
-Min. Perms: `None`
-Ignored Roles: `None`
-Run Only In: `None`
-Channel Used: `None`
- -## Clone: -Clone by using this command in your own server: `!!clone lpDsX` - -::: danger -Please be aware, that this code doesn't includes permissions checks!! Everyone can execute this command, which might ends in horrible disasters -::: - -###### Tags: \ No newline at end of file diff --git a/guide/Text/Array/arrayClear.md b/guide/Text/Array/arrayClear.md deleted file mode 100644 index 4cfddde4..00000000 --- a/guide/Text/Array/arrayClear.md +++ /dev/null @@ -1,18 +0,0 @@ -# $arrayClear -Deletes an array. - -## Usage - -```bash -$arrayClear[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Hello World; ]
Before=$arrayJoin[, ]
$arrayClear
After=$arrayJoin[, ]

-
- - Before=Hello, World
After= -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayConcat.md b/guide/Text/Array/arrayConcat.md deleted file mode 100644 index 99d81c7f..00000000 --- a/guide/Text/Array/arrayConcat.md +++ /dev/null @@ -1,22 +0,0 @@ -# $arrayConcat - -Merge new array with the current array - -## Usage - -```bash -$arrayConcat[List;separator;array name (optional)] -``` - -### Example: - - - !!exec $arrayCreate[Mido/Rake;/]
$arrayConcat[Azz/Finkz;/]
$arrayJoin[, ]

-
- - Mido, Rake, Azz, Finkz

-
-
- -### Note on Separator: -You can use regex as separator i.e `/separator/` \ No newline at end of file diff --git a/guide/Text/Array/arrayCount.md b/guide/Text/Array/arrayCount.md deleted file mode 100644 index 813e77f2..00000000 --- a/guide/Text/Array/arrayCount.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayCount - -An alias for `$arrayLength`. - -## Usage - -```bash -$arrayCount[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
$arrayCount

-
- - 3 - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayCreate.md b/guide/Text/Array/arrayCreate.md deleted file mode 100644 index 7495c947..00000000 --- a/guide/Text/Array/arrayCreate.md +++ /dev/null @@ -1,21 +0,0 @@ -# $arrayCreate -Creates an array from a list. - -## Usage - -```bash -$arrayCreate[List;separator;array name (optional)] -``` - -### Example: - - - !!exec $arrayCreate[Mido/Rake/Azz;/]
1 is $arrayGet[1]
2 is $arrayGet[2]
3 is $arrayGet[3]

-
- - 1 is Mido
2 is Rake
3 is Azz -
-
- -### Note on Separator: -You can use regex as separator i.e `/separator/` \ No newline at end of file diff --git a/guide/Text/Array/arrayElementCount.md b/guide/Text/Array/arrayElementCount.md deleted file mode 100644 index dc346673..00000000 --- a/guide/Text/Array/arrayElementCount.md +++ /dev/null @@ -1,20 +0,0 @@ -# $arrayElementCount - -This function is used to count the number of times a specific element appears in an array.\ - It takes three parameters: the element to count, whether or not to trim whitespace before comparing elements, and the name of the array to search - -## Usage - -```bash -$arrayElementCount[Element To Count;Trim before compare (yes/no);array name] -``` - -### Example: - - - !!exec $arrayCreate[Mido/Rake/Mido/Rake/Rake/Azz/Faj;/]
Rake repeated $arrayElementCount[Rake] times
Mido repeated $arrayElementCount[Mido] times
Azz repeated $arrayElementCount[Azz] times
Faj repeated $arrayElementCount[Faj] times

-
- - Rake repeated 3 times
Mido repeated 2 times
Azz repeated 1 times
Faj repeated 1 times -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayFilter.md b/guide/Text/Array/arrayFilter.md deleted file mode 100644 index a6568034..00000000 --- a/guide/Text/Array/arrayFilter.md +++ /dev/null @@ -1,34 +0,0 @@ -# $arrayFilter - -Iterates through each element in an array. If the code returns `false`, the element will be removed from the array. -::: warning Warning -Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. -
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. - -If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. -::: - -## Usage -```bash -$arrayFilter[Element Value;Element Index;array name]{ -CODE... -} -``` -## Loop Limits -Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. -| Tier | Limit | -| :------- | :--- | -| 0 (Free) | 50 | -| 3 (Freemium) | 50 | -| 4 (Pro) | 100 | -| 5 (Ultra) | 150 | - -### Example (Remove Hello): - - - !!exec $textSplit[Hello/World;/]
$arrayFilter[value]{
$if[$value==Hello]{
false
}
}
$arrayJoin[/] -
- - World - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayGet.md b/guide/Text/Array/arrayGet.md deleted file mode 100644 index ac46f897..00000000 --- a/guide/Text/Array/arrayGet.md +++ /dev/null @@ -1,18 +0,0 @@ -# $arrayGet -Returns the value of an element at the specified index in an array. - -## Usage - -```bash -$arrayGet[index;array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
First is $arrayGet[1]
Second is $arrayGet[2]
Third is $arrayGet[3]

-
- - First is Mido
Second is Rake
Third is Azz -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayInclude.md b/guide/Text/Array/arrayInclude.md deleted file mode 100644 index 227dfd7c..00000000 --- a/guide/Text/Array/arrayInclude.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayInclude - -To check if a value exists in the array. Returns `true` if the value exists, otherwise returns `false`. - -## Usage - -```bash -$arrayInclude[Value;array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
$arrayInclude[Rake]

-
- - true - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayJoin.md b/guide/Text/Array/arrayJoin.md deleted file mode 100644 index 5eb57c73..00000000 --- a/guide/Text/Array/arrayJoin.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayJoin - -Joins an array created using `$textSplit` with a specific separator. - -## Usage - -```bash -$arrayJoin[Separator (optional);array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Rake/Mido/Azz;/]
$arrayJoin[, ]

-
- - Rake, Mido, Azz - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayLength.md b/guide/Text/Array/arrayLength.md deleted file mode 100644 index 4144c6e1..00000000 --- a/guide/Text/Array/arrayLength.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayLength - -Returns the number of elements in an array. - -## Usage - -```bash -$arrayLength[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
$arrayLength

-
- - 3 - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayLoop.md b/guide/Text/Array/arrayLoop.md deleted file mode 100644 index d529766f..00000000 --- a/guide/Text/Array/arrayLoop.md +++ /dev/null @@ -1,34 +0,0 @@ -# $arrayLoop - -To loop functions in an array. -::: warning Warning -Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. -
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. - -If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. -::: - -## Usage -```bash -$arrayLoop[varName;index;array name (optional)]{ -CODE... -} -``` -## Loop Limits -Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. -| Tier | Limit | -| :------- | :--- | -| 0 (Free) | 50 | -| 3 (Freemium) | 50 | -| 4 (Pro) | 100 | -| 5 (Ultra) | 150 | - -## Example: - - - !!exec $textSplit[15,18,21;,]
$arrayLoop[age]{
age is $age
} -
- - age is 15
age is 18
age is 21 -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayMap.md b/guide/Text/Array/arrayMap.md deleted file mode 100644 index 92b9b0aa..00000000 --- a/guide/Text/Array/arrayMap.md +++ /dev/null @@ -1,34 +0,0 @@ -# $arrayMap - -To replace array values with another value. -::: warning Warning -Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. -
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. - -If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. -::: - -## Usage -```bash -$arrayMap[Element Value;Element Index;array name (optional)]{ -CODE -} -``` -## Loop Limits -Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. -| Tier | Limit | -| :------- | :--- | -| 0 (Free) | 50 | -| 3 (Freemium) | 50 | -| 4 (Pro) | 100 | -| 5 (Ultra) | 150 | - -### Example: - - - !!exec $textSplit[15,18,21;,]
$arrayMap[age]{
age is $age
}
$arrayJoin[, ]

-
- - age is 15, age is 18, age is 21 - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayPop.md b/guide/Text/Array/arrayPop.md deleted file mode 100644 index a7287945..00000000 --- a/guide/Text/Array/arrayPop.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayPop - -Removes, and returns the last element in an array. - -## Usage - -```bash -$arrayPop[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
last one is $arrayPop
before it is $arrayPop
before it is $arrayPop

-
- - last one is Azz
before it is Rake
before it is Mido -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayPush.md b/guide/Text/Array/arrayPush.md deleted file mode 100644 index 13a42ae0..00000000 --- a/guide/Text/Array/arrayPush.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayPush - -Adds an element to the end of an array. - -## Usage - -```bash -$arrayPush[Value;array name (optional)] -``` - -### Example: - - - !!exec $arrayPush[Mido]
$arrayPush[Rake]
$arrayPush[Azz]
$arrayJoin[/]

-
- - Mido/Rake/Azz - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayRemove.md b/guide/Text/Array/arrayRemove.md deleted file mode 100644 index dfc5e9bc..00000000 --- a/guide/Text/Array/arrayRemove.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayRemove - -Removes something from an array, using the index, and returns nothing. - -## Usage - -```bash -$arrayRemove[Index;Index... (optional);array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Hello World, how are you?; ]
$arrayRemove[1;2;3]
$arrayGet[1]

-
- - are - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayReverse.md b/guide/Text/Array/arrayReverse.md deleted file mode 100644 index 415eb5bb..00000000 --- a/guide/Text/Array/arrayReverse.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayReverse - -Reverses an array. - -## Usage - -```bash -$arrayReverse[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Number 1/Number 2/Number 3;/]
$arrayReverse
$arrayJoin[/]

-
- - Number 3/Number 2/Number 1 - -
\ No newline at end of file diff --git a/guide/Text/Array/arraySearch.md b/guide/Text/Array/arraySearch.md deleted file mode 100644 index 1988ac29..00000000 --- a/guide/Text/Array/arraySearch.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arraySearch - -To search for a value in an array. If it exists, it will return the position of the value. If not, `-1` is returned. - -## Usage - -```bash -$arraySearch[Value to search;array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
Mido is in position: $arraySearch[Mido]
Azz is in position: $arraySearch[Azz]
InvalidName is in position: $arraySearch[justsomeweirdrandom]

-
- - Mido is in position: 1
Azz is in position: 3
InvalidName is in position: -1 -
-
\ No newline at end of file diff --git a/guide/Text/Array/arraySet.md b/guide/Text/Array/arraySet.md deleted file mode 100644 index f4ec6d18..00000000 --- a/guide/Text/Array/arraySet.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arraySet - -Sets the value of an index in an array. - -## Usage - -```bash -$arraySet[index;value;array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
Before: $arrayGet[3]
$arraySet[3;Finkz]
After: $arrayGet[3]

-
- - Before: Azz
After: Finkz -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayShift.md b/guide/Text/Array/arrayShift.md deleted file mode 100644 index 01df2bf3..00000000 --- a/guide/Text/Array/arrayShift.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayShift - -Removes and returns the first element in an array. - -## Usage - -```bash -$arrayShift[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Azz;/]
first one is $arrayShift
after it is $arrayShift
after it is $arrayShift

-
- - first one is Mido
after it is Rake
after it is Azz -
-
diff --git a/guide/Text/Array/arrayShuffle.md b/guide/Text/Array/arrayShuffle.md deleted file mode 100644 index e5551b2c..00000000 --- a/guide/Text/Array/arrayShuffle.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayShuffle - -To shuffle an existing array. - -## Usage - -```bash -$arrayShuffle[array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Rake/Azz/Mido;/]
$arrayShuffle
$arrayJoin[/]

-
- - Azz/Mido/Rake - -
\ No newline at end of file diff --git a/guide/Text/Array/arraySlice.md b/guide/Text/Array/arraySlice.md deleted file mode 100644 index 343c75d9..00000000 --- a/guide/Text/Array/arraySlice.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arraySlice - -To keep only a part of the array, *slicing* it. - -## Usage - -```bash -$arraySlice[from;to;array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido Rake Azz Finkz; ]
$arraySlice[2;3]
$arrayJoin[ ]

-
- - Rake Azz - -
\ No newline at end of file diff --git a/guide/Text/Array/arraySort.md b/guide/Text/Array/arraySort.md deleted file mode 100644 index 121fdb77..00000000 --- a/guide/Text/Array/arraySort.md +++ /dev/null @@ -1,45 +0,0 @@ -# $arraySort - -Sorts an array, created with `$textSplit`. -Can be sorted numerically or alphabetically, or depending on occurrences. - -## Usage - -```bash -$arraySort[Ascending (yes/no, default is no);Sort Type;array name (optional)] -``` - -### Sort Types: -`num`: Sort Numerically\ -`alpha`: Sort Alphabetically\ -`frequent`: Sort By how many element got repeated - -### Example (Sort Occurrences): - - - !!exec $textSplit[3.Mido
1.Azz
2.Rake
2.Rake
3.Mido
3.Mido
4.Finkz;
]
$arraySort[no;frequent]

-
- - The sorted list is
3.Mido
2.Rake
4.Finkz
1.Azz

-
-
- -### Example (Sort Numerically): - - - !!exec $textSplit[1. Azz
3.Mido
2.Rake
4.Finkz;
]
$arraySort[yes;num]
The sorted list is
$arrayJoin[
]

-
- - The sorted list is
1. Azz
2.Rake
3.Mido
4.Finkz

-
-
- -### Example (Sort Alphabetically): - - - !!exec $textSplit[3.Mido
1.Azz
2.Rake
4.Finkz;
]
$arraySort[yes;alpha]
The sorted list is
$arrayJoin[
]

-
- - The sorted list is
1. Azz
4.Finkz
3.Mido
2.Rake -
-
\ No newline at end of file diff --git a/guide/Text/Array/arrayUnique.md b/guide/Text/Array/arrayUnique.md deleted file mode 100644 index 2351cde8..00000000 --- a/guide/Text/Array/arrayUnique.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayUnique - -Return the unique elements in the array, glued with the separator. - -## Usage - -```bash -$arrayUnique[Separator (default ', ');Trim Element before check? (default is yes);array name (optional)] -``` - -### Example: - - - !!exec $textSplit[Mido/Rake/Rake/Mido/Azz;/]
$arrayUnique[, ]

-
- - Mido, Rake, Azz - -
\ No newline at end of file diff --git a/guide/Text/Array/arrayUnshift.md b/guide/Text/Array/arrayUnshift.md deleted file mode 100644 index afb5c7e3..00000000 --- a/guide/Text/Array/arrayUnshift.md +++ /dev/null @@ -1,19 +0,0 @@ -# $arrayUnshift - -Adds an element to the start of the array. - -## Usage - -```bash -$arrayUnshift[value;array name (optional)] -``` - -### Example: - - - !!exec $arrayUnshift[Mido]
$arrayUnshift[Rake]
$arrayUnshift[Azz]
$arrayJoin[/]

-
- - Azz/Rake/Mido - -
\ No newline at end of file diff --git a/guide/Text/Components/addButton.md b/guide/Text/Components/addButton.md deleted file mode 100644 index 1ee55b7f..00000000 --- a/guide/Text/Components/addButton.md +++ /dev/null @@ -1,25 +0,0 @@ -# $addButton -Adds a button to an existing message. Use `$button` to send a message with a button. - -## Usage -`$addButton[Message ID;Label;style/url;link/id;emoji(optional);Add to a new role (yes/no, optional); disabled (yes/no, optional)]` -
- -## Example -(Add a simple button) -![](https://cdn.discordapp.com/attachments/914682255346118687/938578211380543578/Screenshot_20220202202417.jpg) -(Add in new row) -![](https://cdn.discordapp.com/attachments/914682255346118687/938578211695112192/Screenshot_20220202202711.jpg) -(Add disabled) -![](https://cdn.discordapp.com/attachments/914682255346118687/938578212018085899/Screenshot_20220202203325.jpg) - -:::tip Available colors -`red, green, blurple, grey, url` -\ -**URL buttons are grey by default.** - -* You can use normal unicode emojis, custom emojis with their ID, or you can use `$customEmoji`. -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Components/addMenu.md b/guide/Text/Components/addMenu.md deleted file mode 100644 index 59193242..00000000 --- a/guide/Text/Components/addMenu.md +++ /dev/null @@ -1,39 +0,0 @@ -# $addMenu -Add a menu to existing message - -## Usage -```bash -$addMenu[ - {channel=channel id} - {message=message id} - {id=Menu ID} - {ph=Placeholder} - - {option=Option 1} - {desc=Option 1 Description} - {value=Option 1 ID} - {emoji=Option 1 Emoji} - - {option=Option 2} - {desc=Option 2 Description} - {value=Option 2 ID} - {emoji=Option 2 Emoji} - ... - ] -``` - -### Example: -```bash -$addMenu[ - {chid=$channelID} - {mid=1151607052007907449} - {id=mymenu} - {option=Rake} - {value=rake} - - {option=Mido} - {value=mido}] -``` - -### Output -![](https://i.imgur.com/yMUAza7.png) \ No newline at end of file diff --git a/guide/Text/Components/awaitButton.md b/guide/Text/Components/awaitButton.md deleted file mode 100644 index d377e2b2..00000000 --- a/guide/Text/Components/awaitButton.md +++ /dev/null @@ -1,51 +0,0 @@ -# $awaitButton -Waits for a button to be pressed and return its button id, or `undefined` in case no button was pressed when the timeout is reached. -:::tip Tip -This function supports the [Message Curl Format](/CodeReferences/ref.message_curl_format.html). -This way, you can send a message with buttons by using `{button:label:style/url:emoji:id:newline(yes/no)}`. -::: - -#### Usage: `$awaitButton[Message (optional);user id (optional, default:author);timeout (optional, default:15s);button id1 (optional);button id2...]` -
- -### Timeout -The maximum time the bot waits for a user to click a button.\ -Accepts time in the format `10s` for example.\ -The max time is `60 x (bot tier + 1)` seconds, for example for tier 3 it would be `240` seconds. - -::: details Examples - -:::details Examples -(Simple response) - -![](https://cdn.discordapp.com/attachments/914682255346118687/938556903116652594/Screenshot_20220202190956.jpg) - -(Usage example) -```php -$let[pressedButton;$awaitButton[Which color is my favorite? -{button:Green:GREEN::green} -{button:Blue:BLUE::blue} -{button:Red:RED::red};$authorID;15s;red;blue;green]] -/* Saves the pressed button id in a temporary var, so you can retrieve later */ - -$if[$pressedButton!=red] -Wrong! -$else -Correct! -$endif -/* If the button id is different from red, which is the right answer, then incorrect. Else, correct. */ -``` -Choosing something other them red, or nothing. -![](https://cdn.discordapp.com/attachments/914682255346118687/938559970293714984/Screenshot_20220202191954.jpg) - -Choosing red. - -![](https://cdn.discordapp.com/attachments/914682255346118687/938559970792845312/Screenshot_20220202191947.jpg) -::: - -:::tip Note -You can send an embed using the [Message Curl Format](/CodeReferences/ref.message_curl_format.md). -::: - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Components/awaitMenu.md b/guide/Text/Components/awaitMenu.md deleted file mode 100644 index 536a0926..00000000 --- a/guide/Text/Components/awaitMenu.md +++ /dev/null @@ -1,24 +0,0 @@ -# $awaitMenu - -To wait for a menu option to be selected and return the selected option(s) values. -If nothing is selected, it returns `undefined`. -If multiple values are selected, all of them will be returned, separated with `,`. - -## Usage - -```bash -$awaitMenu[Message (optional);user id (optional, default:author);timeout (optional, default:15s);menu id1 (optional);menu id2...] -``` -### Timeout -The maximum time the bot waits for a user to select an option.\ -Accepts time in the format `10s` for example.\ -The max time is `60 x (bot tier + 1)` seconds, for example for tier 3 it would be `240` seconds. - -### Example: - - - !!exec You selected: $awaitMenu[
{title: Test}
{menu:
{id=test}
{placeholder=Select}
{min=1}
{max=1}
{option=Mido}
{desc=A guy}
{value=mido}
{option=Rake}
{desc=Another guy}
{value=rake}
}
;$authorID;;test]

-
-
- -![](https://i.imgur.com/58Wzc05.gif) diff --git a/guide/Text/Components/button.md b/guide/Text/Components/button.md deleted file mode 100644 index b0efff22..00000000 --- a/guide/Text/Components/button.md +++ /dev/null @@ -1,101 +0,0 @@ -# $button -Creates a discord button. - -## Usage -```php -$button[label;style;link/id;emoji (optional);disabled (yes/no, optional);new line (yes/no, optional)] -``` - -## Basic button -The simplest button possible, has a label and ID. - -```php -$button[Click me!;;verySimpleButton] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126652117373964338/basic-button.png) - -::: tip What's an ID? -ID is used to identify the button clicked. This way, you can decide what happens after clicking a specific button. -Keep in mind, that there can't be two buttons with the same ID in one message. -::: - -## Colors -There are four button colors discord allows you to use: -`blurple`, `grey`, `green`, and `red`. - -```php -$button[Blurple;blurple;blurpleButton] -$button[Grey;grey;greyButton] -$button[Green;green;greenButton] -$button[Red;red;redButton] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126656639915790428/color-buttons.png) - -## Links -You can also create buttons that open a link when clicked. -To make one, you have to set the style to `url`, and put the link as ID. -```php -$button[Check out our website!;url;https://ccommandbot.com] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126655903555399781/url-button.png) - -## Emojis -Both interaction and url buttons can have emojis. -```php -Please verify! -$button[Verify;grey;heartButton;:detective:] -$button[Server rules;url;https://discord.com/channels/772051119538176021/772051119923789847/818136570896449577;📜] -$button[Open ticket;grey;openTicket;<:thinking:833253889833697300>] -$button[Leave server;grey;leaveServer;$customEmoji[no]] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126661173086015498/image.png) - -## Disabled -You can disable any button by adding `yes` after the emoji. -```php -We are not looking for new staff members at the moment. -$button[Apply;blurple;applyButton;;yes] -$button[View requirements;blurple;viewRequirements;;no] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126662743408255056/image.png) - -## New lines -By default, buttons are placed in one line. -You can change that by adding `yes` after the disabled parameter. -```php -$button[Button in the first line;grey;button1;;;no] -$button[Button in a new line;grey;button2;;;yes] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126663318514450492/newlined.png) - -## Curl format -In some cases you may want to include a button in a message sent by a function. -An example of a function like this would be a `$sendmessage` function. - -### Curl usage: -Mind that the order of `emoji` and `id` is reversed in this case, and the separator is `:` instead of `;`. -``` -{button:label:style:emoji:id:newLine (yes/no, optional):disabled (yes/no, optional)} -``` - -### Example: -```php -$sendmessage[How's your day going? - {button:Fine:grey:😀:fine} - {button:Bad:grey:😢:bad} -] -``` -![](https://cdn.discordapp.com/attachments/957286111250624552/1126666908662513684/image.png) - - -::: tip Button handling -Now, as you know how to create buttons, you may want to know how to handle them. -Check these pages: - -- [Button trigger](../../Trigger/button.md) -- `$awaitButton` - -::: - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Components/buttonEmoji.md b/guide/Text/Components/buttonEmoji.md deleted file mode 100644 index d1cc5416..00000000 --- a/guide/Text/Components/buttonEmoji.md +++ /dev/null @@ -1,10 +0,0 @@ -# $buttonEmoji - -Return the clicked button's emoji in the [Button trigger](/Trigger/button.html). If there is no emoji, it returns `undefined`. - -## Usage - -```bash -$buttonEmoji -``` - diff --git a/guide/Text/Components/buttonID.md b/guide/Text/Components/buttonID.md deleted file mode 100644 index 16f42d32..00000000 --- a/guide/Text/Components/buttonID.md +++ /dev/null @@ -1,10 +0,0 @@ -# $buttonID - -Returns the Button ID that triggered the command. Returns `undefined` if the trigger isn't Button. - -## Usage - -```bash -$buttonID -``` - diff --git a/guide/Text/Components/buttonIsDisabled.md b/guide/Text/Components/buttonIsDisabled.md deleted file mode 100644 index 7ead8be0..00000000 --- a/guide/Text/Components/buttonIsDisabled.md +++ /dev/null @@ -1,11 +0,0 @@ -# $buttonIsDisabled - -Returns true if the button is disabled, otherwise returns `false`. -
If there's no button, return `undefined`. - -## Usage - -```bash -$buttonIsDisabled -``` - diff --git a/guide/Text/Components/buttonLabel.md b/guide/Text/Components/buttonLabel.md deleted file mode 100644 index 38a8b007..00000000 --- a/guide/Text/Components/buttonLabel.md +++ /dev/null @@ -1,10 +0,0 @@ -# $buttonLabel - -Return the clicked button's label in the Button trigger. If the button doesn't have a label, return `undefined`. - -## Usage - -```bash -$buttonLabel -``` - diff --git a/guide/Text/Components/buttonStyle.md b/guide/Text/Components/buttonStyle.md deleted file mode 100644 index eff3f2d3..00000000 --- a/guide/Text/Components/buttonStyle.md +++ /dev/null @@ -1,10 +0,0 @@ -# $buttonStyle - -Return the clicked button's style, e.g. `blurple`/`red`/`url` in the Button trigger. If none, `undefined` is returned. - -## Usage - -```bash -$buttonStyle -``` - diff --git a/guide/Text/Components/buttonURL.md b/guide/Text/Components/buttonURL.md deleted file mode 100644 index 9bd3aa34..00000000 --- a/guide/Text/Components/buttonURL.md +++ /dev/null @@ -1,10 +0,0 @@ -# $buttonURL - -Return the clicked button's URL in Button trigger if it exists. Else, returns `undefined` if not found. - -## Usage - -```bash -$buttonURL -``` - diff --git a/guide/Text/Components/disableButton.md b/guide/Text/Components/disableButton.md deleted file mode 100644 index 30ef45e2..00000000 --- a/guide/Text/Components/disableButton.md +++ /dev/null @@ -1,21 +0,0 @@ -# $disableButton -Disables a button using its `(ID/label/Emoji/URL)`. - -#### Usage: `$disableButton[Message ID;Label/Emoji/URL/ID (optional, default: disables the last button); Channel ID (optional, default $channelID)]` - -##### Example -(Disable button by emoji) -![](https://cdn.discordapp.com/attachments/914682255346118687/938548624093224960/Screenshot_20220202182740.jpg) -(Disable button by URL) -![](https://cdn.discordapp.com/attachments/914682255346118687/938548624298762310/Screenshot_20220202182855.jpg) -(Disable button by ID) -![](https://cdn.discordapp.com/attachments/914682255346118687/938548624743362560/Screenshot_20220202183406.jpg) -(Disable button by label) -![](https://cdn.discordapp.com/attachments/914682255346118687/938548624525234276/Screenshot_20220202182932.jpg) -(Disable the last button ) -![](https://cdn.discordapp.com/attachments/914682255346118687/938548624940482560/Screenshot_20220202183637.jpg) - -
- -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Components/disableButtons.md b/guide/Text/Components/disableButtons.md deleted file mode 100644 index a282084b..00000000 --- a/guide/Text/Components/disableButtons.md +++ /dev/null @@ -1,10 +0,0 @@ -# $disableButtons - -Disable buttons in a message, not providing a Button ID will disable every button in the message. - -## Usage - -```bash -$disableButtons[Message ID;Button ID 1;Button ID 2;....] -``` - diff --git a/guide/Text/Components/disableMenu.md b/guide/Text/Components/disableMenu.md deleted file mode 100644 index ade05a77..00000000 --- a/guide/Text/Components/disableMenu.md +++ /dev/null @@ -1,10 +0,0 @@ -# $disableMenu - -Disable menus in the given message, not providing a Menu ID will disable every menu in the message. - -## Usage - -```bash -$disableMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] -``` - diff --git a/guide/Text/Components/editButton.md b/guide/Text/Components/editButton.md deleted file mode 100644 index f8afea28..00000000 --- a/guide/Text/Components/editButton.md +++ /dev/null @@ -1,21 +0,0 @@ -# $editButton -Edits an existing button using its `(ID/label/Emoji/URL)`. - -#### Usage: `$editButton[Message ID;Query (optional, default: edit the last button);label/style/emoji/disabled/url/custom_id;New Value]` - -::: details Example -![](https://cdn.discordapp.com/attachments/914682255346118687/938564348102717440/unknown.jpeg) -(Disable the last button) -![](https://cdn.discordapp.com/attachments/914682255346118687/938568269349142538/Screenshot_20220202194114.jpg) - -(Change the label by URL) -![](https://cdn.discordapp.com/attachments/914682255346118687/938568269818916864/Screenshot_20220202194404.jpg) - -(Change the color by label) -![](https://cdn.discordapp.com/attachments/914682255346118687/938568270053789737/Screenshot_20220202194603.jpg) - -::: - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Components/editMenu.md b/guide/Text/Components/editMenu.md deleted file mode 100644 index fed41e59..00000000 --- a/guide/Text/Components/editMenu.md +++ /dev/null @@ -1,15 +0,0 @@ -# $editMenu - -Edits a menu in given message.\ -`type` can be: `id/disabled/max/min/placeholder/ph/options`. - -## Usage - -```bash -$editMenu[message id;menu id;type;new value] -``` - -### Example: -```bash -$editMenu[$messageID;menu_id;placeholder;A new placeholder] -``` \ No newline at end of file diff --git a/guide/Text/Components/enableButtons.md b/guide/Text/Components/enableButtons.md deleted file mode 100644 index 0198206a..00000000 --- a/guide/Text/Components/enableButtons.md +++ /dev/null @@ -1,10 +0,0 @@ -# $enableButtons - -Enable buttons in a message, not providing a Button ID will enable every button in the message. - -## Usage - -```bash -$enableButtons[Message ID;Button ID 1;Button ID 2;....] -``` - diff --git a/guide/Text/Components/enableMenu.md b/guide/Text/Components/enableMenu.md deleted file mode 100644 index a4a7acb3..00000000 --- a/guide/Text/Components/enableMenu.md +++ /dev/null @@ -1,10 +0,0 @@ -# $enableMenu - -Enables menus in a given message, not providing a Menu ID will enable every menu in the message. - -## Usage - -```bash -$enableMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] -``` - diff --git a/guide/Text/Components/eventSelected.md b/guide/Text/Components/eventSelected.md deleted file mode 100644 index df6a89d1..00000000 --- a/guide/Text/Components/eventSelected.md +++ /dev/null @@ -1,14 +0,0 @@ -# $eventSelected - -Returns values that were selected by the user using `$selectMenu`. - -## Usage - -```bash -$eventSelected or $eventSelected[position;seperator] -``` - -### For Example: - `$eventSelected` would return the first selected value.\ - `$eventSelected[2]` would return the second selected value, since it was the second value clicked by the user.\ - `$eventSelected[;,]` would return all selected values separated with `,`. diff --git a/guide/Text/Components/eventTargetID.md b/guide/Text/Components/eventTargetID.md deleted file mode 100644 index 06394cef..00000000 --- a/guide/Text/Components/eventTargetID.md +++ /dev/null @@ -1,23 +0,0 @@ -# $eventTargetID - -Returns the ID of the target selected by the user when using a **context menu command**. - -## Usage - -```bash -$eventTargetID -``` - -### For Example: - -For a **User Command (Context Menu)**, `$eventTargetID` returns the **User ID** of the user selected from the context menu. - -For a **Message Command (Context Menu)**, `$eventTargetID` returns the **Message ID** of the message selected from the context menu. - -```php -$interactionReply[Target ID: $eventTargetID] -``` - -If `@Mido` selects a User Command on `@Zero`, `$eventTargetID` would return Zero's User ID. - -If `@Mido` selects a Message Command on a message, `$eventTargetID` would return the selected message's ID. diff --git a/guide/Text/Components/menuId.md b/guide/Text/Components/menuId.md deleted file mode 100644 index 0dbd5b16..00000000 --- a/guide/Text/Components/menuId.md +++ /dev/null @@ -1,10 +0,0 @@ -# $menuID - -Return the Menu ID of the menu triggered with the [Select Menu Trigger](../../Trigger/menu.md). - -## Usage - -```bash -$menuID -``` - diff --git a/guide/Text/Components/removeButton.md b/guide/Text/Components/removeButton.md deleted file mode 100644 index cbb896e8..00000000 --- a/guide/Text/Components/removeButton.md +++ /dev/null @@ -1,20 +0,0 @@ -# $removeButton -Removes a button from an existing message using its `(ID/label/Emoji/URL)`. - -#### Usage: `$removeButton[Message ID;Label/Emoji/URL/ID (optional, empty means removing the last button)]` -
- -:::details Examples -(Remove Button using its label) -```php -$removeButton[863xxxxxxxxxx21130;Visit example.com] -``` - -(Remove the Last button) -```php -$removeButton[863xxxxxxxxxx21130] -``` -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Components/removeButtons.md b/guide/Text/Components/removeButtons.md deleted file mode 100644 index 5ca5346d..00000000 --- a/guide/Text/Components/removeButtons.md +++ /dev/null @@ -1,10 +0,0 @@ -# $removeButtons -Removes multiple buttons from a message using their IDs. - -#### Usage: `$removeButtons[Message ID;Button ID1;Button ID2...]` -
- -![](https://cdn.discordapp.com/attachments/914682255346118687/938537575486980136/Screenshot_20220202175147_1.jpg) - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Components/removeEmbed.md b/guide/Text/Components/removeEmbed.md deleted file mode 100644 index 90a548c7..00000000 --- a/guide/Text/Components/removeEmbed.md +++ /dev/null @@ -1,17 +0,0 @@ -# $removeEmbed - -remove an embed or all embeds from a message - -## Usage - -```bash -$removeEmbed[Channel ID (default is $channelID);Message ID (default is $messageID);Embed Number (default is 1)] -``` - -### Note: -You can remove all embeds by setting embed number to `all` - -### Example: -```bash -$removeEmbed[$channelID;$messageID;1] -``` \ No newline at end of file diff --git a/guide/Text/Components/removeMenu.md b/guide/Text/Components/removeMenu.md deleted file mode 100644 index 27bdfef0..00000000 --- a/guide/Text/Components/removeMenu.md +++ /dev/null @@ -1,10 +0,0 @@ -# $removeMenu - -Removes menus in a given message, not providing a Menu ID will remove every menu in the message. - -## Usage - -```bash -$removeMenu[message id;Menu ID 1;Menu ID 2;Menu ID 3;....] -``` - diff --git a/guide/Text/Components/selectMenu.md b/guide/Text/Components/selectMenu.md deleted file mode 100644 index 8166ef0b..00000000 --- a/guide/Text/Components/selectMenu.md +++ /dev/null @@ -1,196 +0,0 @@ -# $selectMenu -Creates a Menu with options. - -#### Usage: `$selectMenu[{menu structure]` works only for one option - -#### Menu Structure -to construct a menu inside $selectMenu, it needs to follow this structure -``` -{id=menu id} -{placeholder/ph=A placeholder for the menu} -{min=minimum options to be selected (i.e 1)} -{max=maximum options to be selected (i.e 5)} -{type=the menu type (i.e text/user/role/mention/channel)} - - -// Each option can be structured like this -{option=Option name} -{value=option id} -{desc=description of the option (optional)} -{emoji=an emoji of the option (optional)} - -``` -* `type` the menu type, can be `text` (default), `user` (to select a user), `role` (role select), `mention` (role or user select), `channel` (channel select) -* `id` the id of menu must be unique on multiple menus -* `placeholder` -* `min` minimum to select (optional) -* `max` maximum to select (optional) -* `option` label of option -* `desc` description of option -* `value` id of option ,which `$eventSelected` returns when the user selects the option -* `emoji` emoji for option (optional) - -Info: -* You can have up to 5 menu in a message -* You can add maximal 20 options for each menu - -## Examples -### Sending a menu with some options with $selectMenu -```php -$selectMenu[ - {id=my_menu} - {ph=Select the option} - {type=text} - {min=1} - {max=2} - - {option=Option 1} - {value=option_1} - - {option=Option 2} - {value=option_2} - - {option=Option 3} - {value=option_3} -] -``` -![](https://i.imgur.com/pSIYauj.png) - -### Sending a menu with some options and selected some of them -```php -$selectMenu[ - {id=my_menu} - {ph=Select the option} - {type=text} - {min=1} - {max=2} - - {option=Option 1} - {value=option_1} - - {option=Option 2} - {value=option_2} - - {option=Option 3} - {value=option_3} - - {selected=option_1} - {selected=option_3} -] -``` -![](https://i.imgur.com/gAe2sP0.png) - - -### Sending a menu to select user with $selectMenu -```php -$selectMenu[ - {id=my_menu} - {ph=Select the user} - {type=user} - {min=1} - {max=2} -] -``` -![](https://i.imgur.com/TuXQ5nN.png) - -### Sending a menu to select user with $sendMessage -```php -$sendMessage[ - {menu: - {id=my_menu} - {ph=Select the user} - {type=user} - {min=1} - {max=2} - } -] -``` -![](https://i.imgur.com/EXOYY1k.png) - -### Sending a menu with selected user -```php -$selectMenu[ - {id=my_menu} - {ph=Select the user} - {type=user} - {min=1} - {max=2} - {selected_user=$userID} -] -``` -![](https://i.imgur.com/UmFu9Of.png) - -### Sending a menu with selected role -```php -$selectMenu[ - {id=my_menu} - {ph=Select the role} - {type=role} - {min=1} - {max=2} - {selected_role=$roleID[Test1]} -] -``` -![](https://i.imgur.com/XldvSKC.png) - -### Sending a menu with selected channel -```php -$selectMenu[ - {id=my_menu} - {ph=Select the channel} - {type=channel} - {min=1} - {max=2} - {selected_channel=$channelID} -] -``` -![](https://i.imgur.com/gNDtTWP.png) - -### Sending a menu with selected mentionable (user / role) -```php -$selectMenu[ - {id=my_menu} - {ph=Select user or role} - {type=mention} - {min=1} - {max=2} - {selected_role=$roleID[Test1]} - {selected_user=$userID} -] -``` -![](https://i.imgur.com/ZkamUGb.png) - -::: tip {key=value} what is this for a syntax? -This syntax is called curl args.It is really similar to curl message.Especially new Functions support it ,you can use !!func `function name` to check if it supports curl arguments. - [Learn more](../../Other/curl.md) -::: - -::: tip Do you want to add a menu inside a Function as a parameter, like `$sendMessage[text]`? - -Use: -``` -{menu: -{id=id} -{placeholder=Pls select your answer!} -{min=1} -{max=2} -{option=Option one } -{desc=txt for one} -{value=one} -{emoji=$customEmoji[accept]} -} -``` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) - -Link escapes are needed, use `\` to escape characters. Read [me](../../Other/syntax.md) to see more -::: - -::: tip -Using the menu as trigger check here to [learn more](../../Trigger/menu.md). -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Condition/checkCondition.md b/guide/Text/Condition/checkCondition.md deleted file mode 100644 index 423ee6fb..00000000 --- a/guide/Text/Condition/checkCondition.md +++ /dev/null @@ -1,32 +0,0 @@ -# $checkCondition - -Checks if given expression is true or false. - -## Usage - -```bash -$checkCondition[Expression] -``` - -### Example: - - - !!exec $checkCondition[$username==Mido]

-
- - true

-
-
- -### Example: - - - !!exec $checkCondition[10<5]

-
- - false - -
- -## To know more about expressions -Read about it [here](../../CodeReferences/ref.expression.md) diff --git a/guide/Text/Condition/conditional.md b/guide/Text/Condition/conditional.md deleted file mode 100644 index c8d34273..00000000 --- a/guide/Text/Condition/conditional.md +++ /dev/null @@ -1,22 +0,0 @@ -# $conditional - -return A if condition is true, B if condition is false - -## Usage - -```bash -$conditional[condition;A;B] -``` - -### Example: - - - !!exec $conditional[$username==Mido;You are Mido;You are Rake]

-
- - You are Mido

-
-
- -### Output (if Rake run the command): -You are Rake \ No newline at end of file diff --git a/guide/Text/Condition/else.md b/guide/Text/Condition/else.md deleted file mode 100644 index 50a30ebd..00000000 --- a/guide/Text/Condition/else.md +++ /dev/null @@ -1,17 +0,0 @@ -# $else - -is used in case $if and $elseIf is not true - -## Usage - -```bash -$if[1==2] -CODE BLOCk -$elseIf[3==4] -ANOTHER CODE BLOCK -$endelseif -$else -ELSE CODE BLOCK -$endIf -``` - diff --git a/guide/Text/Condition/elseif.md b/guide/Text/Condition/elseif.md deleted file mode 100644 index 7c7ab477..00000000 --- a/guide/Text/Condition/elseif.md +++ /dev/null @@ -1,12 +0,0 @@ -# $elseif - -will be checked if $if was false, should be ended with $endelseif - -## Usage - -```bash -$elseIf[EXPRESSION] -CODE BLOCK -$endelseif -``` - diff --git a/guide/Text/Condition/endIf.md b/guide/Text/Condition/endIf.md deleted file mode 100644 index 377ed3d9..00000000 --- a/guide/Text/Condition/endIf.md +++ /dev/null @@ -1,12 +0,0 @@ -# $endIf - -is used to end the whole $if block - -## Usage - -```bash -$if[EXPRESSION] -CODE BLOCK -$endIf -``` - diff --git a/guide/Text/Condition/endelseif.md b/guide/Text/Condition/endelseif.md deleted file mode 100644 index d34a64c5..00000000 --- a/guide/Text/Condition/endelseif.md +++ /dev/null @@ -1,12 +0,0 @@ -# $endelseif - -is used to close $elseIf - -## Usage - -```bash -$elseIf[EXPR] -CODE BLOCK -$endelseif -``` - diff --git a/guide/Text/Condition/if.md b/guide/Text/Condition/if.md deleted file mode 100644 index b01c4548..00000000 --- a/guide/Text/Condition/if.md +++ /dev/null @@ -1,130 +0,0 @@ -# $if -Checks An expression and executes code Only if that expression is true - -## Shortest Syntax -```bash -$if[EXPRESSION] - CODE -$endIf -``` - -## What is expression? -Read about it [here](../../CodeReferences/ref.expression.md) - -##### Example 1 only with $if - -Since the username of the executor is Tom it executed the if block -
- - - !!exec $if[$username==Tom]
- Oh, you are Tom!
- $endIf -
- - Oh, you are Tom! - -
- -##### Example 2 only with $if and $else - -Since the username is not Tom it executes the else block -
- - - !!exec $if[$username==Tom]
- Oh, you are Tom!
- $else
- You are not Tom!
- $endIf -
- - You are not Tom! - -
- -##### Example 3 $if , $else and $elseif - -Since the username is not Tom .It goes to the next if statement ,which is $elseif[$username==Lisa] and it will execute it -
- - - !!exec $if[$username==Tom]
- Oh, you are Tom!
- $elseif[$username==Lisa]
- You are Lisa!
- $endelseIf
- $else
- I don't know you :C
- $endIf -
- - You are Lisa! - -
- -##### Example 4 $if , $else and $elseif - -Since the username is not Tom .It goes to the next if statement ,which is $elseif[$username==Lisa] and it will execute it - -Info: The second else if will get never executed ,because it will exit the statement after the first true expression -
- - - !!exec $if[$username==Tom]
- Oh, you are Tom!
- $elseif[$username==Lisa]
- 1.You are Lisa!
- $endelseIf
- $elseif[$username==Lisa]
- 2.You are Lisa!
- $endelseIf
- $else
- I don't know you :C
- $endIf -
- - 1.You are Lisa! - -
- -##### Example 5 multiplie condtions in if with && or || -Expression can accept multiple conditions, use `||` or `&&` as separators -
`||` is for OR -
`&&` is for AND - -Example: -```php -$username==Mido&&$country==Egypt -``` -Condition 1: `$username==Mido` -Condition 2: `$country==Egypt` -But this expression will only be true only if both condition 1 **AND** (because of &&) condition 2 is `true` - -The Example below will execute since $username==Tom is false but the second expression is true .It wouldn't work with && -
- - - !!exec $if[$username==Tom||$username=Lisa]
- You are Tom or Lisa
- $endIf -
- - You are Tom or Lisa - -
- -The Example will only execute if the username is Lisa and their tag is 9999 - - - !!exec $if[$username==Lisa&&$discriminator=9999]
- You are Lisa with tag 9999
- $endIf
-
- - You are Lisa with tag 9999 - -
- -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Embed/addField.md b/guide/Text/Embed/addField.md deleted file mode 100644 index d70963e5..00000000 --- a/guide/Text/Embed/addField.md +++ /dev/null @@ -1,59 +0,0 @@ -# $addField -Adds fields to a message embed. - -#### Usage: `$addField[title;value;inline(yes/no default=yes)(optional)]` -
- - - !!exec $addField[title;value;no]
- $addField[title2;value2]
- $addField[title3;value3]
- $addField[title4;value4]
-
- - - - - value - - - value2 - - - value3 - - - value4 - - - - -
- -$addField with hyperlinks: -Usage: `\[link\](https://ccommandbot.com "tooltip(optional)")` - - - !!exec $addField[title;This is a field with \[link\](https://ccommandbot.com "tooltip")] - - - - - - This is a description hello - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{field:name:value:inline(yes/no default=yes)(optional)}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Embed/addTimestamp.md b/guide/Text/Embed/addTimestamp.md deleted file mode 100644 index c0ce10dc..00000000 --- a/guide/Text/Embed/addTimestamp.md +++ /dev/null @@ -1,41 +0,0 @@ -# $addTimestamp -Adds a timestamp to a message embed. - -#### Usage: `$addTimestamp` or `$addTimestamp[ms]` -
- - - !!exec $addTimestamp - - - - - - - -or with specified Time - - - - !!exec $addTimestamp[$parseTime[13/09/2021]] - - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{timestamp:ms}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Embed/attachment.md b/guide/Text/Embed/attachment.md deleted file mode 100644 index 2b940b57..00000000 --- a/guide/Text/Embed/attachment.md +++ /dev/null @@ -1,14 +0,0 @@ -# $attachment - -Adds an attachment to a message.\ -\ -If the name field is given, you must specify the extension for the attachment (png, webp, or gif) - -## Usage - -```bash -$attachment[data;name (optional);type (url or buffer) (optional);spoiler (yes/no, default is no) (optional)] -``` - -## Example -![](https://i.imgur.com/ZoePBlD.png) diff --git a/guide/Text/Embed/author.md b/guide/Text/Embed/author.md deleted file mode 100644 index 06d31cd0..00000000 --- a/guide/Text/Embed/author.md +++ /dev/null @@ -1,49 +0,0 @@ -# $author -Adds an author to a message embed, with an optional icon url and/or hyperlink. - -#### Usage: `$author[text;icon url(optional);hyperlink(optional)]` -
- - - !!exec $author[text] - - - - - - - !!exec $author[text;$authorAvatar] - - - - - - - !!exec $author[text;$authorAvatar;https://ccommandbot.com] - - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{author:text:icon url(optional):hyper link(optional)}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Embed/color.md b/guide/Text/Embed/color.md deleted file mode 100644 index 59b724e6..00000000 --- a/guide/Text/Embed/color.md +++ /dev/null @@ -1,50 +0,0 @@ -# $color -sets the color of the embed - -## Usage -`$color[Hex or Color Name]` - -## Accepted Color Names -Check this [page](../../CodeReferences/ref.embed.colors.md) - -## Example 1: Using it in function format -
- - - !!exec $color[#0099ff] - - - - - - - -## Example 2: Using In Curl Format -
- - - !!exec $sendMessage[
{desc:You are awesome}
{color:#0099ff}
] -
- - - You are awesome - - -
- -::: tip To color an embed inside a function like $sendmessage[text] - -Use: `{color:hex or colorname or RANDOM or TRANSPARENT}` -Example: `{color:#0099ff}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Embed/description.md b/guide/Text/Embed/description.md deleted file mode 100644 index 369991d6..00000000 --- a/guide/Text/Embed/description.md +++ /dev/null @@ -1,41 +0,0 @@ -# $description -Adds a description to a message embed. - -#### Usage: `$description[your text]` -
- - - !!exec $description[This is a description] - - - - This is a description - - - - -Description with hyperlinks: -Usage: `\[link\](https://ccommandbot.com "tooltip(optional)")` - - - !!exec $description[This is a description with \[link\](https://ccommandbot.com "tooltip")] - - - - This is a description hello - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{description:your text}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Embed/example.md b/guide/Text/Embed/example.md deleted file mode 100644 index 5941f6d3..00000000 --- a/guide/Text/Embed/example.md +++ /dev/null @@ -1,120 +0,0 @@ -# Complete Embed - -Here is a code example for a complete embed in both function and curl format. -## Function Format - -```php -$author[name;avatar;link] -$title[title;url] -$color[hex/colorname/random] -$thumbnail[url] -$description[description] -$addField[name;value;inline (yes/no)] -$image[url] -$footer[text;url] -$button[name;color;id;emoji;disabled (yes/no);inline (yes/no)] -$reply[message id;mention (yes/no)] -$attachment[url;name] -$editIn[time;New Content] -$deleteIn[time] -$deletecommand -$addTimestamp[time] -$addReactions[emoji;emoji...] -$selectMenu[id;placeholder;min value(optional);max value;(optional);label;desc;value;value] -``` - -## Curl Format -Here are all curl embed components you can use in any function containing `message` field. - -``` -{content:text} -{author:name:avatar:link url} -{title:title} -{color:hex/colorname/random} -{url:title url} -{thumbnail:url} -{description:description} -{field:name:value:inline (yes/no)} -{image:url} -{footer:footer:avatar url} -{timestamp:time} -{button:label:style/color/url:emoji:id/link:newline (yes/no):disabled (yes/no)} -{reply:message id} -{reply_mention} -{attachment:file name:url:spoiler (yes/no)} -{reactions:emoji,emoji...} -{reaction:emoji,emoji...} -{suppress:yes/no} -{delete:time} -{edit:time:new content} -{deletecommand} -{deletecommand:time} -{timestamp} -{pin} -{silent} -``` - -### Only for interactions -These arguments can be used in interaction trigger commands. -``` -{interaction} -{ephemeral=yes/no} -{message=content, curl embed, menus, buttons...} // Only in $interactionReply -``` - -::: tip What are ephemeral messages? -Ephemeral messages are interaction replies visibile only to the one who executed the command. - -![Ephemeral message preview](https://cdn.discordapp.com/attachments/957286111250624552/1100459877480013914/image.png) -::: - -## What is the difference between function and embed format? - -### 1. Function Format: - -Function format works as usual functions, but it allows you to send up to **1 embed** and the embed gets sent right after the execution of your command. - -#### Example: -If you created a command with the following code, the bot would: -1. First change author's -2. Send an embed confirming the change, - -```php -$title[Nickname changed] -$description[Your nickname has been changed to lowercase ($toLowercase[$username])] - -$changeNickname[$authorID;$toLowercase[$username]] -``` - -### 2. Curl Format: - -Curl embeds are a more complex way of sending embeds. It's used to "attach" an embed to a message sent with a function like `$sendMessage` or `$interactionReply`. -This format unlike the previous one, follows the normal code flow. - -#### Example: -The following code would: -1. Send a message announcing the upcoming nickname change, -2. Edit user's nickname, -3. Edit the previously sent message to confirm the change. - -```php -$sendMessage[ - {title: Nickname change} - {description: Your nickname is going to be changed to lowercase ($toLowercase[$username])} -] - -$changeNickname[$authorID;$toLowercase[$username]] - -$editMessage[$sentMessageID; - {title: Nickname changed} - {description: Your nickname has been changed to lowercase ($toLowercase[$username])} -] -``` - -::: danger Separators -Please note, that separators vary between the formats: -* Function arguments are separated by a `;` -* Curl embed arguments are separated by a `:` -::: - -###### Tags: diff --git a/guide/Text/Embed/footer.md b/guide/Text/Embed/footer.md deleted file mode 100644 index 277c8c15..00000000 --- a/guide/Text/Embed/footer.md +++ /dev/null @@ -1,28 +0,0 @@ -# $footer -Adds a footer to a message embed with an optional icon url - -#### Usage: `$footer[text;icon url(optional)]` -
- - - !!exec $footer[This is a fantastic embed footer] - - - - This is a fantastic embed footer - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{footer: Your text here:icon url(optional)}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) - -Link escapes are needed, use `\` to escape characters. Read [me](../../Other/syntax.md) to see more -::: diff --git a/guide/Text/Embed/image.md b/guide/Text/Embed/image.md deleted file mode 100644 index b9fb2e24..00000000 --- a/guide/Text/Embed/image.md +++ /dev/null @@ -1,28 +0,0 @@ -# $image -Adds an image to a message embed - -#### Usage: `$image[YOUR URL HERE]` -
- - - !!exec $image[$userAvatar] - - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{image: Your link here}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) - -Link escapes are needed, use `\` to escape characters. Read [me](../../Other/syntax.md) to see more -::: diff --git a/guide/Text/Embed/thumbnail.md b/guide/Text/Embed/thumbnail.md deleted file mode 100644 index 5755af5d..00000000 --- a/guide/Text/Embed/thumbnail.md +++ /dev/null @@ -1,28 +0,0 @@ -# $thumbnail -Adds a thumbnail to a message embed. - -#### Usage: `$thumbnail[YOUR URL HERE]` -
- - - !!exec $thumbnail[$userAvatar] - - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{thumbnail: Your link here}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) - -Link escapes are needed, use `\` to escape characters. Read [me](../../Other/syntax.md) to see more -::: diff --git a/guide/Text/Embed/title.md b/guide/Text/Embed/title.md deleted file mode 100644 index ea954626..00000000 --- a/guide/Text/Embed/title.md +++ /dev/null @@ -1,42 +0,0 @@ -# $title -Adds a title to a message embed. - -#### Usage: `$title[YOUR TITLE TEXT HERE;url(optional)]` -
- - - !!exec $title[This is a title] - - - - - - - -Or with url - - - - !!exec $title[This is a title;https://discord.com] - - - - - - - -::: tip Do you want to add an embed inside a Function as paramter like $sendmessage[text] - -Use: `{title: Your title here}` -::: - -::: danger Please be aware!! -If you add any `:` in this function it will error! Check out [this](../../Other/syntax.md) -::: diff --git a/guide/Text/Math/abbreviate.md b/guide/Text/Math/abbreviate.md deleted file mode 100644 index f92fb735..00000000 --- a/guide/Text/Math/abbreviate.md +++ /dev/null @@ -1,21 +0,0 @@ -# $abbreviate -this function abbreviates large numbers -Abbreviation to: -* k - thousands -* m - millions -* b - billions -* t - trillions - -#### Usage: `$abbreviate[number]` -
- - - !!exec $abbreviate[6000] - - - 6k - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Math/abs.md b/guide/Text/Math/abs.md deleted file mode 100644 index 60f8ccf4..00000000 --- a/guide/Text/Math/abs.md +++ /dev/null @@ -1,19 +0,0 @@ -# $abs - -Return the absolute value of a number. Basically forces a number to be positive - -## Usage - -```bash -$abs[Number] -``` - -## Example - - - !!exec $abs[-25] - - - 25 - - diff --git a/guide/Text/Math/ceil.md b/guide/Text/Math/ceil.md deleted file mode 100644 index 2dd5f190..00000000 --- a/guide/Text/Math/ceil.md +++ /dev/null @@ -1,29 +0,0 @@ -# $ceil - -rounds a number up to the next largest integer - -## Usage - -```bash -$ceil[Number] -``` - -### Example: - - - !!exec $ceil[1.3]

-
- - 2

-
-
- -### Example: - - - !!exec $ceil[3.5]

-
- - 4 - -
\ No newline at end of file diff --git a/guide/Text/Math/divide.md b/guide/Text/Math/divide.md deleted file mode 100644 index b6ec4786..00000000 --- a/guide/Text/Math/divide.md +++ /dev/null @@ -1,16 +0,0 @@ -# $divide -divides (a) number(s) from each other, from left to right - -#### Usage: `$divide[10;2;...]` -
- - - !!exec $divide[10;2] - - - 5 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Math/floor.md b/guide/Text/Math/floor.md deleted file mode 100644 index b48a5311..00000000 --- a/guide/Text/Math/floor.md +++ /dev/null @@ -1,29 +0,0 @@ -# $floor - -return the largest integer less than or equal to a given number - -## Usage - -```bash -$floor[Number] -``` - -### Example: - - - !!exec $floor[2.4]

-
- - 2

-
-
- -### Example: - - - !!exec $floor[2.9]

-
- - 2 - -
\ No newline at end of file diff --git a/guide/Text/Math/math.md b/guide/Text/Math/math.md deleted file mode 100644 index 8e66ea23..00000000 --- a/guide/Text/Math/math.md +++ /dev/null @@ -1,49 +0,0 @@ -# $math -Calculates numbers with any mathematically correct -quantifier(s) in between. - -#### Usage: `$math[10*(2+5)/7*8-2]` -e#### Usage: `$math[Expression;Name1=Value1;Name1=Value2]` -
- - - !!exec $math[10*(2+5)/7*8-2] - - - 78 - - - !!exec Networth = $math[cash+bank;cash=100;bank=500] - - - Networth = 600 - - - - -:::tip Alternatives -`$sum`, can be used to sum up arguments. - -`$sub`, can be used to subtract arguments. - -`$multi`, can be used to multiply arguments. - -`$divide`, can be used to divide arguments. -::: - -## Valid Quantifiers -Operator | Associativity | Description -:----------------------- | :------------ | :---------- -(...) | None | Grouping (brackets) -! | Left | Factorial -^ | Right | Exponentiation -+, -, sqrt | Right | Unary prefix operators -\*, /, % | Left | Multiplication, division, remainder -+, - | Left | Addition, subtraction - -:::warning Are there any more advanced functions? -There are more advanced functions located [here.](https://github.com/silentmatt/expr-eval/blob/master/README.md) -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Math/mathMax.md b/guide/Text/Math/mathMax.md deleted file mode 100644 index 464e5b0b..00000000 --- a/guide/Text/Math/mathMax.md +++ /dev/null @@ -1,19 +0,0 @@ -# $mathMax - -Return the largest number from a list of numbers - -## Usage - -```bash -$MathMax[Number 1;Number 2;Number 3;...] -``` - -### Example: - - - !!exec $MathMax[100;50;150]

-
- - 150 - -
diff --git a/guide/Text/Math/mathMin.md b/guide/Text/Math/mathMin.md deleted file mode 100644 index 8a21b9e8..00000000 --- a/guide/Text/Math/mathMin.md +++ /dev/null @@ -1,19 +0,0 @@ -# $mathMin - -Return the smallest number from a list of numbers - -## Usage - -```bash -$mathMin[Number 1;Number 2;Number 3;...] -``` - -### Example: - - - !!exec $mathMin[100;50;150]

-
- - 50 - -
diff --git a/guide/Text/Math/modulo.md b/guide/Text/Math/modulo.md deleted file mode 100644 index 6e7ed537..00000000 --- a/guide/Text/Math/modulo.md +++ /dev/null @@ -1,16 +0,0 @@ -# $modulo -calculates the remainder of a division operation - -#### Usage: `$modulo[10;2;...]` -
- - - !!exec $modulo[10;2] - - - 0 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Math/multi.md b/guide/Text/Math/multi.md deleted file mode 100644 index 864b6d47..00000000 --- a/guide/Text/Math/multi.md +++ /dev/null @@ -1,16 +0,0 @@ -# $multi -Multiplies (a) number(s) with each other - -#### Usage: `$multi[10;4;...]` -
- - - !!exec $multi[10;4] - - - 40 - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Math/ordinal.md b/guide/Text/Math/ordinal.md deleted file mode 100644 index 4941eba2..00000000 --- a/guide/Text/Math/ordinal.md +++ /dev/null @@ -1,17 +0,0 @@ -# $ordinal -adds the correct suffix after the number -`st`,`nd`,`rd`,`th` - -#### Usage: `$ordinal[number]` -
- - - !!exec $ordinal[2] - - - 2nd - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Math/round.md b/guide/Text/Math/round.md deleted file mode 100644 index 4619370d..00000000 --- a/guide/Text/Math/round.md +++ /dev/null @@ -1,16 +0,0 @@ -# $round -Rounds the number to the nearest integer. - -#### Usage: `$round[number]` -
- - - !!exec $round[10.897890790] - - - 11 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Math/roundTenth.md b/guide/Text/Math/roundTenth.md deleted file mode 100644 index bb27c4c3..00000000 --- a/guide/Text/Math/roundTenth.md +++ /dev/null @@ -1,16 +0,0 @@ -# $roundTenth -Rounds the number to the nearest decimal specified in `toFixed` - -#### Usage: `$roundTenth[number;tofixed]` -
- - - !!exec $roundTenth[10.877890790;2] - - - 10.88 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Math/sub.md b/guide/Text/Math/sub.md deleted file mode 100644 index def1ac49..00000000 --- a/guide/Text/Math/sub.md +++ /dev/null @@ -1,16 +0,0 @@ -# $sub -Subtracts (a) number(s) from each other - -#### Usage: `$sub[10;4;...]` -
- - - !!exec $sub[10;4] - - - 6 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Math/sum.md b/guide/Text/Math/sum.md deleted file mode 100644 index ca2b44b0..00000000 --- a/guide/Text/Math/sum.md +++ /dev/null @@ -1,16 +0,0 @@ -# $sum -Sum's up the given args - -#### Usage: `$sum[1;3;...]` -
- - - !!exec $sum[1;3] - - - 4 - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Math/truncate.md b/guide/Text/Math/truncate.md deleted file mode 100644 index bf78b963..00000000 --- a/guide/Text/Math/truncate.md +++ /dev/null @@ -1,16 +0,0 @@ -# $truncate -Truncates the number to 0 decimals. - -#### Usage: `$truncate[number]` -
- - - !!exec $truncate[10.897890790] - - - 10 - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Object/ObjectCreate.md b/guide/Text/Object/ObjectCreate.md deleted file mode 100644 index 8c29d0a1..00000000 --- a/guide/Text/Object/ObjectCreate.md +++ /dev/null @@ -1,54 +0,0 @@ -# $objectCreate -Creates a json object from the input - -Use `$getObjectProperty` or `$objectGet` to get a key value. -#### Usage: `$objectCreate[JSON string]` -
- - - !!exec $objectCreate[{"Name":"Wiki","Level":20,"isExpert":true,"userId":327996784012034050}] Hi, my name is $objectget[Name]. Level $objectget[Level]. Am i expert? $objectget[isExpert]. My user id is $objectget[userId] - - - Hi, my name is Wiki. Level 20. Am i expert? true. My user id is 327996784012034050 - - - -::: tip Saving Object inside Vars -The example above shows how to save the object inside a variable and retrieve it later. -- with an object you can save many properties inside a variable. -```sh -$initvar[user;Data;{"Name":"none","Level":0,"isExpert":false,"userId":0}] -$objectCreate[$getuservar[Data]] -$objectSet[Name;Wiki] -$objectSet[Level;20] -$objectSet[isExpert;true] -$objectSet[userId;327996784012034050] - -/*You can change the value by using $objectSet. You can save it inside a var by using $getObject*/ -$setUserVar[Data;$getObject] -/* $getUserVar[Data] will now return: {"Name":"Wiki","Level":20,"isExpert":true,"userId":327996784012034050}*/ - -``` -::: - -::: tip Get values from an array -``` -{ - "string":"Needs quotation marks", - "numbers":1234, - "boolean":true/false, - "array":["Value","Value","Value"], - "group":{ -"String":"Value", -"numbers":Value, -"boolean":Value -}, - "arrayGroup":[{ -"String":"value"},{"String":"value"},{"String":"value"}] -} -``` -* use `$objectGet[groupname;key]` to get the value or $objectGet[groupname;key;index] to get the value of an array -::: - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Object/ObjectGet.md b/guide/Text/Object/ObjectGet.md deleted file mode 100644 index b7364b1a..00000000 --- a/guide/Text/Object/ObjectGet.md +++ /dev/null @@ -1,16 +0,0 @@ -# $objectGet -Get a object value/property by key, if the key is not found then return `undefined` (same as `$getObjectProperty`) - -#### Usage: `$objectGet[key]` -
- - - !!exec $createObject[{"BotName":"Custom Commands","BotOwner":"Rake","Contributor":"Wiki"}] Bot name: $objectGet[BotName], Owner: $objectGet[BotOwner], Docs Contributor: $objectGet[Contributor] - - - Bot name: Custom Commands, Owner: Rake, Docs Contributor: Wiki - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Object/ObjectIncrease.md b/guide/Text/Object/ObjectIncrease.md deleted file mode 100644 index d19c199e..00000000 --- a/guide/Text/Object/ObjectIncrease.md +++ /dev/null @@ -1,33 +0,0 @@ -# $ObjectIncrease - -To increase a key value, if the key doesn't exist, it will create one and set to that value - -## Usage - -```bash -$ObjectIncrease[Key;Amount] -``` - -### Notes on Amount: -* It can be a number like `5`, or negative `-5` to reduce instead of increase\ -* It can be expression like x*2 where `x` is the current value - -### Example 1: - - - !!exec $objectIncrease[Mido;10]
$objectIncrease[Rake;5]
$objectGet

-
- - {"Mido":10,"Rake":5}

-
-
- -### Example 2: - - - !!exec $objectIncrease[Mido;10]
$objectIncrease[Mido;x*2]
$objectGet

-
- - {"Mido":20} - -
diff --git a/guide/Text/Object/ObjectKeyExists.md b/guide/Text/Object/ObjectKeyExists.md deleted file mode 100644 index eec24c95..00000000 --- a/guide/Text/Object/ObjectKeyExists.md +++ /dev/null @@ -1,38 +0,0 @@ -# $ObjectKeyExists - -Checks if given key is present in the object. Returns `true` or `false`. - -## Usage - -```bash -$ObjectKeyExists[Key;...] -``` -1. **Key(s)** - Key to check it's existence. You can put as many nested keys as needed. - -## Example - -#### Using $ObjectKeyExists - -How to check if `name` key exists - - - - !!exec $objectSet[name;Mido] - $ObjectKeyExists[name] - - - true - - - !!exec $objectSet[username;mido] - $ObjectKeyExists[name] - - - false - - - -##### Related functions: `$ObjectKeys` `$ObjectCreate` `$ObjectSet` - -##### Function Difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/Object/ObjectKeys.md b/guide/Text/Object/ObjectKeys.md deleted file mode 100644 index c720aa72..00000000 --- a/guide/Text/Object/ObjectKeys.md +++ /dev/null @@ -1,29 +0,0 @@ -# $ObjectKeys - -Return the Object Keys with the seperator between each key - -## Usage - -```bash -$ObjectKeys[Seperator (optional, default:, );Nested Property 1;Nested Property 2;...] -``` - -### Example: - - - !!exec $objectSet[user1;name;Mido]
$objectSet[user1;id;1234]
$objectSet[user1;weapon;Sword]
$objectSet[user2;name;Rake]
$objectSet[user2;id;5678]
$objectSet[user2;weapon;Feather]
$ObjectKeys[/]

-
- - user1/user2

-
-
- -### Example (Getting Nested Property Keys): - - - !!exec $objectSet[user1;name;Mido]
$objectSet[user1;id;1234]
$objectSet[user1;weapon;Sword]
$objectSet[user2;name;Rake]
$objectSet[user2;id;5678]
$objectSet[user2;weapon;Feather]
$ObjectKeys[/;user1]

-
- - name/id/weapon - -
diff --git a/guide/Text/Object/ObjectLoop.md b/guide/Text/Object/ObjectLoop.md deleted file mode 100644 index 1118afcf..00000000 --- a/guide/Text/Object/ObjectLoop.md +++ /dev/null @@ -1,34 +0,0 @@ -# $ObjectLoop - -To loop over an object -::: warning Warning -Only zero-cooldown functions are allowed in the CODE section! Functions that have a cooldown will be skipped, even in Tier 3+. -
For example, if your loop contains `$sendMessage[Hello world!]`, it will literally display as "$sendMessage[Hello world!]" because `$sendMessage` is not a zero-cooldown function. - -If you are looking to loop over non-zero cooldown functions, you should use `$forEach` instead. -::: -## Usage - -```bash -$ObjectLoop[key name;value name;index name;Nested Prroperty 1;Nested Property 2;...]{ -CODE... -} -``` -## Loop Limits -Array loops are limited to a certain number of cycles. These limits vary between different tiers of premium. -| Tier | Limit | -| :------- | :--- | -| 0 (Free) | 50 | -| 3 (Freemium) | 50 | -| 4 (Pro) | 100 | -| 5 (Ultra) | 150 | - -### Example: - - - !!exec $objectSet[Mido;Sword]
$objectSet[Rake;Staff]
$objectLoop[name;weapon;index]{
$index. $name has $weapon
}

-
- - 1. Mido has Sword
2. Rake has Staff -
-
diff --git a/guide/Text/Object/ObjectMerge.md b/guide/Text/Object/ObjectMerge.md deleted file mode 100644 index 4ba4d23c..00000000 --- a/guide/Text/Object/ObjectMerge.md +++ /dev/null @@ -1,29 +0,0 @@ -# $ObjectMerge - -Merge the current object with another object, it overwrites the conflicted keys - -## Usage - -```bash -$ObjectMerge[object] -``` - -### Example: - - - !!exec $objectSet[name;Mido]
$objectMerge[{"country":"EG"}]
$objectGet

-
- - {"name":"Mido", "country":"EG"}

-
-
- -### Example (Nested Keys): - - - !!exec $objectSet[user;name;Mido]
$objectSet[user;country;EG]
Before: $objectGet
$objectMerge[user;{"name":"Rake","country":"DE"}]
After: $objectGet

-
- - Before: {"user":{"name":"Mido","country":"EG"}}
After: {"user":{"name":"Rake","country":"DE"}} -
-
\ No newline at end of file diff --git a/guide/Text/Object/ObjectRemove.md b/guide/Text/Object/ObjectRemove.md deleted file mode 100644 index 478c1cf6..00000000 --- a/guide/Text/Object/ObjectRemove.md +++ /dev/null @@ -1,24 +0,0 @@ -# $ObjectRemove - -To remove a key from the object - -## Usage - -```bash -$ObjectRemove[Key;Key...(Optional)] -``` - -### Example: - - -!!exec $objectSet[Name;Mido]
-$objectSet[Country;EG]
-Before: $getObject
-$objectRemove[Name]
-After: $getObject -
- -Before: {"Name":"Mido","Country":"EG"} -
-After: {"Country":"EG"}
-
diff --git a/guide/Text/Object/ObjectRenameKey.md b/guide/Text/Object/ObjectRenameKey.md deleted file mode 100644 index fc87409d..00000000 --- a/guide/Text/Object/ObjectRenameKey.md +++ /dev/null @@ -1,29 +0,0 @@ -# $ObjectRenameKey - -allows you to rename a key in your object - -## Usage - -```bash -$objectRenameKey[old key;new key name] -``` - -### Example: - - - !!exec $objectSet[name;Mido]
Before: $objectGet
$objectRenameKey[name;nick]
After: $objectGet

-
- - Before: {"name":"Mido"}
After: {"nick":"Mido"}

-
-
- -### Example (Nested Key): - - - !!exec $objectSet[user;name;Mido]
Before: $objectGet
$objectRenameKey[user;name;nick]
After: $objectGet

-
- - Before: {"user":{"name":"Mido"}}
After: {"user":{"nick":"Mido"}} -
-
\ No newline at end of file diff --git a/guide/Text/Object/ObjectSet.md b/guide/Text/Object/ObjectSet.md deleted file mode 100644 index 1990347b..00000000 --- a/guide/Text/Object/ObjectSet.md +++ /dev/null @@ -1,58 +0,0 @@ -# $objectSet -set an object property value by key - -#### Usage: `$objectSet[key;key;key....;value]` -
- - - !!exec $objectCreate[{"name":"Wiki"}] $objectSet[name;Rake] $objectSet[tag;0001] $getObject - - - {"name":"Rake","tag":"0001"} - - - -::: tip Setting Objects inside Objects -```php -$objectCreate[{"type":0}] - -$objectset[version;2.5] -/* will return {"type:0,"version":"2.5"} */ - -$objectCreate[{"type":0}] - -$objectSet[userdata;age;20] -$objectSet[userdata;name;Member] -$objectSet[userdata;role;Moderator] -/* will return {"type":0,"userdata":{"age":"20","name":"Member","role":"Moderator"}} */ -::: - -::: tip Setting values inside array -``` - $objectCreate[{ "userdata":{ - "age":0, - "name":"undefined", - "role":"undefined" -} -}] -$objectSet[userdata;age;20] -$objectSet[userdata;name;Member] -$objectSet[userdata;role;Moderator] -/* this is the format for normal groups */ - -$objectCreate[{ "userdata":[{ - "age":0, - "name":"undefined", - "role":"undefined" -}] -}] -$objectSet[userdata;0;age;20] -$objectSet[userdata;0;name;Member] -$objectSet[userdata;0;role;Moderator] -/* sets a property inside am array by index */ - -``` -::: - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Object/ObjectValues.md b/guide/Text/Object/ObjectValues.md deleted file mode 100644 index 865bfdc9..00000000 --- a/guide/Text/Object/ObjectValues.md +++ /dev/null @@ -1,29 +0,0 @@ -# $ObjectValues - -Return the Object values with seperator between each value - -## Usage - -```bash -$ObjectValues[Seperator (optional, default:, );Nested Propery 1;Nested Property 2] -``` - -### Example (Get values of nested property): - - - !!exec $ObjectSet[name;Mido]
$objectSet[age;300]
$ObjectValues

-
- - Mido, 300

-
-
- -### Example: - - - !!exec $objectSet[user;name;Mido]
$objectSet[user;id;1234]
$objectSet[user;weapon;Sword]
$ObjectValues[/;user]

-
- - Mido/1234/Sword - -
\ No newline at end of file diff --git a/guide/Text/Object/addObjectProperty.md b/guide/Text/Object/addObjectProperty.md deleted file mode 100644 index 20ab07e7..00000000 --- a/guide/Text/Object/addObjectProperty.md +++ /dev/null @@ -1,13 +0,0 @@ -# $addObjectProperty - -Adds a key with a value to the existing object. - -## Usage - -```bash -$addObjectProperty[key;value] -``` - -::: danger -This function got deprecated, use `$objectSet` instead -::: \ No newline at end of file diff --git a/guide/Text/Object/createObject.md b/guide/Text/Object/createObject.md deleted file mode 100644 index 0aae71fa..00000000 --- a/guide/Text/Object/createObject.md +++ /dev/null @@ -1,23 +0,0 @@ -# $createObject - -Creates an object that can be used later. - -## Usage - -```bash -$createObject[object string] -``` - -### Example: - - - !!exec $createObject[{"name":"Mido","age":110}]
Your name is $objectGet[name]
Your age is $objectGet[age]

-
- - Your name is Mido
Your age is 110 -
-
- -::: danger -This function got deprecated, use `$ObjectCreate` instead -::: \ No newline at end of file diff --git a/guide/Text/Object/getObject.md b/guide/Text/Object/getObject.md deleted file mode 100644 index 0c93950f..00000000 --- a/guide/Text/Object/getObject.md +++ /dev/null @@ -1,25 +0,0 @@ -# $getObject -returns the JSON of the created/modified object - -#### Usage: `$getObject[spaces(optional, default 0)]` - -
- - - !!exec $createobject[{"Owner":"Rake","Manager":"Mika","Dev":"Mido","Contributor":"Wiki"}] Without spaces: $getobject -With spaces: $getobject[1] - - - Without spaces: {"Owner":"Rake","Manager":"Mika","Dev":"Mido","Contributor":"Wiki"} -With spaces: {
- "Owner": "Rake",
- "Manager": "Mika",
- "Dev": "Mido",
- "Contributor": "Wiki"
-} -
-
- - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/Object/getObjectKeys.md b/guide/Text/Object/getObjectKeys.md deleted file mode 100644 index 7295e8dd..00000000 --- a/guide/Text/Object/getObjectKeys.md +++ /dev/null @@ -1,13 +0,0 @@ -# $getObjectKeys - -Return the object keys with seperator (default is space if not provided) - -## Usage - -```bash -$getObjectKeys or $getObjectKeys[Seperator (optional)] -``` - -::: danger -This function got deprecated, use `$objectKeys` instead -::: \ No newline at end of file diff --git a/guide/Text/Object/getObjectProperty.md b/guide/Text/Object/getObjectProperty.md deleted file mode 100644 index 5245267c..00000000 --- a/guide/Text/Object/getObjectProperty.md +++ /dev/null @@ -1,13 +0,0 @@ -# $getObjectProperty - -Gets a property value from given key. - -## Usage - -```bash -$getObjectProperty[key] -``` - -::: danger -This function got deprecated, use `$objectGet` instead -::: \ No newline at end of file diff --git a/guide/Text/Regex/regexCheck.md b/guide/Text/Regex/regexCheck.md deleted file mode 100644 index 54689563..00000000 --- a/guide/Text/Regex/regexCheck.md +++ /dev/null @@ -1,29 +0,0 @@ -# $regexCheck - -To check if a text matches a regex or not, returns true or false - -## Usage - -```bash -$regexCheck[Text;Regex;Flags] -``` - -### Example (Check If Text is letters): - - - !!exec $regexCheck[ABC;^[a-zA-Z]+$]

-
- - true

-
-
- -### Example: - - - !!exec $regexCheck[A2B;^[a-zA-Z]+$]

-
- - false - -
diff --git a/guide/Text/Regex/regexMatch.md b/guide/Text/Regex/regexMatch.md deleted file mode 100644 index 676fb8b8..00000000 --- a/guide/Text/Regex/regexMatch.md +++ /dev/null @@ -1,46 +0,0 @@ -# $regexMatch -Matches a string with the given Regex Pattern and returns the matched text or multiple matches seperated by the seperator - -#### Usage: `$regexMatch[text;regexp;flags(optional);group index(optional, 0 by default) or all;separator (optional)]` - -## Note about Separator -It can only be used when group index is `all`.\ -in case flag is `g` it will return all matches glued with that separator\ -in case flag is not `g` it will return the whole matched text and matched groups - -### Example (Find the first number): - - - !!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+]

-
- - 50

-
-
- -### Example (Find all numbers): - - - !!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+;g;all;/]

-
- - 50/18

-
-
- -### Example (Find 2nd number only): - - - !!exec $regexMatch[Rake owns 50$ and has 18 properties.;\d+;g;1]

-
- - 18 - -
- -::: tip Regex Flags -These are all regex flags: `g, i, m, u, s, y.` -::: -##### Function difficulty -###### Tags: - diff --git a/guide/Text/Regex/regexReplace.md b/guide/Text/Regex/regexReplace.md deleted file mode 100644 index 28f695e8..00000000 --- a/guide/Text/Regex/regexReplace.md +++ /dev/null @@ -1,19 +0,0 @@ -# $regexReplace - -Uses a regular expression to replace matching queries - -## Usage - -```bash -$regexReplace[text;regex;flags;new text] -``` - -### Example 1: - - - !!exec $regexReplace[My age is 900 years old.;\d+;g;[SECRET AGE]]

-
- - My age is [SECRET AGE] years old. - -
\ No newline at end of file diff --git a/guide/Text/Regex/replaceTextWithRegex.md b/guide/Text/Regex/replaceTextWithRegex.md deleted file mode 100644 index 0d5b7f5d..00000000 --- a/guide/Text/Regex/replaceTextWithRegex.md +++ /dev/null @@ -1,19 +0,0 @@ -# $replaceTextWithRegex -Uses a regular expression to replace matching queries - -#### Usage: -`$replaceTextWithRegex[text;regex;flags;new text]` - -
- - - !!exec $replaceTextWithRegex[Today is my birthday;/(birthday|party)/;gi;birthday 🎉] - - - Today is my birthday 🎉 - - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/buffer.md b/guide/Text/buffer.md deleted file mode 100644 index d6cfd3ee..00000000 --- a/guide/Text/buffer.md +++ /dev/null @@ -1,16 +0,0 @@ -# $buffer - -It return the input (useful for some rare cases) - -## Usage - -```bash -$buffer[input] -``` - -### Example: -```bash -$sendMessage[{footer:$buffer[Some :Breaking :Message]} -``` - -![](https://i.imgur.com/i1edjnU.png) \ No newline at end of file diff --git a/guide/Text/channelNSFW.md b/guide/Text/channelNSFW.md deleted file mode 100644 index c364e9bf..00000000 --- a/guide/Text/channelNSFW.md +++ /dev/null @@ -1,16 +0,0 @@ -# $channelNSFW -Returns whether the channel is nsfw or not - -#### Usage: `$channelNSFW[channelID]` -
- - - !!exec $channelNSFW[$channelID] - - - no - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/charCount.md b/guide/Text/charCount.md deleted file mode 100644 index 03a7d682..00000000 --- a/guide/Text/charCount.md +++ /dev/null @@ -1,19 +0,0 @@ -# $charCount[text] -this functions returns the number of characters in the provided text - -#### Usage: -`$charCount[text]` - -
- - - !!exec $charCount[hello] - - - 5 - - - - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/checkContains.md b/guide/Text/checkContains.md deleted file mode 100644 index ff40e731..00000000 --- a/guide/Text/checkContains.md +++ /dev/null @@ -1,29 +0,0 @@ -# $checkContains - -checks if given message contains any of the texts - -## Usage - -```bash -$checkContains[message;text1;text2;...] -``` - -### Example 1: - - - !!exec $checkContains[Mido is good;good]

-
- - true

-
-
- -### Example 2: - - - !!exec $checkContains[Mido is good;bad]

-
- - false - -
\ No newline at end of file diff --git a/guide/Text/customEmoji.md b/guide/Text/customEmoji.md deleted file mode 100644 index a4dbecb2..00000000 --- a/guide/Text/customEmoji.md +++ /dev/null @@ -1,29 +0,0 @@ -# $customEmoji - -Returns a custom emoji - -## Usage - -```bash -$customEmoji[name or id] -``` - -### Example (Using Custom Emoji Name): - - - !!exec $customEmoji[yes]

-
- -
-
-
- -### Example (Using Custom Emoji ID): - - - !!exec $customEmoji[833252579873259521]

-
- -
-
-
\ No newline at end of file diff --git a/guide/Text/disableMentions.md b/guide/Text/disableMentions.md deleted file mode 100644 index 37f18c80..00000000 --- a/guide/Text/disableMentions.md +++ /dev/null @@ -1,16 +0,0 @@ -# $disableMentions -will not ping a user even though mentioned - -#### Usage: `$disableMentions` -
- - - !!exec $disableMentions Member - - - @Member - - - -##### Function difficulty -###### Tags: diff --git a/guide/Text/filterMessage.md b/guide/Text/filterMessage.md deleted file mode 100644 index e3e809a3..00000000 --- a/guide/Text/filterMessage.md +++ /dev/null @@ -1,19 +0,0 @@ -# $filterMessage - -Removes letters or numbers from given text - -## Usage - -```bash -$filterMessage[message;letterOrSymbols] -``` - -### Example: - - - !!exec $filterMessage[Hello World;lo]

-
- - He Wrd - -
\ No newline at end of file diff --git a/guide/Text/filterMessageWords.md b/guide/Text/filterMessageWords.md deleted file mode 100644 index 9120abea..00000000 --- a/guide/Text/filterMessageWords.md +++ /dev/null @@ -1,10 +0,0 @@ -# $filterMessageWords - -Removed words from the message. - -## Usage - -```bash -$filterMessageWords[text;caseSensitive (yes/no);...words] -``` - diff --git a/guide/Text/findChars.md b/guide/Text/findChars.md deleted file mode 100644 index 65ff8b27..00000000 --- a/guide/Text/findChars.md +++ /dev/null @@ -1,25 +0,0 @@ -# $findChars - -Takes all the letters from given string and returns them alone. - -## Usage - -```bash -$findChars[string] -``` - -## Example - - - - !!exec $findChars[$username] - - - Member - - - -::: tip Related functions -- `$findSpecialChars` -- `$findNumbers` -::: diff --git a/guide/Text/findNumbers.md b/guide/Text/findNumbers.md deleted file mode 100644 index ddcf3f41..00000000 --- a/guide/Text/findNumbers.md +++ /dev/null @@ -1,19 +0,0 @@ -# $findNumbers - -Find numbers from inside a text. - -## Usage - -```bash -$findNumbers[text;separator] -``` - -### Example: - - - !!exec $findNumbers[My age is 99 years old, and located 15 miles away from nearest station.;, ]

-
- - 99, 15 - -
\ No newline at end of file diff --git a/guide/Text/findSpecialChars.md b/guide/Text/findSpecialChars.md deleted file mode 100644 index 9e0a604f..00000000 --- a/guide/Text/findSpecialChars.md +++ /dev/null @@ -1,25 +0,0 @@ -# $findSpecialChars - -Takes all the non number/letter from given string and returns the alone - -## Usage - -```bash -$findSpecialChars[string] -``` - -## Example - - - - !!exec $findSpecialChars[$username] - - - $/? - - - -::: tip Related functions -- `$findChars` -- `$findNumbers` -::: diff --git a/guide/Text/indexOf.md b/guide/Text/indexOf.md deleted file mode 100644 index 635fa2ed..00000000 --- a/guide/Text/indexOf.md +++ /dev/null @@ -1,11 +0,0 @@ -# $indexOf - -Returns the position of \ in \.\ - Returns 0 if there's no char in text. - -## Usage - -```bash -$indexOf[text;char] -``` - diff --git a/guide/Text/isChannelMention.md b/guide/Text/isChannelMention.md deleted file mode 100644 index c34de93f..00000000 --- a/guide/Text/isChannelMention.md +++ /dev/null @@ -1,29 +0,0 @@ -# $isChannelMention - -To check if text provided satisfy discord channel mention format or not - -## Usage - -```bash -$isChannelMention[Text] -``` - -### Example: - - - !!exec $isChannelMention[abc]

-
- - false

-
-
- -### Example: - - - !!exec $isChannelMention[<#1234567890>]

-
- - true - -
\ No newline at end of file diff --git a/guide/Text/isUserMention.md b/guide/Text/isUserMention.md deleted file mode 100644 index 2cd3708a..00000000 --- a/guide/Text/isUserMention.md +++ /dev/null @@ -1,29 +0,0 @@ -# $isUserMention - -To check if text provided satisfy discord user mention format or not - -## Usage - -```bash -$isUserMention[Text] -``` - -### Example: - - - !!exec $isUserMention[abc]

-
- - false

-
-
- -### Example: - - - !!exec $isUserMention[<@!1234567890>]

-
- - true - -
\ No newline at end of file diff --git a/guide/Text/isandhas/isBoosting.md b/guide/Text/isandhas/isBoosting.md deleted file mode 100644 index 5c7bf52d..00000000 --- a/guide/Text/isandhas/isBoosting.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isBoosting -checks if a user is Boosting ,returns true or false - -#### Usage: `$isBoosting[userid]` -Example: -
- - - !!exec $isBoosting[$authorID] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isBot.md b/guide/Text/isandhas/isBot.md deleted file mode 100644 index 4cbd5163..00000000 --- a/guide/Text/isandhas/isBot.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isbot -checks if the user is a bot or not ,returns true or false - -#### Usage: `$isbot` or `$isbot[userid]` -Example: -
- - - !!exec $isbot | $isbot[891210194925809695] - - - false | true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isConnected.md b/guide/Text/isandhas/isConnected.md deleted file mode 100644 index b94d50f3..00000000 --- a/guide/Text/isandhas/isConnected.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isConnected - -To check whether user is connected to voice channel or not (only cached users) - -## Usage - -```bash -$isConnected[User ID] -``` - -### Example: - - - !!exec Is $username Connected To Channel?: $isConnected

-
- - Is Mido Connected To Channel?: true - -
\ No newline at end of file diff --git a/guide/Text/isandhas/isDeafened.md b/guide/Text/isandhas/isDeafened.md deleted file mode 100644 index 5cc55561..00000000 --- a/guide/Text/isandhas/isDeafened.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isDeafened -checks if a user is Deafened ,returns true,false or undefined - -#### Usage: `$isDeafened[userid]` -Example: -
- - - !!exec $isDeafened[$authorID] - - - undefined - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isEmoji.md b/guide/Text/isandhas/isEmoji.md deleted file mode 100644 index 45b730cc..00000000 --- a/guide/Text/isandhas/isEmoji.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isEmoji -Checks if the given Emoji is a default emoji ,returns true or false - -#### Usage: `$isEmoji[emoji]` -Example: -
- - - !!exec $isEmoji[:smile:] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isHoisted.md b/guide/Text/isandhas/isHoisted.md deleted file mode 100644 index fb41e44d..00000000 --- a/guide/Text/isandhas/isHoisted.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isHoisted -Checks if the given id of role is hoisted above all the other roles ,returns true or false - -#### Usage: `$isHoisted[roleid]` -Example: -
- - - !!exec $isHoisted[$roleID[test]] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isManaged.md b/guide/Text/isandhas/isManaged.md deleted file mode 100644 index 989eb7ad..00000000 --- a/guide/Text/isandhas/isManaged.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isManaged -Checks if the given id of role is Managed ,returns true or false - -#### Usage: `$isManaged[roleid]` -Example: -
- - - !!exec $isManaged[$roleID[Custom Command]] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isMentionable.md b/guide/Text/isandhas/isMentionable.md deleted file mode 100644 index 69be948e..00000000 --- a/guide/Text/isandhas/isMentionable.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isMentionable -Checks if the given id of role is Mentionable ,returns true or false - -#### Usage: `$isMentionable[roleid]` -Example: -
- - - !!exec $isMentionable[$roleID[test]] - - - false - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isMentioned.md b/guide/Text/isandhas/isMentioned.md deleted file mode 100644 index 89eabc0a..00000000 --- a/guide/Text/isandhas/isMentioned.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isMentioned -Checks if the given id of userID/roleID/channelID/everyone is Mentioned ,returns true or false - -#### Usage: `$isMentioned[userID/roleID/channelID/everyone]` -Example: -
- - - !!exec $mention $isMentioned[$authorID] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isMuted.md b/guide/Text/isandhas/isMuted.md deleted file mode 100644 index d4a03ad3..00000000 --- a/guide/Text/isandhas/isMuted.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isMuted -checks if a user is selfMuted ,returns true,false or undefined - -#### Usage: `$isMuted[userid]` -Example: -
- - - !!exec $isMuted[$authorID] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isNumber.md b/guide/Text/isandhas/isNumber.md deleted file mode 100644 index ffdbf825..00000000 --- a/guide/Text/isandhas/isNumber.md +++ /dev/null @@ -1,16 +0,0 @@ -# $isNumber -Checks if a string is a valid number. - -#### Usage: `$isNumber[number]` -
- - - !!exec $isNumber[10] | $isNumber[number] - - - true | false - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/isandhas/isStreaming.md b/guide/Text/isandhas/isStreaming.md deleted file mode 100644 index d0117cd5..00000000 --- a/guide/Text/isandhas/isStreaming.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isStreaming - -To check whether user is streaming in a voice channel or not (only cached users) - -## Usage - -```bash -$isStreaming[User ID] -``` - -### Example: - - - !!exec Is $username Streaming?: $isStreaming

-
- - Is Mido Streaming?: false - -
\ No newline at end of file diff --git a/guide/Text/isandhas/isTicket.md b/guide/Text/isandhas/isTicket.md deleted file mode 100644 index c9f39226..00000000 --- a/guide/Text/isandhas/isTicket.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isTicket -checks if a channel is a ticket or not created with $newTicket function,returns true or false - -#### Usage: `$isTicket` or `$isTicket[channelid]` -Example: -
- - - !!exec $isTicket | $isTicket[891210194925809695] - - - false | true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isValidHex.md b/guide/Text/isandhas/isValidHex.md deleted file mode 100644 index b4db5ddf..00000000 --- a/guide/Text/isandhas/isValidHex.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isValidHex -checks if the given int or hex code or [color name](../../CodeReferences/ref.embed.colors.md) is valid ,returns true,false - -#### Usage: `$isValidHex[int or hexcode or color name]` -Example: -
- - - !!exec $isValidHex[#ffffff] , $isValidHex[test], $isValidHex[Red] - - - true , false, true - - - -##### Function difficulty -###### Tags: - - diff --git a/guide/Text/isandhas/isValidInvite.md b/guide/Text/isandhas/isValidInvite.md deleted file mode 100644 index 4ad3b5dc..00000000 --- a/guide/Text/isandhas/isValidInvite.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isValidInvite -checks if the given Invite code is valid ,returns true,false - -#### Usage: `$isValidInvite[invite code]` -Example: -
- - - !!exec $isValidInvite[hjhjkh] - - - false - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isValidLink.md b/guide/Text/isandhas/isValidLink.md deleted file mode 100644 index df54fda3..00000000 --- a/guide/Text/isandhas/isValidLink.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isValidLink -checks if the given Link / url is valid ,returns true,false - -#### Usage: `$isValidLink[Link]` -Example: -
- - - !!exec $isValidLink[https://example.com] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/isandhas/isValidObject.md b/guide/Text/isandhas/isValidObject.md deleted file mode 100644 index b8679871..00000000 --- a/guide/Text/isandhas/isValidObject.md +++ /dev/null @@ -1,19 +0,0 @@ -# $isValidObject -checks if the given Object is valid ,returns true,false - -#### Usage: `$isValidObject[Object]` -Example: -
- - - !!exec $isValidObject[{"key":"value"}] - - - true - - - -##### Function difficulty -###### Tags: - - \ No newline at end of file diff --git a/guide/Text/mentionType.md b/guide/Text/mentionType.md deleted file mode 100644 index 54ed2dc4..00000000 --- a/guide/Text/mentionType.md +++ /dev/null @@ -1,10 +0,0 @@ -# $mentionType - -Uses an argument to determine the type of the mention (role, user, channel or none). - -## Usage - -```bash -$mentionType[mention argument] -``` - diff --git a/guide/Text/mentioned.md b/guide/Text/mentioned.md deleted file mode 100644 index 7ff593af..00000000 --- a/guide/Text/mentioned.md +++ /dev/null @@ -1,19 +0,0 @@ -# $mentioned - -Returns the ID of the mentioned user - -## Usage - -```bash -$mentioned[mention number or all;return author ID (yes/no)(optional)] -``` - -### Example: - - - !!exec First mention is $mentioned[1]
All mentions are: $mentioned[all]

-
- - First mention is 788361834360864808
All mentions are: 788361834360864808, 840526017260945468 -
-
\ No newline at end of file diff --git a/guide/Text/mentionedChannels.md b/guide/Text/mentionedChannels.md deleted file mode 100644 index 1bc49050..00000000 --- a/guide/Text/mentionedChannels.md +++ /dev/null @@ -1,16 +0,0 @@ -# $mentionedChannels -Returns the ID of one of the channels that was mentioned by the user - -#### Usage: `$mentionedChannels[number]` -
- - - !!exec $mentionedChannels[1] user-support - - - 869243919697846379 - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/mentionedRoles.md b/guide/Text/mentionedRoles.md deleted file mode 100644 index ca49d844..00000000 --- a/guide/Text/mentionedRoles.md +++ /dev/null @@ -1,16 +0,0 @@ -# $mentionedRoles -Returns the ID of one of the roles that was mentioned by the user - -#### Usage: `$mentionedRoles[number]` -
- - - !!exec $mentionedRoles[1] Support - - - 869243918787686432 - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/noMentionMessage.md b/guide/Text/noMentionMessage.md deleted file mode 100644 index 64b79f92..00000000 --- a/guide/Text/noMentionMessage.md +++ /dev/null @@ -1,17 +0,0 @@ -# $noMentionMessage -User's message without any mentions. (members, roles & channels) - -#### Usage: `$noMentionMessage` - -
- - - !!exec aaa Member $noMentionMessage - - - aaa - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/numToWord.md b/guide/Text/numToWord.md deleted file mode 100644 index 71fa962c..00000000 --- a/guide/Text/numToWord.md +++ /dev/null @@ -1,20 +0,0 @@ -# $numToWord - -convert a number to their verbal equivalents i.\ -e 5 \> five, maximum number would be "nine hundred ninety-nine nonillion" - -## Usage - -```bash -$numToWord[Number] -``` - -### Example: - - - !!exec $numToWord[1001]

-
- - one thousand one - -
\ No newline at end of file diff --git a/guide/Text/numberSeparator.md b/guide/Text/numberSeparator.md deleted file mode 100644 index 525ae504..00000000 --- a/guide/Text/numberSeparator.md +++ /dev/null @@ -1,19 +0,0 @@ -# $numberSeparator - -Separates a number in thousands - -## Usage - -```bash -$numberSeparator[number;separator (optional)] -``` - -### Example: - - - !!exec Your number is $numberSeparator[3352311]

-
- - Your number is 3,352,311 - -
\ No newline at end of file diff --git a/guide/Text/only/onlyBotPerms.md b/guide/Text/only/onlyBotPerms.md deleted file mode 100644 index 149c9299..00000000 --- a/guide/Text/only/onlyBotPerms.md +++ /dev/null @@ -1,21 +0,0 @@ -# $onlyBotPerms -Only if custom command bot has the permssions,user will be able to execute this command - -#### Usage: `$onlyBotPerms[perm;perm;...;error message]` - -#### Example: `$onlyBotPerms[managemessage;:x: - Bot does not have manage message permission]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Permissions -Check this [list](../../CodeReferences/ref.permissions_list.md) to view all permissions names -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/only/onlyForCategories.md b/guide/Text/only/onlyForCategories.md deleted file mode 100644 index 27356e16..00000000 --- a/guide/Text/only/onlyForCategories.md +++ /dev/null @@ -1,17 +0,0 @@ -# $onlyForCategories -The command will only be executable in the provided categories. - -#### Usage: `$onlyForCategories[categoryID;categoryID;...;error message]` - -#### Example: `$onlyForCategories[797978978978988;:x: - this command is restricted to the Main category]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Text/only/onlyForChannels.md b/guide/Text/only/onlyForChannels.md deleted file mode 100644 index a9d048c8..00000000 --- a/guide/Text/only/onlyForChannels.md +++ /dev/null @@ -1,10 +0,0 @@ -# $onlyForChannels - -The command will only be executable in the provided channel IDs. - -## Usage - -```bash -$onlyForChannels[channelID;channelID2;...;error message] -``` - diff --git a/guide/Text/only/onlyForIDs.md b/guide/Text/only/onlyForIDs.md deleted file mode 100644 index 970c6008..00000000 --- a/guide/Text/only/onlyForIDs.md +++ /dev/null @@ -1,17 +0,0 @@ -# $onlyForIDs -Only given user IDs will be able to execute this command - -#### Usage: `$onlyForIDs[userID;userID;...;error message]` - -#### Example: `$onlyForIDs[$guild[owner];:x: - this command is restricted to the guild owner]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/only/onlyForRoles.md b/guide/Text/only/onlyForRoles.md deleted file mode 100644 index 40b625a2..00000000 --- a/guide/Text/only/onlyForRoles.md +++ /dev/null @@ -1,17 +0,0 @@ -# $onlyForRoles -Only person with the given Roles will be able to execute this command - -#### Usage: `$onlyForRoles[roleID;roleID;...;error message]` - -#### Example: `$onlyForRoles[797978978978988;:x: - this command is restricted to person with test role]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/only/onlyIf.md b/guide/Text/only/onlyIf.md deleted file mode 100644 index ebc658c7..00000000 --- a/guide/Text/only/onlyIf.md +++ /dev/null @@ -1,17 +0,0 @@ -# $onlyIf -Continue the execution only if certain [expression](../../CodeReferences/ref.expression.md) is satisfied, otherwise stop the execution and send the error message. -In theory $onlyif can replace all other $onlyFor with the proper [expression](../../CodeReferences/ref.expression.md) -#### Usage: `$onlyif[Expression;error message]` - -#### Example: `$onlyIf[$username==Mido;You are not mido]` - -::: tip Note -Read about [Expression](../../CodeReferences/ref.expression.md) -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Text/only/onlyIfMessageContains.md b/guide/Text/only/onlyIfMessageContains.md deleted file mode 100644 index 09f1afbf..00000000 --- a/guide/Text/only/onlyIfMessageContains.md +++ /dev/null @@ -1,19 +0,0 @@ -# $onlyIfMessageContains - -Continues the execution only if 'text' contains all provided words, returns the `error message` parameter if it does not. - -## Usage - -```bash -$onlyIfMessageContains[text;word1;word2;...;error message] -``` - -## Example - - - !!exec $onlyIfMessageContains[$username[$authorID];mem;My username doesn't contain `mem`] My username contains `mem`!

-
- - My username contains `mem`

-
-
\ No newline at end of file diff --git a/guide/Text/only/onlyNSFW.md b/guide/Text/only/onlyNSFW.md deleted file mode 100644 index e1fd6b7d..00000000 --- a/guide/Text/only/onlyNSFW.md +++ /dev/null @@ -1,17 +0,0 @@ -# $onlyNSFW -Only in given nsfw channel user will be able to execute this command - -#### Usage: `$onlyNSFW[channelID;channelID;...;error message]` - -#### Example: `$onlyNSFW[797978978978988;:x: - this command is restricted to nsfw channel]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/only/onlyPerms.md b/guide/Text/only/onlyPerms.md deleted file mode 100644 index 9c12a5bb..00000000 --- a/guide/Text/only/onlyPerms.md +++ /dev/null @@ -1,21 +0,0 @@ -# $onlyPerms -Only if user has the given permssions,they will be able to execute this command - -#### Usage: `$onlyPerms[perm;perm;...;error message]` - -#### Example: `$onlyPerms[managemessage;:x: - You don't have manage message permission]` - -::: danger -Use this code, on the FIRST line of your code! If you do not, it will execute all code before this line and not after! -::: - -::: tip Permissions -Check this [list](../../CodeReferences/ref.permissions_list.md) to view all permissions names -::: - -::: tip Note -You can send embed using [Message Curl Format](../../CodeReferences/ref.message_curl_format.md) -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/padLeft.md b/guide/Text/padLeft.md deleted file mode 100644 index ccc94d89..00000000 --- a/guide/Text/padLeft.md +++ /dev/null @@ -1,19 +0,0 @@ -# $padLeft - -Adds a filling text at the start of text, depend on the maximum length - -## Usage - -```bash -$padLeft[Text;Max Length;Filling Text] -``` - -### Example: - - - !!exec $padLeft[5;2;0]
$padLeft[13;2;0]

-
- - 05
13 -
-
\ No newline at end of file diff --git a/guide/Text/padRight.md b/guide/Text/padRight.md deleted file mode 100644 index c339e3b4..00000000 --- a/guide/Text/padRight.md +++ /dev/null @@ -1,19 +0,0 @@ -# $padRight - -Adds a filling text at the end of text, depend on the maximum length - -## Usage - -```bash -$padRight[Text;Max Length;Filling Text] -``` - -### Example: - - - !!exec $padRight[I like custom commands;25;.]

-
- - I like custom commands... - -
\ No newline at end of file diff --git a/guide/Text/repeatMessage.md b/guide/Text/repeatMessage.md deleted file mode 100644 index 9c0ac639..00000000 --- a/guide/Text/repeatMessage.md +++ /dev/null @@ -1,19 +0,0 @@ -# $repeatMessage -this functions repeats the provided message x times - -#### Usage: -`$repeatMessage[times;text]` - -
- - - !!exec $repeatMessage[3;a] - - - aaa - - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/replaceText.md b/guide/Text/replaceText.md deleted file mode 100644 index 99e6a4b7..00000000 --- a/guide/Text/replaceText.md +++ /dev/null @@ -1,19 +0,0 @@ -# $replaceText -Replaces `A` with `X` in `TEXT` - -#### Usage: -`$replaceText[some text;sample;new]` - -
- - - !!exec $replaceText[testing;ing;] - - - test - - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/stringEndsWith.md b/guide/Text/stringEndsWith.md deleted file mode 100644 index 0b2d421b..00000000 --- a/guide/Text/stringEndsWith.md +++ /dev/null @@ -1,29 +0,0 @@ -# $stringEndsWith - -Checks if given message ends with given text - -## Usage - -```bash -$stringEndsWith[message;text] -``` - -### Example: - - - !!exec $stringEndsWith[Hello World;World]

-
- - true

-
-
- -### Example: - - - !!exec $stringEndsWith[Hello World;Discord]

-
- - false - -
\ No newline at end of file diff --git a/guide/Text/stringStartsWith.md b/guide/Text/stringStartsWith.md deleted file mode 100644 index c6ff9f90..00000000 --- a/guide/Text/stringStartsWith.md +++ /dev/null @@ -1,29 +0,0 @@ -# $stringStartsWith - -Determines whether given message starts by another message or not - -## Usage - -```bash -$stringStartsWith[message;text] -``` - -### Example: - - - !!exec $stringStartsWith[Hello World;Hello]

-
- - true

-
-
- -### Example: - - - !!exec $stringStartsWith[Hello World;Hate]

-
- - false - -
\ No newline at end of file diff --git a/guide/Text/textLength.md b/guide/Text/textLength.md deleted file mode 100644 index 5a550cb4..00000000 --- a/guide/Text/textLength.md +++ /dev/null @@ -1,29 +0,0 @@ -# $textLength - -Counts character of a text, or the user's message. - -## Usage - -```bash -$textLength or $textLength[text] -``` - -### Example: - - - !!exec $textLength[Mido]

-
- - 4

-
-
- -### Example: - - - !!exec $textLength[Hello]

-
- - 6 - -
\ No newline at end of file diff --git a/guide/Text/textShuffle.md b/guide/Text/textShuffle.md deleted file mode 100644 index 5b3c429c..00000000 --- a/guide/Text/textShuffle.md +++ /dev/null @@ -1,20 +0,0 @@ -# $textShuffle - -Shuffle a text\ -**Return**: the shuffled text - -## Usage - -```bash -$textShuffle[Text;Separator (optional)] -``` - -### Example: - - - !!exec $textShuffle[Hello WOrld]

-
- - rHl ldeOolW - -
\ No newline at end of file diff --git a/guide/Text/textSlice.md b/guide/Text/textSlice.md deleted file mode 100644 index a2acdf77..00000000 --- a/guide/Text/textSlice.md +++ /dev/null @@ -1,19 +0,0 @@ -# $textSlice - -Returns \ after given position or text in between X and Y - -## Usage - -```bash -$textSlice[text;x;y (optional)] -``` - -### Example: - - - !!exec $textSlice[Hello world;0;5]

-
- - Hello - -
\ No newline at end of file diff --git a/guide/Text/textSplit/advancedTextSplit.md b/guide/Text/textSplit/advancedTextSplit.md deleted file mode 100644 index a990d692..00000000 --- a/guide/Text/textSplit/advancedTextSplit.md +++ /dev/null @@ -1,21 +0,0 @@ -# $advancedTextSplit -The first field is the message we want to split and get indexes for. The second -field would be the split/seperator used in the text, and the next field would get the value of the index provided, setting this index value as the new text. The next -fields work as splitters/seperators and new indexes for this new text. - - -#### Usage: `$advancedTextSplit[text;split;index;split;index;...]` -
- - - !!exec $advancedTextSplit[Wow, what a nice day, i'll go outside;,;2] /* Will get the second index */ - - - what a nice day - - -::: warning This function is only for EXPERTS -::: - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/textSplit/concatTextSplit.md b/guide/Text/textSplit/concatTextSplit.md deleted file mode 100644 index 247041fb..00000000 --- a/guide/Text/textSplit/concatTextSplit.md +++ /dev/null @@ -1,20 +0,0 @@ -# $concatTextSplit -adds an array to the end of an array from `$textsplit` - -#### Usage: `$concatTextSplit[text;separator(optional, default = ,)]` -
- - - !!exec $textsplit[Rake Mido; ] {{ '\n' }} $concatTextSplit[Wiki,Mika;,] {{ '\n' }} $arrayJoin[ ] - - - Rake Mido Wiki Mika - - - -::: danger -This function got deprecated, use `$arrayConcat` instead -::: - -##### Function difficulty: -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/editTextSplitElement.md b/guide/Text/textSplit/editTextSplitElement.md deleted file mode 100644 index a2c20042..00000000 --- a/guide/Text/textSplit/editTextSplitElement.md +++ /dev/null @@ -1,19 +0,0 @@ -# $editTextSplitElement -adds an element to an array from `$textsplit` or replaces the value by index of the split text from `$textsplit` - -#### Usage: `$editTextSplitElement[index;new value]` -
- - - !!exec $textsplit[Wiki Rake; ] {{ '\n' }} $editTextSplitElement[1;Mido] {{ '\n' }} $arrayJoin[ ] - - - Mido Rake - - - -::: danger -This function got deprecated, use `$arraySet` instead -::: -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/findTextSplitIndex.md b/guide/Text/textSplit/findTextSplitIndex.md deleted file mode 100644 index 322a40cb..00000000 --- a/guide/Text/textSplit/findTextSplitIndex.md +++ /dev/null @@ -1,20 +0,0 @@ -# $findTextSplitIndex -returns the index of the first occurrence of a value in an array from `$textsplit` - -#### Usage: `$findTextSplitIndex[value]` -
- - - !!exec $textsplit[Rake Wiki Mika Mido; ] {{ '\n' }} $findTextSplitIndex[Wiki] - - - 2 - - - -::: danger -This function got deprecated, use `$arraySearch` instead -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/getTextSplitLength.md b/guide/Text/textSplit/getTextSplitLength.md deleted file mode 100644 index 57fd3c81..00000000 --- a/guide/Text/textSplit/getTextSplitLength.md +++ /dev/null @@ -1,24 +0,0 @@ -# $getTextSplitLength -Returns the amount of objects created by `$textSplit` - - -
- - - - !!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] - {{ '\n' }} - $getTextSplitLength - - - - 10 - - - -::: danger -This function got deprecated, use `$arrayLength` instead -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/joinSplitText.md b/guide/Text/textSplit/joinSplitText.md deleted file mode 100644 index 407c85e8..00000000 --- a/guide/Text/textSplit/joinSplitText.md +++ /dev/null @@ -1,23 +0,0 @@ -# $joinSplitText -Joins the `$textSplit` indexes by a given separator - -
- - - - !!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] - {{ '\n' }} - $joinSplitText[-] - - - - 1-2-3-4-5-6-7-8-9-10 - - - -::: danger -This function got deprecated, use `$arrayJoin` instead -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/removeSplitTextElement.md b/guide/Text/textSplit/removeSplitTextElement.md deleted file mode 100644 index 3ea15199..00000000 --- a/guide/Text/textSplit/removeSplitTextElement.md +++ /dev/null @@ -1,13 +0,0 @@ -# $removeSplitTextElement - -Removes an element or elements from $textSplit by using their indexes. - -## Usage - -```bash -$removeSplitTextElement[index;index2;...] -``` - -::: danger -This function got deprecated, use `$arrayRemove` instead -::: \ No newline at end of file diff --git a/guide/Text/textSplit/removeTextSplitElement.md b/guide/Text/textSplit/removeTextSplitElement.md deleted file mode 100644 index f883c252..00000000 --- a/guide/Text/textSplit/removeTextSplitElement.md +++ /dev/null @@ -1,12 +0,0 @@ -# $removeTextSplitElement -removes an element from an array from `$textsplit` - -#### Usage: `$removeTextSplitElement[Index]` -
- -::: danger -This function got deprecated, use `$arrayRemove` instead -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/spliceTextJoin.md b/guide/Text/textSplit/spliceTextJoin.md deleted file mode 100644 index 18d0e7d2..00000000 --- a/guide/Text/textSplit/spliceTextJoin.md +++ /dev/null @@ -1,16 +0,0 @@ -# $spliceTextJoin -Splits a text with `separator1`, then joins with it `separator2` every `x` times, and then joins with `separator3` every `x-1` times. - -#### Usage: `$spliceTextJoin[text;separator1;separator2;separator3;every]` -
- - - !!exec $spliceTextJoin[1 2 3 4 5 6 7; ;+;-;2] - - - 1+2-3+4-5+6 - - - -##### Function difficulty: -###### Tags: diff --git a/guide/Text/textSplit/splitText.md b/guide/Text/textSplit/splitText.md deleted file mode 100644 index 569e4a4a..00000000 --- a/guide/Text/textSplit/splitText.md +++ /dev/null @@ -1,24 +0,0 @@ -# $splitText -returns the element by index from `$textSplit` - -#### Usage: `$splitText[index]` -
- - - - !!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] - {{ '\n' }} - $splitText[2] - - - - 2 - - - -::: danger -This function got deprecated, use `$arrayGet` instead -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/textSplit/textSplit.md b/guide/Text/textSplit/textSplit.md deleted file mode 100644 index ad5a930d..00000000 --- a/guide/Text/textSplit/textSplit.md +++ /dev/null @@ -1,16 +0,0 @@ -# $textSplit -Splits the provided text with `seperator` and creates an array. To access them use: `$arrayGet` or other array functions - - -#### Usage: `$textSplit[text;separator(optional, default = ,)]` -
- - - - !!exec $textSplit[1 2 3 4 5 6 7 8 9 10; ] - - - - -##### Function difficulty -###### Tags: diff --git a/guide/Text/textTrim.md b/guide/Text/textTrim.md deleted file mode 100644 index 39ba1f0f..00000000 --- a/guide/Text/textTrim.md +++ /dev/null @@ -1,19 +0,0 @@ -# $textTrim - -Removes useless spaces from given text. - -## Usage - -```bash -$textTrim[text] -``` - -### Example: - - - !!exec $textTrim[ My name is Mido ]

-
- - My name is Mido - -
\ No newline at end of file diff --git a/guide/Text/toLocaleUpperCase.md b/guide/Text/toLocaleUpperCase.md deleted file mode 100644 index b2fd7673..00000000 --- a/guide/Text/toLocaleUpperCase.md +++ /dev/null @@ -1,19 +0,0 @@ -# $toLocaleUppercase[text] -this sentence uppercases every first char of a word in a sentence - -#### Usage: -`$toLocaleUppercase[text]` - -
- - - !!exec $toLocaleUppercase[hello how are you?] - - - Hello How Are You? - - - - -##### Function difficulty -###### Tags: diff --git a/guide/Text/toLowercase.md b/guide/Text/toLowercase.md deleted file mode 100644 index f746f0fb..00000000 --- a/guide/Text/toLowercase.md +++ /dev/null @@ -1,19 +0,0 @@ -# $toLowercase[text] -this functions lowercases every character - -#### Usage: -`$toLowercase[text]` - -
- - - !!exec $toLowercase[HeLlO] - - - hello - - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/toUppercase.md b/guide/Text/toUppercase.md deleted file mode 100644 index e479a122..00000000 --- a/guide/Text/toUppercase.md +++ /dev/null @@ -1,19 +0,0 @@ -# $toUppercase[text] -this functions uppercases every character - -#### Usage: -`$toUppercase[text]` - -
- - - !!exec $touppercase[hElLo] - - - HELLO - - - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Text/uri.md b/guide/Text/uri.md deleted file mode 100644 index df923f79..00000000 --- a/guide/Text/uri.md +++ /dev/null @@ -1,29 +0,0 @@ -# $uri - -Decodes or Encodes a url Example when you encode a url 'hello world' = 'hello%20world' - -## Usage - -```bash -$uri[decode/encode;text] -``` - -### Example (Encoding): - - - !!exec $uri[encode;Hello World]

-
- - Hello%20World

-
-
- -### Example (Decoding): - - - !!exec $uri[decode;Hello%20World]

-
- - Hello World - -
\ No newline at end of file diff --git a/guide/Text/void.md b/guide/Text/void.md deleted file mode 100644 index d54487cf..00000000 --- a/guide/Text/void.md +++ /dev/null @@ -1,19 +0,0 @@ -# $void - -A function that eats input but return nothing! - -## Usage - -```bash -$void[ANYTHING] -``` - -### Example: - - - !!exec $let[name;Mido]
My name is $void[$get[name]]

-
- - My name is - -
\ No newline at end of file diff --git a/guide/Threads/addUsersToThread.md b/guide/Threads/addUsersToThread.md deleted file mode 100644 index acdcad40..00000000 --- a/guide/Threads/addUsersToThread.md +++ /dev/null @@ -1,21 +0,0 @@ -# $addUsersToThread - -Add users to a thread - -## Usage - -```bash -$addUsersToThread[Thread ID;User 1 ID;User 2 ID;User 3 ID....] -``` - -### Example (Add the triggerer to a thread): -```bash -$addUsersToThread[1024373454578917426;$authorID] - - -``` - -### Example (add multiple users): -```bash -$addUsersToThread[1024373454578917426;$authorID;788361834360864808] -``` \ No newline at end of file diff --git a/guide/Threads/archiveThread.md b/guide/Threads/archiveThread.md deleted file mode 100644 index a77621aa..00000000 --- a/guide/Threads/archiveThread.md +++ /dev/null @@ -1,21 +0,0 @@ -# $archiveThread - -archive/unarchive a thread - -## Usage - -```bash -$archiveThread[Thread ID;Archive? (yes/no)] -``` - -### Example (Archiving a thread): -```bash -$archiveThread[1024373454578917426] - - -``` - -### Example (Unarchiving a thread): -```bash -$archiveThread[1024373454578917426;no] -``` \ No newline at end of file diff --git a/guide/Threads/closePost.md b/guide/Threads/closePost.md deleted file mode 100644 index b187bbd0..00000000 --- a/guide/Threads/closePost.md +++ /dev/null @@ -1,21 +0,0 @@ -# $closePost - -Close/Open a post - -## Usage - -```bash -$closePost[Post ID;Close (yes/no)] -``` - -### Example (Closing a post): -```bash -$closePost[1024373454578917426] - - -``` - -### Example (Opening a post): -```bash -$closePost[1024373454578917426;no] -``` \ No newline at end of file diff --git a/guide/Threads/createPost.md b/guide/Threads/createPost.md deleted file mode 100644 index ba133b51..00000000 --- a/guide/Threads/createPost.md +++ /dev/null @@ -1,31 +0,0 @@ -# $createPost - -add a new post in forum channel - -## Usage - -```bash -$createPost[ - {forum=Forum Name/ID} - {title=Post title} - {content=Post Content} - {archive=Auto-archive duration} - {message_ratelimit=how often messages can be sent} - {return_id=yes/no} - {reason=reason for audit log} - {tag=apply Tag1} - {tag=apply Tag2}... -] -``` - -### Auto-archive Inactive post: -It accepts only 7 durations: 1h, 1d, 3d, 7d - -### Post Content: -It accept embed and curl format like\ -``` -{content= - {desc:Embed description} - {title:Embed Title} -} -``` diff --git a/guide/Threads/createThread.md b/guide/Threads/createThread.md deleted file mode 100644 index c667aa53..00000000 --- a/guide/Threads/createThread.md +++ /dev/null @@ -1,36 +0,0 @@ -# $createThread -Create a thread, corresponding to the messageID specified in the function -#### Usage: -`$createThread[Channel ID;Message ID;Thread Name;Reason;Duration (1h/1d/3d/7d)(optional);Return ID (yes/no)(optional);Private Thread? (yes/no)]` - -#### Example (Create Thread on user message): -```bash -$createThread[ - {channel=$channelID} - {message=$messageID} - {name=Example} -] -``` - -#### Example (Create A private thread): -```bash -$createThread[ - {channel=$channelID} - {message=$messageID} - {name=Example} - {private=yes} -] -``` - -::: tip Related Functions -`$createChannel`, create a channel - -`$createRole`, create a role -::: - -::: tip -This Command supports Curl Arguments, a link to the page explaining it, will get added when done -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Threads/deletePost.md b/guide/Threads/deletePost.md deleted file mode 100644 index 0b677cba..00000000 --- a/guide/Threads/deletePost.md +++ /dev/null @@ -1,14 +0,0 @@ -# $deletePost - -delete a post - -## Usage - -```bash -$deletePost[Post ID] -``` - -### Example: -```bash -$deletePost[1024373454578917426] -``` \ No newline at end of file diff --git a/guide/Threads/deletePosts.md b/guide/Threads/deletePosts.md deleted file mode 100644 index 9a42af7b..00000000 --- a/guide/Threads/deletePosts.md +++ /dev/null @@ -1,14 +0,0 @@ -# $deletePosts - -delete posts up to 10 post - -## Usage - -```bash -$deletePost[Post 1;Post 2;...] -``` - -### Example: -```bash -$deletePosts[1024373454578917426;1024373433578915132;1222373424378915555] -``` \ No newline at end of file diff --git a/guide/Threads/deleteThreads.md b/guide/Threads/deleteThreads.md deleted file mode 100644 index cb19e4ff..00000000 --- a/guide/Threads/deleteThreads.md +++ /dev/null @@ -1,10 +0,0 @@ -# $deleteThreads -threads with the provided thread id gets deleted -### Usage: `$deleteThreads[threadid;threadid2;...]` - -Example: `$deleteThreads[809890890890000]` -Don't forget to change the thread id - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Threads/editPost.md b/guide/Threads/editPost.md deleted file mode 100644 index 7643c33b..00000000 --- a/guide/Threads/editPost.md +++ /dev/null @@ -1,51 +0,0 @@ -# $editPost - -edit an existing post in forum channel - -## Usage - -```bash -$editPost[ - {post_id=Post ID} - {title=New Post title} - {content=New Post Content (only if bot is author)} - {archive=Auto-archive duration} - {message_ratelimit=how often messages can be sent} - {locked=is post locked? (yes/no)} - {closed=is post closed? (yes/no)} - {pinned=is post pinned? (yes/no)} - {reason=reason for audit log} - {tag=Add Tag1} - {tag=Add Tag2}... - {remove_tag=Remove Tag3} - {remove_tag=Remove Tag4}... -] -``` - -### Auto-archive Inactive post: -It accepts only 7 durations: 1h, 1d, 3d, 7d - -### Locked/Closed/Pinned Values: -They accept: `yes` or `no` - -### Tag values: -It accept the tag names only, if not valid will be ignored. - -### Post Content: -It accept embed and curl format like\ -``` -{content= - {desc:Embed description} - {title:Embed Title} -} -``` - -### Example (Lock , Add Tag Inactive, Remove Tag Active): -```bash -$editPost[ - {id=1234} - {locked=yes} - {remove_tag=Active} - {tag=Inactive} -] -``` diff --git a/guide/Threads/editThread.md b/guide/Threads/editThread.md deleted file mode 100644 index 8e0b956b..00000000 --- a/guide/Threads/editThread.md +++ /dev/null @@ -1,20 +0,0 @@ -# $editThread -Edit a Thread. - -#### Usage: -`$editThread[Channel ID;Thread ID;Thread Name;Archived (yes/no);duration (1h/1d/3d/7d)(optional);Slowmode;Locked (yes/no)]` - -#### Example: -`$editThread[$channelID;$getServerVar[threadID];Cat Discussion;yes]` Will edit the thread stored in the server var "threadID" - - -::: danger -You can only use the durations, allowed by your boosting level! Please do not try to use `7d` if your server hasn't got level 3 boosting perks -::: - -::: tip -This Command supports Curl Arguments, a link to the page explaining it, will get added when done -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Threads/getThreads.md b/guide/Threads/getThreads.md deleted file mode 100644 index 8fef8cbc..00000000 --- a/guide/Threads/getThreads.md +++ /dev/null @@ -1,22 +0,0 @@ -# $getThreads -Get all threads from a channel. - -#### Usage: -`$getThreads[Channel ID;Type to return (name/id);Seperator (default:, )]` - -
- - - !!exec $getThreads[$channelID;name; | ] - - - Cat Disscussion | Help - - - -::: tip -This Command supports Curl Arguments, a link to the page explaining it, will get added when done -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Threads/joinThreads.md b/guide/Threads/joinThreads.md deleted file mode 100644 index 16de0d0d..00000000 --- a/guide/Threads/joinThreads.md +++ /dev/null @@ -1,10 +0,0 @@ -# $joinThreads -custom command bot joins the threads with the provided thread id -### Usage: `$joinThreads[threadid;threadid2;...]` - -Example: `$joinThreads[809890890890000]` -Don't forget to change the thread id - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Threads/leaveThreads.md b/guide/Threads/leaveThreads.md deleted file mode 100644 index 1b7606aa..00000000 --- a/guide/Threads/leaveThreads.md +++ /dev/null @@ -1,10 +0,0 @@ -# $leaveThreads -custom command bot leaves the threads with the provided thread id -### Usage: `$leaveThreads[threadid;threadid2;...]` - -Example: `$leaveThreads[809890890890000]` -Don't forget to change the thread id - - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Threads/lockPost.md b/guide/Threads/lockPost.md deleted file mode 100644 index 0c9a932e..00000000 --- a/guide/Threads/lockPost.md +++ /dev/null @@ -1,21 +0,0 @@ -# $lockPost - -lock/unlock a post - -## Usage - -```bash -$lockPost[Post ID;Lock? (yes/no)] -``` - -### Example (Locking a post): -```bash -$lockPost[1024373454578917426] - - -``` - -### Example (Unlocking a post): -```bash -$lockPost[1024373454578917426;no] -``` \ No newline at end of file diff --git a/guide/Threads/lockThread.md b/guide/Threads/lockThread.md deleted file mode 100644 index 491b210e..00000000 --- a/guide/Threads/lockThread.md +++ /dev/null @@ -1,21 +0,0 @@ -# $lockThread - -lock/unlock a thread - -## Usage - -```bash -$lockThread[Thread ID;Lock? (yes/no)] -``` - -### Example (Locking a thread): -```bash -$lockThread[1024373454578917426] - - -``` - -### Example (Unlocking a thread): -```bash -$lockThread[1024373454578917426;no] -``` \ No newline at end of file diff --git a/guide/Threads/pinPost.md b/guide/Threads/pinPost.md deleted file mode 100644 index 62db0dd9..00000000 --- a/guide/Threads/pinPost.md +++ /dev/null @@ -1,21 +0,0 @@ -# $pinPost - -pin/unpin a post - -## Usage - -```bash -$pinPost[Post ID;pin? (yes/no)] -``` - -### Example (pining a post): -```bash -$pinPost[1024373454578917426] - - -``` - -### Example (Unpining a post): -```bash -$pinPost[1024373454578917426;no] -``` \ No newline at end of file diff --git a/guide/Threads/removeUsersFromThread.md b/guide/Threads/removeUsersFromThread.md deleted file mode 100644 index 91336672..00000000 --- a/guide/Threads/removeUsersFromThread.md +++ /dev/null @@ -1,21 +0,0 @@ -# $removeUsersFromThread - -remove users from a thread - -## Usage - -```bash -$removeUsersFromThread[Thread ID;User 1 ID;User 2 ID;User 3 ID....] -``` - -### Example (remove the triggerer from a thread): -```bash -$removeUsersFromThread[1024373454578917426;$authorID] - - -``` - -### Example (remove multiple users): -```bash -$removeUsersFromThread[1024373454578917426;$authorID;788361834360864808] -``` \ No newline at end of file diff --git a/guide/Threads/thread.md b/guide/Threads/thread.md deleted file mode 100644 index 3c95faf1..00000000 --- a/guide/Threads/thread.md +++ /dev/null @@ -1,35 +0,0 @@ -# $thread -Gets info trom a thread. - -#### Usage: -`$thread[Thread ID;Type]` - -
- - - !!exec <@!$thread[owner]> - - - Member - - - -::: details Valid objects for "Type" -* `archivedat` -* `duration` -* `id` -* `members` -* `memberscount` -* `messagescount` -* `name` -* `owner` -* `locked` -* `parent` -::: - -::: tip -This Command supports Curl Arguments, a link to the page explaining it, will get added when done -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Timeout/timeoutAction.md b/guide/Timeout/timeoutAction.md deleted file mode 100644 index 238c8b47..00000000 --- a/guide/Timeout/timeoutAction.md +++ /dev/null @@ -1,11 +0,0 @@ -# $timeoutAction - -Returns `add` if a user was timed out, `remove` if the timeout was removed.\ -This function only works in the Timeout trigger. - -## Usage - -```bash -$timeoutAction -``` - diff --git a/guide/Timeout/timeoutBy.md b/guide/Timeout/timeoutBy.md deleted file mode 100644 index 41b3b1f8..00000000 --- a/guide/Timeout/timeoutBy.md +++ /dev/null @@ -1,11 +0,0 @@ -# $timeoutBy - -Return the user id of the admin/mod that timed out the user.\ -This function only works in the Timeout trigger. - -## Usage - -```bash -$timeoutBy -``` - diff --git a/guide/Timeout/timeoutReason.md b/guide/Timeout/timeoutReason.md deleted file mode 100644 index e8de3372..00000000 --- a/guide/Timeout/timeoutReason.md +++ /dev/null @@ -1,11 +0,0 @@ -# $timeoutReason - -Return the reason of the timeout.\ -This function only works in the Timeout trigger. - -## Usage - -```bash -$timeoutReason -``` - diff --git a/guide/Timeout/userGetTimeout.md b/guide/Timeout/userGetTimeout.md deleted file mode 100644 index d9d8b013..00000000 --- a/guide/Timeout/userGetTimeout.md +++ /dev/null @@ -1,11 +0,0 @@ -# $userGetTimeout - -Return the time left of the timeout in milliseconds.\ -If user is not timed out, it will return 0. - -## Usage - -```bash -$userGetTimeout[user id] -``` - diff --git a/guide/Timeout/userRemoveTimeout.md b/guide/Timeout/userRemoveTimeout.md deleted file mode 100644 index 5240fd5f..00000000 --- a/guide/Timeout/userRemoveTimeout.md +++ /dev/null @@ -1,10 +0,0 @@ -# $userRemoveTimeout - -Removes a timeout from a user. - -## Usage - -```bash -$userRemoveTimeout[user id;reason (optional)] -``` - diff --git a/guide/Timeout/userSetTimeout.md b/guide/Timeout/userSetTimeout.md deleted file mode 100644 index ec644607..00000000 --- a/guide/Timeout/userSetTimeout.md +++ /dev/null @@ -1,10 +0,0 @@ -# $userSetTimeout - -Sets a user timeout, so the user cannot talk/interact in the server. - -## Usage - -```bash -$userSetTimeout[user id;time (optional, default:'10m');reason (optional)] -``` - diff --git a/guide/Trigger/1.triggers.md b/guide/Trigger/1.triggers.md deleted file mode 100644 index 6a4a40c2..00000000 --- a/guide/Trigger/1.triggers.md +++ /dev/null @@ -1,69 +0,0 @@ -# Triggers showcase -Here's a quick preview of all available triggers: - -## [Word](./word.md) -Triggers on specific words/patterns -> ![Word](https://i.imgur.com/zQtDgDM.png) - -## [Reaction](./reaction.md) -Fires once someone reacts to a message -> ![](https://i.imgur.com/h1pe28J.gif) - -## [Button](./button.md) -Detects users clicking buttons sent by the bot -> ![](https://i.imgur.com/QrxFg8d.png) - -## [Menu](./menu.md) -Activates when someone confirms their choice in menu -> ![](https://i.imgur.com/7wZLMIq.gif) - -## [Slash command](./slash.md) -Responds to a discord slash command created with the bot -> ![](https://i.imgur.com/Hspy46H.gif) - -## [Modal](./modal.md) -Triggers on submittion of a modal (form) if that modal was sent by the bot -> ![](https://i.imgur.com/ON9e1D4.png) - -## [Channel](./channel.md) -Detects channels being added or removed -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105138748414492772/channel-trigger.gif) - -## [Role](./roleaddremove.md) -Triggers on role assignment -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105149730553614486/voice-trigger.gif) - -## [Timed event](./time.md) -Executes the code at a set time -> ![](https://cdn.discordapp.com/attachments/1105135517055594508/1105141376083038240/image.png) - -## [Interval](./time.md) -Repeatedly executes the code once in a specific time (e.g every hour) -> ![](https://cdn.discordapp.com/attachments/1100128432395927765/1116042286812385370/image.png) - -## [Voice](./voicecondecon.md) -Fires of when user leaves or joins a voice channel -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105149730553614486/voice-trigger.gif) - -## [Server boost](./serverboost.md) -Detects people boosting the server -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105142982270783587/image.png) - -## [Join or Leave](./joinorleave.md) -Triggers when someone joins or leaves the server -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105143572510027806/image.png) - -## [On Upvote](./upvote.md) -Triggers when someone upvote in Top.gg. - -## [User Command](./app_cmd_user.md) -Triggers when user command is selected from the user's context menu. - -## [Message Command](./app_cmd_message.md) -Triggers when user command is selected from the message's context menu. - -## [Library](./library.md) -A code which can be imported in any other code -> ![](https://cdn.discordapp.com/attachments/957286111250624552/1105145858581872750/image.png) -> -> In this example $includeLibrary has been used to import a library called `tools` which contained a custom $embedMsg function. diff --git a/guide/Trigger/app_cmd_message.md b/guide/Trigger/app_cmd_message.md deleted file mode 100644 index 2dfdaa04..00000000 --- a/guide/Trigger/app_cmd_message.md +++ /dev/null @@ -1,89 +0,0 @@ -# On Message Command (Context Menu) - -## Basic Information - -This trigger runs when a user selects your custom command from a **message's context menu**. - -The command is triggered by the user who selected the action, while the selected message becomes the **target** of the command. - -For example, if `@Mido` right-clicks a message from `@Zero` and selects your custom command: - -* `$userID` → User ID of Mido, the user who triggered the command -* `$eventTargetID` → Message ID of the selected message -* `$commandName` → The name of the context menu command - -## Syntax - -The trigger value is the **name of the context menu command**. - -For example: - -```text -Report Message -``` - -The command will appear as **Report Message** in the message's context menu. - -## Example - -Create a new custom command and set its **Trigger Type** to **On Message Command (Context Menu)**. - -Set the trigger to: - -```text -Report Message -``` - -You can then use the selected message's ID to retrieve information about the message or perform actions related to it. - -For example: - -```php -$interactionReply[Message reported successfully!] -``` - -The selected message can be accessed using `$eventTargetID` or `$messageID`. - -You can also use `$msg` to get information about the selected message, such as its author or content. - -For example: - -```php -$interactionReply[Message by <@$msg[$eventTargetID;author]> has been reported!] -``` - -If `@Mido` selects **Report Message** on a message sent by `@Zero`, the command can access Zero's message and respond accordingly. - -### That's it! 🎉 - -### Command Limits - -Discord allows a maximum of **15 Message context-menu commands per server**. - -The command name must also be **unique among Message context-menu commands in that server**. - -For example, you can have: - -```text -Report Message -Delete Message -Quote Message -Translate Message -``` - -but you cannot register two Message context-menu commands with the same name. - - -## Some functions related to On Message Command - -`$userID`: Returns the ID of the user who triggered the context menu command. - -`$eventTargetID`: Returns the ID of the message selected from the context menu. - -`$messageID`: Returns the ID of the message selected from the context menu. - -`$commandName`: Returns the name of the context menu command that was triggered. This is the same as the command's trigger value. - -`$interactionReply`: Sends a reply to the context menu interaction. - -`$msg`: Provides information about the selected message, such as its author, content, and other message properties. diff --git a/guide/Trigger/app_cmd_user.md b/guide/Trigger/app_cmd_user.md deleted file mode 100644 index 9cab803a..00000000 --- a/guide/Trigger/app_cmd_user.md +++ /dev/null @@ -1,76 +0,0 @@ -# On User Command (Context Menu) - -## Basic Information - -This trigger runs when a user selects your custom command from another user's **context menu**. - -The command is triggered by the user who selected the action, while the selected user becomes the **target** of the command. - -For example, if `@Mido` right-clicks `@Zero` and selects your custom command: - -* `$userID` → User ID of Mido, the user who triggered the command -* `$eventTargetID` → User ID of Zero, the selected target user -* `$commandName` → The name of the context menu command - -## Syntax - -The trigger value is the **name of the context menu command**. - -For example: - -```text -Promote User -``` - -The command will appear as **Promote User** in the user's context menu. - -## Example - -Create a new custom command and set its **Trigger Type** to **On User Command (Context Menu)**. - -Set the trigger to: - -```text -Promote User -``` - -You can then use the target user's ID to perform actions on them. - -For example: - -```php -$giveRoles[$eventTargetID;Supporter] -$interactionReply[Promoted $mention[$eventTargetID] to Supporter!] -``` - -If `@Mido` selects **Promote User** on `@Zero`, the command will give the `Supporter` role to Zero. - -### That's it! 🎉 - -### Command Limits - -Discord allows a maximum of **15 User context-menu commands per server**. - -The command name must also be **unique among User context-menu commands in that server**. - -For example, you can have: - -```text -Promote User -Ban User -View Profile -Give Supporter -``` - -but you cannot register two User context-menu commands with the same name. - - -## Some functions related to On User Command - -`$userID`: Returns the ID of the user who triggered the context menu command. - -`$eventTargetID`: Returns the ID of the user selected from the context menu. - -`$commandName`: Returns the name of the context menu command that was triggered. This is the same as the command's trigger value. - -`$interactionReply`: Send the reply of the user command menu action diff --git a/guide/Trigger/button.md b/guide/Trigger/button.md deleted file mode 100644 index 445a4d5a..00000000 --- a/guide/Trigger/button.md +++ /dev/null @@ -1,52 +0,0 @@ -# Button Click - -This trigger type will detect when a user clicks a button. -The button has to be sent by the bot. - -#### Example of a button: -> ![](https://media.discordapp.net/attachments/772051120368910371/880527140817367070/first-button.gif) - - - -## Syntax -In order for a button command to work, there must be a button ID specified. Here's how you can provide it: - -| Name | Syntax | Example | Explanation | -| --- | --- | --- | --- | -| Single ID | `button ID` | `staff-app` | Detects a button with "staff-app" ID | -| Multiple IDs | `buttonID\|buttonID` | `Apple\|Banana\|Orange` | Matches a buttons with IDs: "Apple", "Banana", or "Orange" | -| Regex | `/RegExp/` | `/User-\d{18,}/` | Will trigger on any button following the pattern "User-ID" like "User-434342521997492224" | - - -::: tip Capitalization -All button IDs are CASE SENSITIVE, so a if a command doesn't trigger, check the capitalization! -::: - -::: tip Tricky behavior -Button commands use regex to match the button ID, so commands with IDs with similiar beginnings may interfere. - -#### For Example: -Let's say we have two buttons with the following IDs: - -* `test` -* `testone` - -If we had a command `Button: test` both buttons will trigger it. - -##### Resolving the Problem -Just change your id to `^id$` -In regex ^ and $ are used to match the start and end of the string. -::: - -### Related Functions -* `$button` - sends a button -* `$buttonID` - returns the button id -* `$buttonEmoji` - returns the button emoji -* `$buttonLabel` - returns the button label -* `$buttonURL` - returns the button url -* `$buttonStyle` - returns the button style -* `$buttonIsDisabled` - returns whetheer the button disabled - -## More Info - -Do you want to know more about the bot's syntax? You can check out [this](../Other/syntax.md) page to learn more! diff --git a/guide/Trigger/channel.md b/guide/Trigger/channel.md deleted file mode 100644 index cf6867d7..00000000 --- a/guide/Trigger/channel.md +++ /dev/null @@ -1,37 +0,0 @@ -# Channel add/remove - -## Syntax -Use this syntax to let the bot trigger when a channel is added or removed or both - -` ` (empty) -> trigger when channel is removed or added - -`add` -> trigger when a channel is created - -`add=category id` -> trigger when a channel is being created in category with id `category id` - -`add, channel type` -> trigger when new channel/thread of certain type created, such as `post, text, voice, category,..` - - -`remove` -> trigger when a channel is removed -`remove, channel type` -> trigger when certain type of channel is being removed like `post, text, voice, category` - -`remove=category id` -> trigger when a channel is being deleted in category with id `category id` - -::: tip Supported Channel Types -You can see the whole list [here.](../CodeReferences/ref.channel_types.md) -::: - -## Related Functions -The following list is functions that you might need: - -`$eventChannelID`: will return the channel id that got created/removed - -`$eventChannelParent`: will return the channel's category id - -## Example -### Let's make a command with `add` as value to only trigger when someone create channel -### and post it in `log` channel -![Example Image](https://i.imgur.com/yCoWNFr.png) - -### the output when i create a channel named `newly-born` -![Output Image](https://i.imgur.com/R4bgKyv.png) diff --git a/guide/Trigger/joinorleave.md b/guide/Trigger/joinorleave.md deleted file mode 100644 index f2aa11ef..00000000 --- a/guide/Trigger/joinorleave.md +++ /dev/null @@ -1,42 +0,0 @@ -# On Join/Leave - -This trigger type will trigger when a user joins or leaves the server depending on your configuration. - -::: warning Custom Bots -Custom bots using Tier 3+ are required to have the `Guild Members` intent enabled for this trigger to work. -::: - -## Example - -Select when to trigger, and choose a channel where this command will be executed. - -![](/images/triggers/join-leave/0.png) - -Enter code: - -```php -Hello $displayName! Welcome to our server. -``` - -## Testing - -Wait for a user to join and see if it worked! - - - - Hello Member! Welcome to our server. - - - -::: tip Test Command -For member joins/leaves you can use `!!emit` command to trigger the On Join/Leave trigger. -::: - - - - !!emit uadd - - - Hello Member! Welcome to our server. - - diff --git a/guide/Trigger/library.md b/guide/Trigger/library.md deleted file mode 100644 index 711a2b68..00000000 --- a/guide/Trigger/library.md +++ /dev/null @@ -1,34 +0,0 @@ -# Library - -## Basic Information -Library is one of the unique triggers, that doesn't get triggered by events in your server. A library can be included (referenced) in other commands so you can use the code in it after calling `$includeLibrary[Library name]`. - -The goal of this trigger is simply sharing code, functions or objects across multiple custom commands (see the example below). - -## Syntax -The value of the trigger is the `Library name`. - -## Example -### Create your library that contains users' information -> Note that the library name is `users`. We will use it in next step. - -![](https://i.imgur.com/93WZesG.png) - -### Create a normal word command `whois` -First, let's include the library, with `$includeLibrary`. -After including, we can directly use the object defined in the library and retrieve some information to display. - -![](https://i.imgur.com/KQbkjrS.png) - -### Output -![](https://i.imgur.com/v9DT5xR.png) - -## What is the point? -In this example the object is only used in a single custom command. But at some point you might want to add another custom command using the same object, e.g. `listusers` sending a message with all users in it. When the object changes, e.g. you want to add another user to it, then you'll have to update the object in all custom commands accordingly. This takes time and there's a chance errors get introduced or one of the custom commands using this object is missed and now uses a different object. With a library you can use the same object across all these commands without having to copy it to each. Updating the object is done in a single place and all custom commands referencing (including) the library `users` will use the updated object at the same time. - -In the same way you can also define functions in a library to share code across multiple custom commands. - -That demonstrates a library's usefulness. - -## Some functions related to Library -`$includeLibrary`: Include your library diff --git a/guide/Trigger/menu.md b/guide/Trigger/menu.md deleted file mode 100644 index 3662a849..00000000 --- a/guide/Trigger/menu.md +++ /dev/null @@ -1,32 +0,0 @@ -# Menu Interaction - -## Basic Information -This trigger type will trigger when a user selects an option in a menu. - -## Syntax -the value is the menu id, for example: - -`test` -> will trigger only when a user selects an option in a menu with id `test` - -`menu_1|menu_2` -> will trigger only when a user selects an option in a menu with id `menu_1` or `menu_2` - -## Example -### let's first send a menu (with id mymenu) with some options using `$selectMenu` -![](https://i.imgur.com/TqPNG4N.png) - -### let's make a new command to respond when user select an option in this menu -Trigger type to be `Menu`, Trigger value to be the menu id, in this case `mymenu` - -Now to know which option the user selected, we will use a function `$eventSelected` - -![](https://i.imgur.com/G41cLKl.png) - -### now save and let's test by selecting rake -![](https://i.imgur.com/ZulHZJz.gif) - -### that's it! :tada: - -## Some functions related to Menu Trigger -`$eventSelected`: Return the option's value that user selected - -`$menuId`: Return the menu id that triggered the command diff --git a/guide/Trigger/modal.md b/guide/Trigger/modal.md deleted file mode 100644 index 6a568c2c..00000000 --- a/guide/Trigger/modal.md +++ /dev/null @@ -1,44 +0,0 @@ -# Modal (Form) Interaction - -## Basic Information -This trigger type will trigger when a user submits a modal. - -## Syntax -the value is the modal id, for example: - -`modal_1` -> will trigger only when a user submits a modal with id `modal_1` - -`modal_1|modal_2` -> will trigger only when a user submits a modal with id `modal_1` or `modal_2` - -## Example -### let's first send a button (with id apply-form) using `$button` -![](https://i.imgur.com/Pmvl0XZ.png) - -### let's make a command to send a modal (with id mymodal) when user click the button using `$modal` -![](https://i.imgur.com/T4fpwhF.png) - -#### And that's what will happen when user click on the button -![](https://i.imgur.com/Z6fbIsU.png) - -### now let's make a new command to respond to the modal submit -Trigger type to be `Modal`, Trigger value to be the modal id, in this case `mymodal` - -To get what user input in the modal, we will use `$modalAnswer` - -![](https://i.imgur.com/nWI9q9E.png) - -### now save and test by submitting the modal -![](https://i.imgur.com/val8aUC.png) - -### that's it! :tada: - -## Some functions related to Modal Trigger -`$modalID`: Return the modal's id that triggered the command - -`$modalAnswer`: Return a data user input in submitting the modal - -::: danger -You need to send a modal with `$modal` within 1 second of button/menu/slash execution -::: - -###### Tags: diff --git a/guide/Trigger/poll.md b/guide/Trigger/poll.md deleted file mode 100644 index 11633e59..00000000 --- a/guide/Trigger/poll.md +++ /dev/null @@ -1,18 +0,0 @@ -# Poll Updates Trigger -It trigger when a changes happen to a poll, like when it ends - -## When Poll End -To make a command to trigger when a poll ends. - -### Example -* Make a new command and select trigger type to be "Poll Updates" -![](https://i.imgur.com/NpwFuNZ.png) - -* for trigger, select "When Poll Ends" -![](https://i.imgur.com/ZwUoy2i.png) - -* for code, you can get the poll information with `$poll`, here is an example -![](https://i.imgur.com/gWLjPrS.png) - -### Output -![](https://i.imgur.com/4SbvPJL.png) \ No newline at end of file diff --git a/guide/Trigger/reaction.md b/guide/Trigger/reaction.md deleted file mode 100644 index 373af761..00000000 --- a/guide/Trigger/reaction.md +++ /dev/null @@ -1,66 +0,0 @@ -# User Reaction - -## Introduction -triggers when user react/unreact with certain emoji - -## Trigger When User React With Emoji -### Single Emoji -To set it to trigger when user react with a certain emoji (i.e 👍), set trigger to: add, emoji\ -Example: -![](https://i.imgur.com/PZEM5gu.png) - -### Multiple Emojis -To trigger on multiple emojis, set trigger to: add, Emoji1|Emoji2|Emoji3..\ -For example, to set it to trigger on :+1: and :-1:: -![](https://i.imgur.com/REenf8E.png) - -### Using Custom Emoji -You can use the custom emoji name like `wave` or the id like `123456` - -## Trigger When User Remove Reaction -### Single Emoji -To set it to trigger when user remove his reaction of certain emoji (i.e 👍), set trigger to: remove, emoji\ -![](https://i.imgur.com/KaucN95.png) - -### Multiple Emojis -To trigger on multiple emojis, set trigger to: remove, Emoji1|Emoji2|Emoji3..\ -For example, to set it to trigger on :+1: and :-1:: -![](https://i.imgur.com/dmLSHrT.png) - -## Trigger When User React/Unreact -### Single Emoji -To set it to trigger when user react with certain emoji (i.e 👍), set trigger to: `emoji`\ -Example: -![](https://i.imgur.com/zm0pjt2.png) - -### Multiple Emojis -To trigger on multiple emojis, set trigger to: Emoji1|Emoji2|Emoji3..\ -For example, to set it to trigger on :+1: and :-1:: -![](https://i.imgur.com/jxmlsg6.png) - -## Trigger On React On Specific Message -To make the bot to trigger only when someone react/unreact on specific message, you can set it by adding `=message id` to the trigger\ -example 1 (on react): `add, 👍=123456790` -example 2 (on unreact): `remove, 👍=123456790` - -## Example 1: Reaction Role -Let's design simple reaction role command, we will set it to give user role `Role1` when he reacts with :+1: -### Steps -1. Send your message -![](https://i.imgur.com/CGYgmH6.png) - -2. Copy the message ID (in this example it's 1091151883432890408) -![](https://i.imgur.com/Vh8Gy55.png) - -3. Create reaction command and set trigger:`add, 👍=1091151883432890408` -![](https://i.imgur.com/l35avTX.png) - -4. Set the code to be: `$giveRoles[$authorID;Role1]` -![](https://i.imgur.com/N16xPAa.png) - -5. Test it by reacting with :+1: - -That's it :tada: - -## Example 2: I Agree -![](https://cdn.discordapp.com/attachments/772051120368910371/882201196000084018/first_reaction.gif) diff --git a/guide/Trigger/roleaddremove.md b/guide/Trigger/roleaddremove.md deleted file mode 100644 index e596098c..00000000 --- a/guide/Trigger/roleaddremove.md +++ /dev/null @@ -1,85 +0,0 @@ -# Role Given/Taken - -This trigger runs when someone gets or loses a role. - - -## Role given -Let's make a command, which will log everytime someone receives a Role1 -1. Set the trigger to `add, Role1` - -![](https://i.imgur.com/MevZIW3.png) - -2. Set the code to: -```php -$username received $roleName role -``` -![](https://i.imgur.com/WezSkrK.png) - -3. Set channel used to any channel you want the message to be sent to - -![](https://i.imgur.com/sUgGUAc.png) - -#### Output (When user get Role1): -![](https://i.imgur.com/0PYZ2pA.png) - - -## Role taken -Here's how to detect a specific role being taken from anybody. - -1. Set Trigger Value: `remove, Role1` - -![](https://i.imgur.com/dt0kSdJ.png) - -2. Set code to: `$roleName` Role was removed from $mention - -![](https://i.imgur.com/yqZAk54.png) - -3. Set channel used to any channel you want the message to be sent to - -![](https://i.imgur.com/sUgGUAc.png) - -#### Output (Role1 get removed from user): -![](https://i.imgur.com/UbKVguz.png) - -## Mutliple roles -You can make trigger on multiple roles by using this format: `Role1|Role2|Role3` -Like this example -1. Set Trigger Value: `add, Role1|Role2` - -Which means trigger when user receive role `Role1` or `Role2` - -![](https://i.imgur.com/3X3aFyJ.png) - -2. Set code to: $username received $roleName Role - -![](https://i.imgur.com/WezSkrK.png) - -3. Set channel used to any channel you want the message to be sent to - -![](https://i.imgur.com/sUgGUAc.png) - -#### Output (When user get Role1 or Role2): -![](https://i.imgur.com/UpUZYbA.png) - - -## Summary -As you already know how the role trigger works, here is a summary of this trigger. - -Role trigger will work with no input at all, but you can restrict the command to be executed meet some conditons: -| Syntax | Explanation | -| --- | --- | -|![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512115627925564/image.png) | Command will trigger regardless of what role has been given or taken | -| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512172456542298/image.png) | Detects when someone gets or loses "Member" role | -| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512354392866816/image.png) | Works if any role has been assigned | -| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512392464576602/image.png) | Activates when someone loses any role | -| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512279751036989/image.png) | Triggers when some gets role with 1013004735193808988 ID | -| ![](https://cdn.discordapp.com/attachments/1100128432395927765/1100512476895920288/image.png) | Fires off when someone loses "Admin" role | - -### Role input -To specify a role you can either use an ID or it's name. -But be aware, all role names are case sensitive, so a if a command doesn't trigger, check the capitalization! - -### Multiple roles -You can make your command trigger on any provided roles by putting role names/ids separated by "|". - -For example `Admin|Moderator`, will take effect either on Admin or Moderator role. diff --git a/guide/Trigger/scheduled_event.md b/guide/Trigger/scheduled_event.md deleted file mode 100644 index ef6d0e99..00000000 --- a/guide/Trigger/scheduled_event.md +++ /dev/null @@ -1,50 +0,0 @@ -# Scheduled Event Updates Trigger -It trigger when a changes happen to a scheduled event, like when it starts - -## Trigger Actions -### When Event Created -To make a command to trigger when an event created. - -#### Steps -* Make a new command from dashboard -* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Created" -![](https://i.imgur.com/Jo8zSbo.png) - -#### Output -![](https://i.imgur.com/u6PHB6f.png) - -### When Event Starts -To make a command to trigger when an event starts. - -#### Steps -* Make a new command from dashboard -* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Starts" -![](https://i.imgur.com/5yBYc22.png) - -#### Output -![](https://i.imgur.com/lyQvg2L.png) - -### When Event Ends -To make a command to trigger when an event ends. - -#### Steps -* Make a new command from dashboard -* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Ends" -![](https://i.imgur.com/U2Jc4Pt.png) - -#### Output -![](https://i.imgur.com/vQheImh.png) - -### When Event Cancelled -To make a command to trigger when an event got cancelled. - -#### Steps -* Make a new command from dashboard -* Select Trigger Type to be "Scheduled Event Updates", Action to be "When Event Cancelled" -![](https://i.imgur.com/st8K9tb.png) - -#### Output -![](https://i.imgur.com/u6PHB6f.png) - -## Multiple Actions -You can select multiple actions at once, if you want to trigger when any action got detected. \ No newline at end of file diff --git a/guide/Trigger/serverboost.md b/guide/Trigger/serverboost.md deleted file mode 100644 index d49cba44..00000000 --- a/guide/Trigger/serverboost.md +++ /dev/null @@ -1,13 +0,0 @@ -# On Server Boost - -This trigger will trigger when someone boosts or removes boost from your server. - -![](/images/triggers/boost/0.png) - -## User boost the server - -Triggers when user boosts your server. - -## User unboost the server - -Triggers when user unboosts your server. diff --git a/guide/Trigger/slash.md b/guide/Trigger/slash.md deleted file mode 100644 index f3893666..00000000 --- a/guide/Trigger/slash.md +++ /dev/null @@ -1,110 +0,0 @@ -# Slash Command - -# Introduction -triggers when a user uses a slash command. This needs to be a slash command from the bot. - -## Creating a slash command -In this example we will create an `/avatar` command, that shows the user's avatar -![](https://i.imgur.com/MtHPQWd.png) - -### Steps -1. Go to dashboard, your server page, click on Slash Command Builder -![](https://i.imgur.com/L2dnA5D.png) - -2. Click `Create` -![](https://i.imgur.com/GlwHeER.png) - -3. Fill the slash name and description -![](https://i.imgur.com/LL52VH2.png) - -4. To add user option, to the slash, select from the option menu -![](https://i.imgur.com/q2BEFHo.png) - -5. Select the User option (make sure background is blue) -![](https://i.imgur.com/O2W1v6N.png) - -6. Fill the option name, description, remember this name, we will use it later -![](https://i.imgur.com/XHGMvnM.png) - -7. Click `Deploy Command/Save` -![](https://i.imgur.com/PwJ8kLv.png) - -8. Create a new custom command, select type to be `Slash Command` and select your slash command from the dropdown in `Trigger` -![](https://i.imgur.com/YF6EfSY.png) - -9. Set the code to be executed when the slash command is used - -::: details Code -``` - $let[user_id;$getOption[user]] - $interactionReply[ - {title:Avatar of $usertag[$user_id]} - {image:$userAvatar[$user_id]} - ] -``` -::: - -10. go to your server and use the command as follows: -![](https://i.imgur.com/XZTeNVO.png) - - -## Output -![](https://i.imgur.com/MtHPQWd.png) - - -## Code Explanation -### Retrieving the option from user -When a user uses the command like in Step 10, we can retrieve the option through the `$getOption` function: -```php -$getOption[option name] -``` -In our example `option name` is `user` from step 6\ -then the user id will be stored in a temporary variable named`user_id` using `$let`, this way we can recall it later in the code through `$user_id`: -``` - $let[user_id;$getOption[user]] -``` - -### Sending Message -Next, to send a message with [$interactionReply[message]](../Interaction/interactionReply.md)\ -Here we will send an embed with a title and image using {title} and {image} [Curl Message Format](../CodeReferences/ref.message_curl_format.md): -```php -$interactionReply[ - {title:Embed Title} - {image:Embed Image} -] -``` - -1. In title we want to set it to: Avatar of Mido#1234\ -To get the username `Mido#1234` we will use [$userTag[user id]](../Member/userTag.md), to specifiy the user we will use `$user_id`: -``` -Avatar of $userTag[$user_id] -``` - -2. In Image to retrieve the user avatar, we will use [$userAvatar[user id]](../Member/userAvatar.md): -```php -$userAvatar[$user_id] -``` - -Whole code: -``` - $let[user_id;$getOption[user]] - $interactionReply[ - {title:Avatar of $usertag[$user_id]} - {image:$userAvatar[$user_id]} - ] -``` - - -## Example 2: Sending Private Message -Let's modify the previous code, to make him reply in private to user instead like this: -![](https://i.imgur.com/SsFJHfv.png) - -$interactionReply accept 2 inputs by default: message, ephemeral\ -in the previous example we only used the first message, and 2nd input was by default `no`\ -To send the message in private we have to set the 2nd input `ephemeral` to `yes` -![](https://i.imgur.com/I2ZuKB5.png) - -That's it, Save and test it out - -### Output -![](https://i.imgur.com/SsFJHfv.png) diff --git a/guide/Trigger/time.md b/guide/Trigger/time.md deleted file mode 100644 index d970dc18..00000000 --- a/guide/Trigger/time.md +++ /dev/null @@ -1,43 +0,0 @@ -# Timed or Interval - -## Interval: Basic Information -This trigger type will execute a command once per x time. - -#### Example of an interval trigger: - -![](https://cdn.discordapp.com/attachments/772051120368910371/880525770710220872/first-interval.gif) - -## Timed Event: Syntax -Use this syntax to let the bot know how long it should wait until execution! - -You can specify any time in the following format: - -``` -1s -> execute after 1 second -1m -> execute after 1 minute -1h -> execute after 1 hour -1d -> execute after 1 day -1y -> execute after 1 year -``` - -## Interval: Syntax -Use this syntax to let the bot know how long it should wait until the next command execution! - -You can specify any time in the following format: - -``` -1s -> execute after 1 second -1m -> execute after 1 minute -1h -> execute after 1 hour -1d -> execute after 1 day -1y -> execute after 1 year -``` - -::: danger DO NOT FORGET: - -Set a channel used, otherwise errors will not be sent anywhere! This makes bug fixing really difficult! -::: - -## More Info - -Do you want to know more about the bot's syntax? You can check out [this](../Other/syntax.md) page to learn more! diff --git a/guide/Trigger/timeout.md b/guide/Trigger/timeout.md deleted file mode 100644 index 626375d2..00000000 --- a/guide/Trigger/timeout.md +++ /dev/null @@ -1,11 +0,0 @@ -# On Timeout - -This trigger fires whenever a member's timeout status changes. - -## User Timeout Set - -Activates when a member is placed in a timeout. - -## User Timeout Removed - -Activates when a timeout is removed from a member. diff --git a/guide/Trigger/upvote.md b/guide/Trigger/upvote.md deleted file mode 100644 index df313264..00000000 --- a/guide/Trigger/upvote.md +++ /dev/null @@ -1,38 +0,0 @@ -# On Upvote - -## Basic Information - -This trigger runs when a user votes for the bot using a server referral link - -To trigger this event, the user **must be a member of the server at the time of voting**. - -## Syntax - -This trigger does not use a trigger value. - -## Example - -Create a new custom command and set its **Trigger Type** to **On Upvote**. - -Copy the link displayed to use it in other commands. You can then reward the voter, thank them, or perform any other action. - -For example: - -```php -$giveRoles[$userID;Supporter] -Thanks for supporting the server, <@$userID>! ❤️ -``` - -### That's it! 🎉 - -::: tip Tip -You can test this trigger using the `!!emit upvote` command. -::: - -## Some functions related to On Upvote - -`$userID`: Returns the ID of the user who voted. - -`$upvoteReferralUserID`: Returns the ID of the user whose referral link was used, if any. - -`$upvoteTime`: Returns the Unix timestamp (milliseconds) when the vote was received. diff --git a/guide/Trigger/voicecondecon.md b/guide/Trigger/voicecondecon.md deleted file mode 100644 index 7043e0e9..00000000 --- a/guide/Trigger/voicecondecon.md +++ /dev/null @@ -1,32 +0,0 @@ -# Voice Join/Leave - -## Basic Information -This trigger type will trigger when a user joins or leaves a voice channel. - -#### Example of a voice join trigger: - -![](https://cdn.discordapp.com/attachments/772051120368910371/882213865201475614/first_voice.gif) - - -## Main Syntax -Use this syntax to let the bot trigger when a user joins/leaves a voice channel! - -`join` -> the command will trigger when a voice channel is joined - - -`leave` -> the command will trigger when a member left a voice channel - -`join/leave=voice channel id` -> will only trigger when user joins/leaves this specific voice channel - -::: danger Special event! -Because this is a special event type, you CANNOT use `$channelID` to return the channel that was joined! Use `$voiceChannelID` instead -::: - -::: danger DO NOT FORGET: - -Set a channel used, otherwise errors will not be sent anywhere! This makes bug fixing really difficult! -::: - -## More Info - -Do you want to know more about the bot's syntax? You can check out [this](../Other/syntax.md) page to learn more! diff --git a/guide/Trigger/word.md b/guide/Trigger/word.md deleted file mode 100644 index 4cd530a9..00000000 --- a/guide/Trigger/word.md +++ /dev/null @@ -1,351 +0,0 @@ -# Word Trigger -Word commands, also known as message commands are executed when the bot receives a text message. - -## Basic word command -Let's create a word command with a trigger `!ping`, this means the command will be triggered whenever someone sends a message starting with `!ping`. -In the code part we will type `pong!`, so the bot will respond with it. - -![Word example](https://i.imgur.com/0ndhYaw.png) - - - - !ping - - - pong! - - - -## Using parameters -A crucial feature of the word type are parameters. They are data provided when executing the command. - -Let's say we had a `?hug` command, which users can use to hug other users. -In that case we would want users to select a user by mentioning him. - -#### Usage -The mention will be the `parameter 1`, because users will mention their victim right after the ?hug keyword. - - - ?hug fajfaj - - - -#### Setup -Parameters can be retrieved using the `$message` function, we will use it to get the user mention: - -![?hug code](https://i.imgur.com/zXDpUmI.png) - -#### Result -Here's how the final command should look like: - - - ?hug fajfaj - - - Member hugs fajfaj - - - -## Case insensitivity -Sometimes we don't want to bother users with using correct capitalisation. - -#### How does it work? -Case sensivity can be disabled by adding `|i` after the trigger. In our case `?hello` will be changed to `?hello|i` - -#### Example -Here's how to make a case insensitive `?hello` command, that will respond with a simple `Hello @user` message. - -![?hello command](https://cdn.discordapp.com/attachments/1100128432395927765/1100823468720795678/hello.png) - -Let's test different variations: - - - - ?hello - - - Hello Member! - - - ?HELLO - - - Hello Member! - - - ?HeLLo - - - Hello Member! - - - - -Works perfectly! - -## Multiple words -Sometimes we want the bot to trigger on multiple words, by separating them with `|` - -Let's say we want our [Hug command](#using-parameters) to trigger on: ?hug, ?abrazo, and ?étreinte. - -#### How can we do that? -We can do that with the following trigger: -```bash -?hug|?abrazo|?étreinte -``` - -![](https://cdn.discordapp.com/attachments/1100128432395927765/1100827624978260059/hugcmd.png) - -Let's test it out: - - - - ?hug fajfaj - - - Member hugs fajfaj - - - ?abrazo fajfaj - - - Member hugs fajfaj - - - ?étreinte fajfaj - - - Member hugs fajfaj - - - -Works as expected! - -## Regex match -The word trigger can also contain regex expressions for various dynamic triggers. - -::: tip What's regex? -Don't worry if you don't know what it is. Regex is a pretty advanced topic, and is not necessary in most cases. - -However if you want to learn more about regex, you can learn it from some internet guides [like this one](https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285) and regex playgrounds [like this one](https://regex101.com). -::: - -### Ping detector -Regex has thousands of use cases, but here we will discuss using regex to trigger on a mention anywhere in the message. - -#### User mentions -Bots can only see mentions as a string like: `<@434342521997492224>`, or `<@!434342521997492224>`, so we have to design our expression to catch this form. - -#### Trigger -Here is the expression which we are going to use: -* `?` - the previous character is optional -* `\d` - any number -* `{18,}` - the previous character has to appear 18 or more times - -```regex -/<@!?\d{18,}>/ -``` -You need to add a forward slash before and after your expression, otherwise the bot will only reply when you literally send `<@!?\d{18,}>` in your message - -![Ping detector](https://i.imgur.com/TwgDMNI.png) - -Let's try sending some mentions: - - - - Hey fajfaj! How is it going? - - - You've pinged someone! - - - Mido, have you found your chocolate yet? - - - You've pinged someone! - - - -It detects all of them! - -## Trigger when a message has attachment -This can be done using `%has_attachment%` as trigger, it makes the command execute when a message contains an attachment. - -### Example -![](https://i.imgur.com/41Q7lMg.png) - -### Output -![](https://i.imgur.com/aaP2nVM.png) - -## Trigger when pinned message is sent -This can be done using `%pin%` as trigger, it makes the command execute when discord send a message when a message get pinned. - -### Example -![](https://i.imgur.com/VNhSEQ2.png) - -### Output -![](https://i.imgur.com/YxFWWym.png) - -## Trigger when thread is created -This can be done using `%thread_created%` as trigger, it makes the command execute when discord send a message when a thread get created. - -### Example -![](https://i.imgur.com/VhBExwB.png) - -### Output -![](https://i.imgur.com/WszJWXs.png) - -## Trigger when a poll is sent -This can be done using `%has_poll%` as trigger, it makes the command execute when a user send a poll. - -### Example -![](https://i.imgur.com/2tDlcML.png) - -### Output -![](https://i.imgur.com/BLj6YY3.png) - -## Trigger on Discord AutoMod Action -This can be done using `%automod_action%` as trigger, it makes the command execute when a user triggers a Discord AutoMod rule. The user who is flagged is the command executor. - -### Example -![](https://i.imgur.com/dCld7bp.png) - -### Output -![](https://i.imgur.com/YiF8lMH.png) - - -## Any message -From time to time you may not know what the message content will be, you can make cc trigger to any message sent in a channel. - -### How does it work? -This can be done using `%all%` trigger, it makes the command execute regardless of the content. - -### Message complimenter -Let's make a command which will randomly compliment every sent message to a specific channel. - -To randomize the output, we will use `$randomText` function, and to restrict the channels we will use the `Run only in` dropdown menu: - -![Message complimenter](https://cdn.discordapp.com/attachments/957286111250624552/1100843662801379389/msgcompliment.png) - -Let's see if we get any compliments: - - - - How is it going? - - - Cool message! - - - Does anyone here have a monkey as a pet? - - - Wonderful punctuation! - - - -Amazing, we've just got complimented by the bot automatically. - -### 🎉 Congratulations -If you read all of the information above, you became a real word trigger master! - -## Summary -As we got through all the examples, here's a summary of the word trigger: - -| Name | Syntax | Example | Explanation | -| - | - | - | - | -| Word | `word` | `!ping` | Triggers on a message starting with !ping | -| Multiple words | `word\|word...` | `!ban\|!unfriend\|!gulag` | Fires off on !ban, !unfriend or !gulag | -| Case insensitive | `word\|i` | `apple\|i` | Matches with apple and any case variations like ApPLe | -| Regex | `/RegExp/` | `/<@&\d{18,}>/` | Detects a user mention anywhere in a message | -| Any message* | `%all%` | `%all%` | Triggers on **ANY** message | -| Message Pin | `%pin%` | `%pin%` | Triggers on Discord system pin message | -| Thread Creation | `%thread_created%` | `%thread_created%` | Triggers on Discord system thread creation message | -| Message with Attachment | `%has_attachment%` | `%has_attachment%` | Triggers when user's message has an attachnment | -| Message With Poll | `%has_poll%` | `%has_poll%` | Triggers when a user sends a poll | -| Automod Action | `%automod_action%` | `%automod_action%` | Triggers when a user violates Discord AutoMod rules | - -::: tip One word only! -In word trigger (besides Regex) you are not allowed to put more than one word. All other words are interpreted as parameters, and cannot overlap with the trigger. -::: - -::: danger Any message* -Using `%all%` will result in a slight spam of cooldown messages, and might occasionally override your other commands. - -We strongly advise you to set the `Run only in` dropdown menu to specific channel(s). - -To get rid of the cooldown messages completely, you can either set a channel slowmode, or get yourself a [premium bot](https://ccommandbot.com/perks). - -::: - -### Continue reading -Here are some pages that might come in handy if you still have some doubts about the word trigger: -* [!report](../Tutorials/3.report.md) - word command tutorial -* `$message` - loading parameters -* `$msg` - to load info about the message - - - - - - - - - - - diff --git a/guide/Tutorials/1.ping.md b/guide/Tutorials/1.ping.md deleted file mode 100644 index 763f1c56..00000000 --- a/guide/Tutorials/1.ping.md +++ /dev/null @@ -1,26 +0,0 @@ -# Ping command -Let's make a simple ping command, where you send a command `ping` and the bot replies with `pong` - -# Steps -## #1 Creating Command -Your first step, will be creating a new custom command, check this [page](../Guide/1.create.md#creating-custom-command) - -## #2 Trigger Settings -In the trigger settings -1. Select the Type to be `Word`, you can know more about this trigger [here](../Trigger/word.md) -2. Set the Trigger to be `ping` - -![](https://i.imgur.com/o5UIcB5.png) - - -This means, it will run this command when a user sends `ping` - -## #3 Response -To make the bot reply with `pong` when this command is run, we simply write `pong` in the code section -![](https://i.imgur.com/WtNpGdM.png) - -## Test time -Save the command and go to your server and send `ping` -![](https://i.imgur.com/smxmtfA.png) - -Congratulations :tada: diff --git a/guide/Tutorials/2.staff-app.md b/guide/Tutorials/2.staff-app.md deleted file mode 100644 index de3f55e9..00000000 --- a/guide/Tutorials/2.staff-app.md +++ /dev/null @@ -1,124 +0,0 @@ -# Staff application -In this guide you will learn how to make a form using **discord modals**. - -Here's how it's going to look like: -![Video preview](https://cdn.discordapp.com/attachments/957286111250624552/1100134419131531304/staff-app.gif) - -## 1. Button sending -Let's send a button users will use to open up the form. - -The button will be `blurple`, have a label `Apply` and an id `staff-app`. -```php -!!exec $button[Apply;blurple;staff-app] -``` - -![Button preview](https://cdn.discordapp.com/attachments/957286111250624552/1100143691835916388/image.png) - -## 2. Button handling -Once we have our button ready, let's make a command to handle it. - -#### Trigger -It will have a `button` type, and a trigger `staff-app` *(the ID we set in the previous step)* -![Button trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100140031772995646/image.png) - -#### Code -The button is meant to send a modal upon clicking, so let's use **$modal** to deploy a form with three options: -* Position -* Reason -* Pronouns - -```php -$modal[ - {title=Staff application} - {id=staff-app} - - {input= - {name=Position} - {ph=What position would you like to apply for?} - {id=position} - {type=short} - {min=5} - {max=100} - } - - {input= - {name=Reason} - {ph=Why do you apply?} - {id=reason} - {type=long} - {min=20} - } - - {input= - {name=Pronouns} - {ph=What pronouns do you use?} - {id=pronouns} - {type=short} - {required=no} - } -] -``` - -## 3. Modal handling -As you may have noticed, after clicking the button modal appears, but submitting it doesn't do anything. -We'll now create a command to catch all the submitted forms. - -#### Trigger -In order to detect submitted forms, we need to set the type to `Modal`, and trigger to `staff-app` *(Which is our modal ID)* -![Modal trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100142660448165960/image.png) - -#### Code -Once we catch a submitted form, we need to do a few things: -1. Load user's answers -2. Send a report to a different channel -3. Confirm the submission with an interaction reply - -```php - -// Save answers to different variables -$let[position;$modalAnswer[1]] -$let[reason;$modalAnswer[reason]] -$let[pronouns;$modalAnswer[pronouns]] - -// Send message to #staff-applications -$channelSendMessage[$channelID[staff-applications]; - - {author:$usertag:$authorAvatar} - {title:Staff application} - {description:$mention has submitted the staff application} - {field:Position:$position} - {field:Reason:```$reason```} - - // Attach pronouns section only if provided - $if[$get[pronouns]!=] - {footer:Pronouns\: $pronouns} // : has been escaped using a backslash - $endIf - -] - -// Send an ephemeral interaction reply -$interactionReply[Thank you for your submission;yes] -``` - -::: tip Related pages -Here's a list of functions used and pages mentioned in this tutorial. -We recommend you to continue reading about anything that seems unclear to you: -| Page or function | Description | -|--------- | --------- | -| `$button` | send a button | -| [Button trigger](../Trigger/button.md) | detect button clicks | -| `$modal` | deploy a modal | -| [Modal trigger](../Trigger/modal.md) | catch submitted modals | -| `$let` | define a temporary variable | -| `$get` | retrive a temporary variable | -| `$modalAnswer` | get user's answer | -| `$channelSendMessage` | send a message in a different channel | -| `$channelID` | find a channel by it's name | -| `$if` | conditional statement | -| [Complete embed](../Text/Embed/example.md) | create an embed | -| `$interactionReply` | send interaction reply | -::: - - -### 🎉 Congratulations! -You've made a complete staff application system! diff --git a/guide/Tutorials/3.report.md b/guide/Tutorials/3.report.md deleted file mode 100644 index 3af5f98b..00000000 --- a/guide/Tutorials/3.report.md +++ /dev/null @@ -1,64 +0,0 @@ -# Report command -Here's a step-by-step instruction on how to create a simple report command. - -## 1. Setting trigger -Users are meant to report using a word command `!report`, so let's set a corresponding trigger - -![!report trigger](https://cdn.discordapp.com/attachments/957286111250624552/1100494691721560116/image.png) - -## 2. Getting user ID -Let's begin by loading the ID of provided user. For that we will use a combination of two functions: - -* `$message` - to load user input -* `$findMember` - to get the id regardless of input format - -and save them in a `$let` variable. -```php -// $message[1] returns the first parameter -// $findMember[...;no] returns user id or undefined -$let[reportedUser;$findMember[$message[1];no]] -``` - -## 3. Loading reason -Users should be able to describe what behavior they want to report, let's save the rest of parameters to a new variable. -```php -$let[reason;$message[2+]] -``` - -## 4. Send report -As we have all data stored and ready, we will procceed to send the report. For that we will use: - -* `$channelID` - to change channel name to ID -* `$channelSendMessage` - to send a message to a different channel - -```php -$let[reportsChannel;$channelID[reports]] -$channelSendMessage[$reportsChannel;$mention has reported <@!$reportedUser>, for: $reason. -] -``` - -## 5. Confirmation message -So far, the command is sending a correct message to a different channel. Let's also send a message to the reporting user. -```php -$mention you report has been submitted, thank you for keeping our community safe. -``` - -### Result - - - !report fajfaj breaking server rule #5 - - - Member your report has been submitted, thank you for keeping our community safe. - - - -Meanwhile in #reports - - - Member has reported fajfaj, for breaking server rule #5 - - - -### 🎉 Congrats! -You've passed the course with grade A! diff --git a/guide/Tutorials/4.collect.md b/guide/Tutorials/4.collect.md deleted file mode 100644 index ecbaf5f1..00000000 --- a/guide/Tutorials/4.collect.md +++ /dev/null @@ -1,97 +0,0 @@ -# Collect reward - -In this guide, you will learn how to create a one-time use command that allows users to collect a money reward. - -## 1. Create a command - -The first step is to create a new command, which you can learn to do in [this guide](../Guide/1.create.md). - -## 2. Set a trigger - -Users will collect their reward by using the `!collect` command, so let's set that up as the trigger: - -![Trigger](https://cdn.discordapp.com/attachments/957286111250624552/1102554279417495583/image.png) - -## 3. Craft the code - -Now that we have the initial setup done, it's time to make the command actually work. - -::: tip We will use: -* `$getUserVar` - to load the user's balance -* `$let` - to temporarily store the balance -* `$math` - to calculate new balance -* `$setUserVar` - to set the new balance -::: - -### Prize - -The reward that users will receive is 100$ with the [template economy](../Guide/4.template.md). Since the template economy uses the `money` user var to store a user's balance, we will contribute to that var. - -### Getting user var - -Let's get a user's balance and store it in a temporary variable called `bal`: - -```php -$let[bal;$getUserVar[money]] -``` - -### Calculating new balance - -Next, we'll add 100$ to the balance: - -```php -$let[bal;$math[$bal+100]] -``` - -### Saving the new balance - -Now that we have the new balance, let's overwrite the current balance with the new one: - -```php -$setUserVar[money;$bal] -``` - -At this point, the command will successfully increase the balance, but we want to ensure that users can only collect the reward once. - -### Setting a variable - -In order to prevent users from collecting multiple rewards, we need to save information about whether each user has already used the command. - -```php -$setUserVar[hasCollected;true] -``` - -### Adding a condition - -Now that we have a variable called `hasCollected` that returns whether the user has already collected the reward, let's use it to prevent users from collecting the same reward multiple times by putting this code at the beginning of the command: - -```php -$onlyIf[$getUserVar[hasCollected]!=true;You cannot collect the same reward more than once!] -``` - -### Final result -![Setup preview](https://cdn.discordapp.com/attachments/957286111250624552/1102577377688698920/collect.png) - -Let's see if it works correctly - - - - !collect - - - Enjoy your 100$ reward! - - - !collect - - - You cannot collect the same reward more than once! - - - -::: tip Note -You may not always limit executions to one per user, you can use other vars like `server vars` to restrict the command to one execution per server. -::: - -### 🎉 Congrats! -You've learned how to make a command that can be used only one time! diff --git a/guide/Tutorials/5.confession.md b/guide/Tutorials/5.confession.md deleted file mode 100644 index e74d2bec..00000000 --- a/guide/Tutorials/5.confession.md +++ /dev/null @@ -1,66 +0,0 @@ -# Simple Slash Command: Confession -In this guide, you will learn how to make a simple slash command called `/confess`, where user can use to send a confession in a beautiful embed like this: -![](https://i.imgur.com/kJwJ9Fi.png) - -## 1. Create a command -The first step is to create a new slash command: -* Head to your server in [dashboard](https://ccommandbot.com/dashboard) -* Click `Slash Command Builder` -* Construct the confess command (follow the next GIF) -![](https://i.imgur.com/1IUUCn9.gif) - -## 2. Responding To Code -Next, Let's write the code that will respond when user runs the slash command: -* Head to your server in [dashboard](https://ccommandbot.com/dashboard) -* Click `Manage Your Commands` -* Click `Create` -* In Command Settings, select the Trigger Type to be "Slash Command", then select `/confess` -* For Code: - * To respond to the user, you can do so with `$interactionReply[message]` where message is the text you would like to display: - > For example: $interactionReply[Hello World] - * To receive user input of confession, we can use $getOption[option name], where `option name` is same option name we used while building the slash command which is `message` - > For example: $getOption[message] - * So we would combine both and code would look like: -```php -$interactionReply[Your confession is - -$getOption[message] -] -``` -![](https://i.imgur.com/Xayi6uY.gif) - -## 3. Output (Normal Message) -That is all, let's test it out :star_struck: -![](https://i.imgur.com/94mlDMR.gif) - -It works :happy:! but... what about making the respond into a beautiful embed? - -## 4. Modify Code To Respond With Embed -To build an embed, we need to use [curl message format](../CodeReferences/ref.message_curl_format.md). -Curl is a way for you to build an embed in the place of the `message` input, for example to set up an embed with description and title we will use: -```js -{desc:My embed description} -{title:My embed title} -``` -> You can see the full list [here](../CodeReferences/ref.message_curl_format.md) - -So, We will modify the message content of `$interactionReply` and use the curl message format, code would look like: -```php -$interactionReply[ - -{title:$username's confession} -{desc: -$getOption[message] -} -{color:GREEN} -] -``` -![](https://i.imgur.com/aYUTPta.png) - -## 5. Output (Message With Embed) -Let's test again! -![](https://i.imgur.com/d4sbm0f.gif) - - -Congratulations, You made a functional slash command :tada:! -> Of course this might be simple, but it's good start! diff --git a/guide/Tutorials/5.poll.md b/guide/Tutorials/5.poll.md deleted file mode 100644 index 89efd28d..00000000 --- a/guide/Tutorials/5.poll.md +++ /dev/null @@ -1,70 +0,0 @@ -# Sending a poll -In this guide, you will learn how to send a poll. - -## 1. Create a command -The first step is to create a new command, which you can learn to do in [this guide](../Guide/1.create.md). - -## 2. Set a trigger -Let assume user need to say `!poll` to send the poll -![Trigger](https://i.imgur.com/0YTbKP6.png) - -## 3. Craft the code - -Now that we have the initial setup done, it's time to make the command actually work. - -::: tip We will use: -* `$sendMessage` - to send a message -* [poll curl data](../CodeReferences/ref.poll_data.md) -::: - -### Sending a message -To send a message, we will use `$sendMessage[content]` where content is the message content, in our case we will fill it with our poll data - -### Constructing the poll -we will use [poll curl data](../CodeReferences/ref.poll_data.md) like: -``` -{poll: - {question=poll question} - {duration=poll duration in hours like 24h} - {multiple=can user select multiple answers? (yes/no)} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - - {answer=Add an anwer} - {emoji=Add an emoji to the previous answer} - ... -} -``` - -In our case, we will send a poll about countries code: -```php -$sendMessage[ -{poll: -{question=What is the biggest country in the world?} -{answer=China} -{emoji=🇨🇳} -{answer=Russia} -{emoji=🇷🇺} - -{duration=1h} -{multiple=no} -} -] -``` - -### Final result -Setup: -![Setup preview](https://i.imgur.com/9Rc5aNC.png) - -Output: -![](https://i.imgur.com/4BRQVag.png) - - - -::: tip Note -You may not always limit executions to one per user, you can use other vars like `server vars` to restrict the command to one execution per server. -::: - -### 🎉 Congrats! -You've learned how to make a command that can be used only one time! \ No newline at end of file diff --git a/guide/Useful/callFunction.md b/guide/Useful/callFunction.md deleted file mode 100644 index 98008eca..00000000 --- a/guide/Useful/callFunction.md +++ /dev/null @@ -1,54 +0,0 @@ -# $callFunction -To call a user-defined function created with `$function` - - -#### Usage: -`$callFunction[Function Name;Argument 1 (optional);Argument 2....(optional)]` - -#### Example: -```bash -$callFunction[printHello;Mika] -``` - -Call the function, using `$callFunction` -
- - - - !!exec $function[printHello;name] - {{ '\n' }} - Hello $name 👋 - {{ '\n' }} - $endFunction - $callFunction[printhello;Mika] - - - - Hello Mika 👋 - - - -Call the function, using `$printHello` -
- - - - !!exec $function[printHello;name] - {{ '\n' }} - Hello $name 👋 - {{ '\n' }} - $endFunction - $printhello[Mika] - - - - Hello Mika 👋 - - - -::: danger -A function name can't start with number, and must be within [A-Z or a-z or _ or 0-9] -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Useful/commandCode.md b/guide/Useful/commandCode.md deleted file mode 100644 index e53f388d..00000000 --- a/guide/Useful/commandCode.md +++ /dev/null @@ -1,22 +0,0 @@ -# $commandCode - -Returns the code of the current command. - -## Usage - -```bash -$commandCode -``` - -## Example -```php -Emergency alert has been triggered! -Please note that each use of this command is logged, and each unjustified use of this command will result in punishment. -$channelSendMessage[$channelID[logs]; -{author:$userTag[$authorID]:$authorAvatar} -{description:The following code has been triggered by $username[$authorID] -```$commandCode```}] -``` - -![Same channel](https://cdn.discordapp.com/attachments/957286111250624552/1079823180207755425/IMG_20230227_195122.jpg) -![Logs channel](https://cdn.discordapp.com/attachments/957286111250624552/1079823180593627146/IMG_20230227_195139.jpg) diff --git a/guide/Useful/deleteTrigger.md b/guide/Useful/deleteTrigger.md deleted file mode 100644 index 51ffc748..00000000 --- a/guide/Useful/deleteTrigger.md +++ /dev/null @@ -1,10 +0,0 @@ -# $deleteTrigger - -Delete a command using its token, **empty token = delete current command** - -## Usage - -```bash -$deleteTrigger[Token;Delete Current Trigger If Empty (yes/no, default yes)] -``` - diff --git a/guide/Useful/editTrigger.md b/guide/Useful/editTrigger.md deleted file mode 100644 index bbc272a8..00000000 --- a/guide/Useful/editTrigger.md +++ /dev/null @@ -1,24 +0,0 @@ -# $editTrigger - -Edit a command information like `name` or `type`\ -\ -Editable types: name, runonlyin, ignorerole, type, trigger, channelused, minperms, time - -## Usage - -```bash -$editTrigger[InfoType;New value;Token (optional)] -``` - -### Example: -```bash -$editTrigger[name;Edited Name] -``` - -### Change Timed Trigger Time -you change the trigger time, with `time` as type, and value to be the timestamp (in ms) of the next trigger time, make sure it's a time in future - -Example (Set the time to trigger after 10s) -```bash -$editTrigger[time;$math[$timestamp+10000];$token] -``` \ No newline at end of file diff --git a/guide/Useful/endForEach.md b/guide/Useful/endForEach.md deleted file mode 100644 index 365016ec..00000000 --- a/guide/Useful/endForEach.md +++ /dev/null @@ -1,13 +0,0 @@ -# $endForEach - -To close $foreach - -## Usage - -```bash -Example: -$forEach[...] -CODE -$endForEach -``` - diff --git a/guide/Useful/endFunction.md b/guide/Useful/endFunction.md deleted file mode 100644 index e8c645ee..00000000 --- a/guide/Useful/endFunction.md +++ /dev/null @@ -1,16 +0,0 @@ -# $endFunction - -To close $function - -## Usage - -```bash -$endFunction -``` - -### Example: -```bash -$function[Function Name;Paramaters..] -CODE -$endFunction -``` \ No newline at end of file diff --git a/guide/Useful/endTimeout.md b/guide/Useful/endTimeout.md deleted file mode 100644 index 6b4d85bb..00000000 --- a/guide/Useful/endTimeout.md +++ /dev/null @@ -1,10 +0,0 @@ -# $endTimeout - -To close $setTimeout - -## Usage - -```bash -$endTimeout -``` - diff --git a/guide/Useful/error.md b/guide/Useful/error.md deleted file mode 100644 index e5d48e7e..00000000 --- a/guide/Useful/error.md +++ /dev/null @@ -1,29 +0,0 @@ -# $error -Returns the error the interpreter threw - -#### Usage: -`$error` - -#### Example: -
- - - - !!exec $modifyChannelPerms[$authorID;-sendmessages;$channelID] - $error - - - - ❌ Invalid channel ID in $modifyChannelPerms[787695068306866198;-sendmessages;879380104768278608] - - - - -::: danger -The way `$modifyChannelPerms` shown here is **NOT** correct! - -Check the `$modifyChannelPerms` for the correct usage -::: - -##### Function Difficulty: -###### Tags: diff --git a/guide/Useful/forEach.md b/guide/Useful/forEach.md deleted file mode 100644 index 074801b8..00000000 --- a/guide/Useful/forEach.md +++ /dev/null @@ -1,62 +0,0 @@ -# $forEach -Will loop over a list and every loop it will take an item and assign it inside varname accessible by $get[varname] or $varname - -## Usage: -```bash -$forEach[varname;LIST (ex: mido rake azz);Separator (Optional, default is space)] -``` -## Loop Limits -Loops in this function are limited to a certain number of cycles. These limits vary between different tiers of premium. -| Tier | Limit | -| :------- | :--- | -| 0 (Free) | 10 | -| 3 (Freemium) | 15 | -| 4 (Pro) | 30 | -| 5 (Ultra) | 60 | - -## Example: -```bash -$forEach[member;Rake, Mido, Mika, Azz, Felix, Flinkz, Wiki, Ddk;, ] -$get[member], is one of our Staff Members! -$endForEach -``` - -
- - - - !!exec $forEach[member;Rake, Mido, Azz, Mika, Felix, Flinkz, Wiki, Ddk;, ] - {{ '\n' }} - $get[member], is one of our Staff Members! - {{ '\n' }} - $endForEach - - - - - Rake, is one of our Staff Members! - {{ '\n' }} - Mido, is one of our Staff Members! - {{ '\n' }} - Azz, is one of our Staff Members! - {{ '\n' }} - Mika, is one of our Staff Members! - {{ '\n' }} - Felix, is one of our Staff Members! - {{ '\n' }} - Flinkz, is one of our Staff Members! - {{ '\n' }} - Wiki, is one of our Staff Members! - {{ '\n' }} - Ddk, is one of our Staff Members! - {{ '\n' }} - - - - -::: tip -This can be used with `$seq`! -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/function.md b/guide/Useful/function.md deleted file mode 100644 index 6ee8e2ed..00000000 --- a/guide/Useful/function.md +++ /dev/null @@ -1,62 +0,0 @@ -# $function -Create a user-defined function that can be called by $callFunction or $functionName - - -#### Usage: -`$function[Function name;Param 1 (optional);Param 2...(optional)]` - -#### Example: -```bash -$function[printHello;name] - Hello $name -$endFunction -``` - -Call the function, using `$callFunction` -
- - - - !!exec $function[printHello;name] - {{ '\n' }} - Hello $name 👋 - {{ '\n' }} - $endFunction - $callFunction[printhello;Mika] - - - - Hello Mika 👋 - - - -Call the function, using `$printHello` -
- - - - !!exec $function[printHello;name] - {{ '\n' }} - Hello $name 👋 - {{ '\n' }} - $endFunction - $printhello[Mika] - - - - Hello Mika 👋 - - - -::: tip -Code inside the function is isolated from outside, which means changing of variables, arrays, random,...won't effect the outside.\ -you can access outside temporary variables (assigned by `$let`) but you can't change them. -::: - -::: danger -A function name can't start with number, and must be within [A-Z or a-z or _ or 0-9] for short format ($functionName) -but if you are using $callFunction to call the function, any name is valid -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/getToken.md b/guide/Useful/getToken.md deleted file mode 100644 index ec926453..00000000 --- a/guide/Useful/getToken.md +++ /dev/null @@ -1,16 +0,0 @@ -# $getToken - -search for command name, and return the first matching command token.\ - if no command found with that name `undefined` will be returned - -## Usage - -```bash -$getToken[Name] -``` - -### Example: -```bash -$getToken[Welcomer] -Output:dZK1x -``` \ No newline at end of file diff --git a/guide/Useful/getTrigger.md b/guide/Useful/getTrigger.md deleted file mode 100644 index a51b9cde..00000000 --- a/guide/Useful/getTrigger.md +++ /dev/null @@ -1,16 +0,0 @@ -# $getTrigger - -Return the command trigger information like `name` or `type`\ -\ -Valid InfoType: name, token, guild, code, runonlyin, ignorerole, type, typename, trigger, createdby, minperms, channelused - -## Usage - -```bash -$getTrigger[InfoType;Token (optional)] -``` - -### Example: -```bash -$getTrigger[name] -``` \ No newline at end of file diff --git a/guide/Useful/ignoreErrors.md b/guide/Useful/ignoreErrors.md deleted file mode 100644 index 64f95e73..00000000 --- a/guide/Useful/ignoreErrors.md +++ /dev/null @@ -1,15 +0,0 @@ -# $ignoreErrors - -It will tell the interpreter to ignore the errors and in case of error, the function will return the placeholder you specified - -## Usage - -```bash -$ignoreErrors[yes/no;placeholder (default: error)] -``` - -### Example (With ignore errors): -![](https://i.imgur.com/Y0Wwmcg.png) - -### Example (Without ignore errors): -![](https://i.imgur.com/CMKgTtR.png) \ No newline at end of file diff --git a/guide/Useful/includeLibrary.md b/guide/Useful/includeLibrary.md deleted file mode 100644 index 437589d7..00000000 --- a/guide/Useful/includeLibrary.md +++ /dev/null @@ -1,10 +0,0 @@ -# $includeLibrary - -To include code created in Library trigger - -## Usage - -```bash -$includeLibrary[Library name] -``` - diff --git a/guide/Useful/jsonRequest.md b/guide/Useful/jsonRequest.md deleted file mode 100644 index d47d9fea..00000000 --- a/guide/Useful/jsonRequest.md +++ /dev/null @@ -1,29 +0,0 @@ -# $jsonRequest - -Makes an API request (`GET`) and returns its response. -::: tip Note -The URL must be whitelisted, you can check in our support server. -::: - -## Usage - -```bash -$jsonRequest[url;property;error message;headerName:headerValue;headerName:headerValue;...] -``` - -### Timeout -request will timeout after 1 minute, for tier 4+ it will timeout after 30 minutes. - -## Example -Assume `my api url` return json reply like: -```json -{ - "user":"Mido", - "money":5332 -} -``` - -Code: -```bash -Your money is $jsonRequest[my api;money;failed to get the money] -``` diff --git a/guide/Useful/redirectErrors.md b/guide/Useful/redirectErrors.md deleted file mode 100644 index 1d4ba3ef..00000000 --- a/guide/Useful/redirectErrors.md +++ /dev/null @@ -1,33 +0,0 @@ -# $redirectErrors -To redirect any kind of errors to a specific channel, by default errors will appear in the execution channel - -#### Usage: -`$redirectErrors[Channel ID]` - -#### Example: -
- - - - !!exec $modifyChannelPerms[$authorID;-sendmessages;$channelID] - $redirectErrors[Channel ID] - - - - -
- - - ❌ Invalid channel ID in $modifyChannelPerms[787695068306866198;-sendmessages;879380104768278608] - - - - -::: danger -The way `$modifyChannelPerms` shown here is **NOT** correct! - -Check the `$modifyChannelPerms` for the correct usage -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/return.md b/guide/Useful/return.md deleted file mode 100644 index 271fbbc6..00000000 --- a/guide/Useful/return.md +++ /dev/null @@ -1,19 +0,0 @@ -# $return - -Stops a user defined function execution and returns the Return Value - -Can only be used inside user-defined functions created with `$function`\ -It has no effect outside the user-defined function - -## Usage - -```bash -$return[Return Value(optional)] -``` - -### Example: -```bash -$function[add;num1;num2] - $return[$math[$num1+$num2]] -$endFunction -``` diff --git a/guide/Useful/seq.md b/guide/Useful/seq.md deleted file mode 100644 index 86bc135e..00000000 --- a/guide/Useful/seq.md +++ /dev/null @@ -1,23 +0,0 @@ -# $seq -Returns a sequence of numbers, decided by a starting (inclusive) number and stop at ending (inclusive) number with step. - -#### Usage: -`$seq[Start;End;Step (optional, default=1);Separator (default ' ')]` - -#### Example: -
- - - !!exec $seq[1;10] - - - 1 2 3 4 5 6 7 8 9 10 - - - -::: tip -This can be used with `$forEach` quite easily -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Useful/setTimeout.md b/guide/Useful/setTimeout.md deleted file mode 100644 index e43dd1d6..00000000 --- a/guide/Useful/setTimeout.md +++ /dev/null @@ -1,36 +0,0 @@ -# $setTimeout -Will execute the code inside it after certain time - -#### Usage: -`$setTimeout[time;file name (optional, default=$undefined));author (optional, default=$authorID)]` - -#### Example: -
- - - - !!exec This part gets executed before the 2d timeout - {{ '\n' }} - $setTimeout[2d;Testing;$authorID] - {{ '\n' }} - This part after the 2d - {{ '\n' }} - $endTimeout - - - - This part gets executed before the 2d timeout - - - This part after the 2d - - - -:::tip -If you only want to wait less then 1m, you can use `$wait` -::: - - - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/spread.md b/guide/Useful/spread.md deleted file mode 100644 index 87d9cbe1..00000000 --- a/guide/Useful/spread.md +++ /dev/null @@ -1,18 +0,0 @@ -# $spread -spreads text as arguments inside functions - -#### Usage: `$spread[separator (optional, default: ,);data to spread]` - -#### Example: -
- - - !!exec Your color is $randomtext[$spread[,;Blue,Yellow,Green]] - - - Your color is Yellow - - - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/stop.md b/guide/Useful/stop.md deleted file mode 100644 index 5693f55a..00000000 --- a/guide/Useful/stop.md +++ /dev/null @@ -1,44 +0,0 @@ -# $stop -This function will cause the interpetender to stop the command execution & return a message if wanted. - -#### Usage: -`$stop[Message (optional)]` - -#### Example: -
- - - - !!exec $sendMessage[This message will be send;no] - {{ '\n' }} - $stop[This funtion will cause the interpetender to stop the code] - {{ '\n' }} - $sendMesssage[This message won't be send;no] - - - - This message will be send - - - This funtion will cause the interpetender to stop the code - - - -::: tip Note -You can send embed using [Message Curl Format](../CodeReferences/ref.message_curl_format.md) -::: - -::: danger Watch Out!! -Using plain text in your code, like below will **NOT** work!! - -This code doesn't work: -```bash -This is plain text before the stop function -$stop -This is plain text after the stop function -``` -^^ - This will not send anything! -::: - -##### Function difficulty -###### Tags: \ No newline at end of file diff --git a/guide/Useful/suppressErrors.md b/guide/Useful/suppressErrors.md deleted file mode 100644 index 28480094..00000000 --- a/guide/Useful/suppressErrors.md +++ /dev/null @@ -1,32 +0,0 @@ -# $suppressErrors -Suppress all the errors and sends a custom one. {error} will contain the error that was thrown. - -#### Usage: -`$suppressErrors[message]` - -#### Example: -
- - - - !!exec $suppressErrors[Wrong usage of $modifyChannelPerms] - $modifyChannelPerms[$authorID;-sendmessages;$channelID] - - - - Wrong usage of $modifyChannelPerms - - - -::: tip Note -You can send embed using [Message Curl Format](../CodeReferences/ref.message_curl_format.md) -::: - -::: danger -The way `$modifyChannelPerms` shown here is **NOT** correct! - -Check the `$modifyChannelPerms` for the correct usage -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Useful/triggerExists.md b/guide/Useful/triggerExists.md deleted file mode 100644 index 98b5171b..00000000 --- a/guide/Useful/triggerExists.md +++ /dev/null @@ -1,29 +0,0 @@ -# $triggerExists - -Check if a trigger with the specified token exists - -## Usage - -```bash -$triggerExists[Token] -``` - -### Example (An existing trigger): - - - !!exec $triggerExists[fx1d53]

-
- - true

-
-
- -### Example (not available trigger): - - - !!exec $triggerExists[abcdef]

-
- - false - -
diff --git a/guide/Useful/wait.md b/guide/Useful/wait.md deleted file mode 100644 index de9e2711..00000000 --- a/guide/Useful/wait.md +++ /dev/null @@ -1,32 +0,0 @@ -# $wait -Will wait an X time, before executing the code below it. - -#### Usage: -`$wait[time]` - -#### Example: -
- - - - !!exec $sendMessage[This part gets executed before the 10s] - {{ '\n' }} - $wait[10s] - {{ '\n' }} - $sendMessage[This part after the 10s] - - - - This part gets executed before the 10s - - - This part after the 10s - - - -:::tip -If you want to wait more then 1m, we suggest you use `$setTimeout` -::: - -##### Function difficulty -###### Tags: diff --git a/guide/Variables/deleteChannelVar.md b/guide/Variables/deleteChannelVar.md deleted file mode 100644 index 0eb0fcfd..00000000 --- a/guide/Variables/deleteChannelVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $deleteChannelVar -Deletes a channel variable, from the command trigger channel or from the ID specified. - -#### Usage: `$deleteChannelVar[variable;channelID(optional)]` -
- - - !!exec $deleteChannelVar[Creator] - - - -::: tip Related Functions -Check out: `$setChannelVar` - -Check out: `$getChannelVar` -::: diff --git a/guide/Variables/deleteMessageVar.md b/guide/Variables/deleteMessageVar.md deleted file mode 100644 index ed673c55..00000000 --- a/guide/Variables/deleteMessageVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $deleteMessageVar -Deletes a message variable, from the command trigger or from the ID specified. - -#### Usage: `$deleteMessageVar[variable;MessageID(optional)]` -
- - - !!exec $deleteMessageVar[Author] - - - -::: tip Related Functions -Check out: `$setMessageVar` - -Check out: `$getMessageVar` -::: diff --git a/guide/Variables/deleteServerVar.md b/guide/Variables/deleteServerVar.md deleted file mode 100644 index 0bdd2d78..00000000 --- a/guide/Variables/deleteServerVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $deleteServerVar -Deletes a server variable. - -#### Usage: `$deleteServerVar[variable]` -
- - - !!exec $deleteServerVar[TopMember] - - - -::: tip Related Functions -Check out: `$setServerVar` - -Check out: `$getServerVar` -::: diff --git a/guide/Variables/deleteUserVar.md b/guide/Variables/deleteUserVar.md deleted file mode 100644 index 1d47c4aa..00000000 --- a/guide/Variables/deleteUserVar.md +++ /dev/null @@ -1,18 +0,0 @@ -# $deleteUserVar -Deletes a user variable, from the author of the command or from the ID specified. - -#### Usage: `$deleteUserVar[variable;userID]` -
- - - !!exec $deleteUserVar[Creator;$authorID] - - - -::: tip Related Functions -Check out: `$setUserVar` - -Check out: `$getUserVar` - -Check out: `$resetUserVar` -::: diff --git a/guide/Variables/get.md b/guide/Variables/get.md deleted file mode 100644 index 797db60d..00000000 --- a/guide/Variables/get.md +++ /dev/null @@ -1,28 +0,0 @@ -# $get -retrieve variable defined by `$let` - -## Usage: `$get[varname;value if not exists] or $varname` - -### Example 1: - - - !!exec $let[orange;10]
$get[orange] or $orange -
- - 10 or 10 - -
- -### Example 2 (Use default value if not exists): - - - !!exec Your name is $get[name;Mido] - - - Your name is Mido - - - -::: tip Related Functions -Check out: `$let` -::: diff --git a/guide/Variables/getChannelVar.md b/guide/Variables/getChannelVar.md deleted file mode 100644 index 88793ab4..00000000 --- a/guide/Variables/getChannelVar.md +++ /dev/null @@ -1,19 +0,0 @@ -# $getChannelVar -Gets a channel variable value - -#### Usage: `$getChannelVar[variable;channelID(optional)]` -
- - - !!exec $getChannelVar[Creator] - - - Mido - - - -::: tip Related Functions -Check out: `$setChannelVar` - -Check out: `$deleteChannelVar` -::: diff --git a/guide/Variables/getMessageVar.md b/guide/Variables/getMessageVar.md deleted file mode 100644 index 72f4e254..00000000 --- a/guide/Variables/getMessageVar.md +++ /dev/null @@ -1,19 +0,0 @@ -# $getMessageVar -Gets a message variable value - -#### Usage: `$getMessageVar[variable;messageID(optional)]` -
- - - !!exec $getMessageVar[data] - - - Mido - - - -::: tip Related Functions -Check out: `$setMessageVar` - -Check out: `$deleteMessageVar` -::: diff --git a/guide/Variables/getServerVar.md b/guide/Variables/getServerVar.md deleted file mode 100644 index 007b243a..00000000 --- a/guide/Variables/getServerVar.md +++ /dev/null @@ -1,19 +0,0 @@ -# $getServerVar -Gets a server variable value - -#### Usage: `$getServerVar[variable]` -
- - - !!exec $getServerVar[holder] - - - Mika - - - -::: tip Related Functions -Check out: `$setServerVar` - -Check out: `$deleteServerVar` -::: diff --git a/guide/Variables/getUserVar.md b/guide/Variables/getUserVar.md deleted file mode 100644 index b5b64ac9..00000000 --- a/guide/Variables/getUserVar.md +++ /dev/null @@ -1,32 +0,0 @@ -# $getUserVar -Gets a user variable value - -#### Usage: `$getUserVar[variable;userid(optional)]` -
- - - !!exec $getUserVar[warnings;683630053686378498] - - - 4 - - - -or executors(author/you) warning count: - - - - !!exec $getUserVar[warnings] - - - 1 - - - -::: tip Related Functions -Check out: `$setUserVar` - -Check out: `$deleteUserVar` - -Check out: `$resetUserVar` -::: diff --git a/guide/Variables/increaseChannelVar.md b/guide/Variables/increaseChannelVar.md deleted file mode 100644 index 746e79c3..00000000 --- a/guide/Variables/increaseChannelVar.md +++ /dev/null @@ -1,27 +0,0 @@ -# $increaseChannelVar - -To increase channel variable with a certain amount.\ -If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. - -## Usage - -```bash -$increaseChannelVar[variable name;amount/expression;channel id;default amount (default is 0)] -``` - -### Example (increase channel messages by 1): -```bash -$increaseChannelVar[messages;1] - - -``` - -### Example (double the messages): - - - !!exec Before: $getChannelVar[messages]
$increaseChannelVar[messages;x*2]
After: $getChannelVar[messages]

-
- - Before: 5
After: 10 -
-
diff --git a/guide/Variables/increaseServerVar.md b/guide/Variables/increaseServerVar.md deleted file mode 100644 index 8b369c94..00000000 --- a/guide/Variables/increaseServerVar.md +++ /dev/null @@ -1,27 +0,0 @@ -# $increaseServerVar - -To increase server variable with a certain amount.\ -If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. - -## Usage - -```bash -$increaseServerVar[variable name;amount/expression;default amount (default is 0)] -``` - -### Example (increase ticket numbers by 1): -```bash -$increaseServerVar[ticket numbers;1] - - -``` - -### Example (double the messages): - - - !!exec Before: $getServerVar[ticket numbers]
$increaseServerVar[ticket numbers;x*2]
After: $getServerVar[ticket numbers]

-
- - Before: 5
After: 10 -
-
diff --git a/guide/Variables/increaseUserVar.md b/guide/Variables/increaseUserVar.md deleted file mode 100644 index e254475f..00000000 --- a/guide/Variables/increaseUserVar.md +++ /dev/null @@ -1,27 +0,0 @@ -# $increaseUserVar - -To increase user variable with a certain amount.\ -If the variable doesn't exist it will be created and its value set to the answer of the value as if the original value of the var is 0. - -## Usage - -```bash -$increaseUserVar[variable name;amount/expression;user id;default amount (default is 0)] -``` - -### Example (increase user money by 1000): -```bash -$increaseUserVar[money;1000] - - -``` - -### Example (double the money): - - - !!exec Before: $getUserVar[money]
$increaseUserVar[money;x*2]
After: $getUserVar[money]

-
- - Before: 1000
After: 2000 -
-
diff --git a/guide/Variables/initVar.md b/guide/Variables/initVar.md deleted file mode 100644 index eae822d3..00000000 --- a/guide/Variables/initVar.md +++ /dev/null @@ -1,37 +0,0 @@ -# $initVar - -Initializes a variable with a default value if the var is undefined or does not exist - -## Usage - -```bash -$initVar[type;varname;Default Value;Custom ID (optional)] -``` - -### Allowed Types -server, message, channel, user - -### Custom ID -* For type 'message', it will be the message id. -* For type 'channel', it will be the channel id. -* For type 'user', it will be the user id. - -### Example (Server Var): -```bash -$initVar[server;totalPolls;0] -``` - -### Example (Channel Var): -```bash -$initVar[channel;ticket-owner;$authorID;$channelID] -``` - -### Example (User Var): -```bash -$initVar[user;money;0;$userID] -``` - -### Example (Message Var): -```bash -$initVar[message;reactions;0;$messageID] -``` \ No newline at end of file diff --git a/guide/Variables/let.md b/guide/Variables/let.md deleted file mode 100644 index 2b2e6f51..00000000 --- a/guide/Variables/let.md +++ /dev/null @@ -1,18 +0,0 @@ -# $let -Define a variable, that you can access later through `$get`. -This function is useful to temporarily store variables, like to save the result of a calculation - -#### Usage: `$let[variable name;variable value;remain after execution (yes/no , default no) (optional)]` -The first value will only exist until cc ends its execution,the second will still be accessable until next bot restart (every 5d) -You can use $get[varname] or $varname to retrieve the value -
- - - !!exec $let[orange;10] or $let[apple;10;yes] - - - - -::: tip Related Functions -Check out: `$get` -::: diff --git a/guide/Variables/resetUserVar.md b/guide/Variables/resetUserVar.md deleted file mode 100644 index b32d1e27..00000000 --- a/guide/Variables/resetUserVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $resetUserVar -Resets a user variable for all users. - -#### Usage: `$resetUserVar[variable]` -
- - - !!exec $resetUserVar[warnings] - - - -::: tip Related Functions -Check out: `$setUserVar` - -Check out: `$getUserVar` -::: diff --git a/guide/Variables/setChannelVar.md b/guide/Variables/setChannelVar.md deleted file mode 100644 index e01a1649..00000000 --- a/guide/Variables/setChannelVar.md +++ /dev/null @@ -1,24 +0,0 @@ -# $setChannelVar -Sets a channel variable value. - -#### Usage: `$setChannelVar[variable;value;channelID (optional)]` -
- - - !!exec $setChannelVar[Creator;Mido;$channelID] - - - -or for current Channel - - - - !!exec $setChannelVar[Creator;Mido] - - - -::: tip Related Functions -Check out: `$getChannelVar` - -Check out: `$deleteChannelVar` -::: diff --git a/guide/Variables/setMessageVar.md b/guide/Variables/setMessageVar.md deleted file mode 100644 index 9834a908..00000000 --- a/guide/Variables/setMessageVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $setMessageVar -Sets a message variable value. - -#### Usage: `$setMessageVar[variable;value;messageID(optional)]` -
- - - !!exec $setMessageVar[Creator;Mido;$messageID] - - - -::: tip Related Functions -Check out: `$getMessageVar` - -Check out: `$deleteMessageVar` -::: diff --git a/guide/Variables/setServerVar.md b/guide/Variables/setServerVar.md deleted file mode 100644 index da4410b5..00000000 --- a/guide/Variables/setServerVar.md +++ /dev/null @@ -1,16 +0,0 @@ -# $setServerVar -Sets a Server variable value. - -#### Usage: `$setServerVar[variable;value]` -
- - - !!exec $setServerVar[holder;Mika] - - - -::: tip Related Functions -Check out: `$getServerVar` - -Check out: `$deleteServerVar` -::: diff --git a/guide/Variables/setUserVar.md b/guide/Variables/setUserVar.md deleted file mode 100644 index f2642c8e..00000000 --- a/guide/Variables/setUserVar.md +++ /dev/null @@ -1,18 +0,0 @@ -# $setUserVar -Sets a user variable value. - -#### Usage: `$setUserVar[variable;value;userID(optional)]` -
- - - !!exec $setMessageVar[warnings;5] - - - -::: tip Related Functions -Check out: `$getUserVar` - -Check out: `$deleteUserVar` - -Check out: `$resetUserVar` -::: diff --git a/guide/Variables/userLeaderboard.md b/guide/Variables/userLeaderboard.md deleted file mode 100644 index 2ef9b195..00000000 --- a/guide/Variables/userLeaderboard.md +++ /dev/null @@ -1,44 +0,0 @@ -# $userLeaderboard -Generates a leaderboard of a user variable and return it. - -#### Usage: `$userLeaderboard[variable;asc/desc (optional);{top}.- {username} - {value};list (optional, max=40);page (optional)]` - -Available Variables: -| Variable | Description | -| --- | ----------- | -| {top} | returns the rank number | -| {value} | returns the numerical value of the variable | -| {raw_value} | returns the raw value in case it's not number | -| {id} | returns the user id | -| {mention} | returns the user mention | -| {username} | returns the username | -| {nickname} | returns the nickname | -| {tag} | returns the tag like Mido#1234 | -| {discriminator} | returns the discriminator like 1234 | - -Order: -* `desc`: Will display all the members' ranks from largest to smallest. -* `asc`: Will display all the members' ranks from smallest to largest. - -#### Example: -To use this function your uservar must have numeric values . -
- - - !!exec $setUserVar[money;100]
- !!exec $userLeaderboard[money;asc;{top}.- {username} - {value}] -
- - 1.- Mido - 100 - -
- -::: tip Related Functions -Check out: `$setUserVar` - -Check out: `$getUserVar` - -Check out: `$deleteUserVar` - -Check out: `$resetUserVar` -::: diff --git a/guide/Variables/userVarRank.md b/guide/Variables/userVarRank.md deleted file mode 100644 index c7262df5..00000000 --- a/guide/Variables/userVarRank.md +++ /dev/null @@ -1,19 +0,0 @@ -# $userVarRank - -Return user var rank returned by $userleaderboard for a single user - -## Usage - -```bash -$uservarRank[Variable name;Order Type (optional) (asc/desc, default is desc);User ID (optional)] -``` - -### Example: - - - !!exec Your rank is $userVarRank[xp]

-
- - Your rank is 3 - -
\ No newline at end of file diff --git a/guide/Variables/viewChannelVars.md b/guide/Variables/viewChannelVars.md deleted file mode 100644 index 6b55fd92..00000000 --- a/guide/Variables/viewChannelVars.md +++ /dev/null @@ -1,29 +0,0 @@ -# $viewChannelVars - -View a list of all the variables that are defined for a specific channel, and search for specific variables using a regular expression query filter - -## Usage - -```bash -$viewChannelVars[Channel ID (default: $channelID);Separator;Query Regex (optional)] -``` - -### Example: - - - !!exec $viewChannelVars

-
- - ticket, ticket_owner, staff

-
-
- -### Example (return only variables that starts with ticket): - - - !!exec $viewChannelVars[$channelID; ,;^ticket]

-
- - ticket, ticket_owner - -
\ No newline at end of file diff --git a/guide/Variables/viewServerVars.md b/guide/Variables/viewServerVars.md deleted file mode 100644 index 84a7cce5..00000000 --- a/guide/Variables/viewServerVars.md +++ /dev/null @@ -1,29 +0,0 @@ -# $viewServerVars - -View a list of all the variables that are defined for the server, and search for specific variables using a regular expression query filter - -## Usage - -```bash -$viewServerVars[Separator;Query Regex (optional)] -``` - -### Example: - - - !!exec $viewServerVars

-
- - level1_xp, names, staffs, level2_xp, level3_xp, level1_reward

-
-
- -### Example (return only variables that starts with level): - - - !!exec $viewServerVars[, ;^level]

-
- - level1_xp, level2_xp, level3_xp,level1_reward - -
diff --git a/guide/Variables/viewUserVars.md b/guide/Variables/viewUserVars.md deleted file mode 100644 index b1a09121..00000000 --- a/guide/Variables/viewUserVars.md +++ /dev/null @@ -1,19 +0,0 @@ -# $viewUserVars - -View a list of all the variables that are defined for a specific user - -## Usage - -```bash -$viewUserVars[User ID;Separator] -``` - -### Example: - - - !!exec $viewUsersVars[$authorID]

-
- - xp, money, bonus - -
diff --git a/guide/function-map.json b/guide/function-map.json index 668d564b..7998eeb4 100644 --- a/guide/function-map.json +++ b/guide/function-map.json @@ -1,557 +1,574 @@ { - "botcount": "Bot/botCount.md", - "botownerid": "Bot/botOwnerID.md", - "botping": "Bot/botPing.md", - "bottier": "Bot/botTier.md", - "bottyping": "Bot/botTyping.md", - "botverified": "Bot/botVerified.md", - "botversion": "Bot/botVersion.md", - "cachemember": "Bot/cacheMember.md", - "clientid": "Bot/clientID.md", - "cpu": "Bot/cpu.md", - "executiontime": "Bot/executionTime.md", - "getbotactivity": "Bot/getBotActivity.md", - "getbotinvite": "Bot/getBotInvite.md", - "maxram": "Bot/maxRam.md", - "ping": "Bot/ping.md", - "ram": "Bot/ram.md", - "servercount": "Bot/serverCount.md", - "setbotactivity": "Bot/setBotActivity.md", - "uptime": "Bot/uptime.md", - "blacklistchannelids": "Channel/blackListChannelIDs.md", - "cachechannelmessages": "Channel/cacheChannelMessages.md", - "categorychannels": "Channel/categoryChannels.md", - "channel": "Channel/channel.md", - "channelcategoryid": "Channel/channelCategoryID.md", - "channelcount": "Channel/channelCount.md", - "channelexists": "Channel/channelExists.md", - "channelid": "Channel/channelID.md", - "channelname": "Channel/channelName.md", - "channelpermissionsfor": "Channel/channelPermissionsFor.md", - "channeltopic": "Channel/channelTopic.md", - "channeltype": "Channel/channelType.md", - "channelused": "Channel/channelUsed.md", - "clear": "Channel/clear.md", - "clonechannel": "Channel/cloneChannel.md", - "closeticket": "Channel/closeTicket.md", - "createchannel": "Channel/createChannel.md", - "createforum": "Channel/createForum.md", - "deletechannels": "Channel/deleteChannels.md", - "editchannel": "Channel/editChannel.md", - "editforum": "Channel/editForum.md", - "eventchannelid": "Channel/eventChannelID.md", - "eventchannelparent": "Channel/eventChannelParent.md", - "findchannel": "Channel/findChannel.md", - "findserverchannel": "Channel/findServerChannel.md", - "getchannelmessages": "Channel/getChannelMessages.md", - "getchannelslowmode": "Channel/getChannelSlowmode.md", - "latestmessage": "Channel/latestMessage.md", - "mentionchannel": "Channel/mentionChannel.md", - "modifychannelperms": "Channel/modifyChannelPerms.md", - "newticket": "Message/newTicket.md", - "removecontains": "Channel/removeContains.md", - "serverchannels": "Channel/serverChannels.md", - "setchanneltopic": "Channel/setChannelTopic.md", - "slowmode": "Channel/slowmode.md", - "transcriptchannel": "Channel/transcriptChannel.md", - "usechannel": "Channel/useChannel.md", - "vcafter": "Channel/vcAfter.md", - "vcbefore": "Channel/vcBefore.md", - "voicechannelid": "Channel/voiceChannelID.md", - "channelcooldown": "Cooldown/channelCooldown.md", - "cooldown": "Cooldown/cooldown.md", - "servercooldowm": "CodeReferences/ref.serverCooldown.md", - "clearcooldown": "Cooldown/clearCoolDown.md", - "getcooldowntime": "Cooldown/getCooldownTime.md", - "servercooldown": "Cooldown/serverCooldown.md", - "creationdate": "Date/creationDate.md", - "datestamp": "Date/dateStamp.md", - "datetotime": "Date/dateToTime.md", - "day": "Date/day.md", - "formatdate": "Date/formatDate.md", - "hour": "Date/hour.md", - "humanizems": "Date/humanizeMS.md", - "memberjoinedcode": "Date/memberJoinedCode.md", - "memberjoineddate": "Date/memberJoinedDate.md", - "minute": "Date/minute.md", - "month": "Date/month.md", - "parsedate": "Date/parseDate.md", - "parsetime": "Date/parseTime.md", - "second": "Date/second.md", - "timestamp": "Date/timeStamp.md", - "timetodate": "Date/timeToDate.md", - "timezone": "Date/timezone.md", - "year": "Date/year.md", - "eventcreate": "Events/eventCreate.md", - "eventdelete": "Events/eventDelete.md", - "eventedit": "Events/eventEdit.md", - "eventend": "Events/eventEnd.md", - "eventexists": "Events/eventExists.md", - "eventstart": "Events/eventStart.md", - "geteventinfo": "Events/getEventInfo.md", - "geteventusers": "Events/getEventUsers.md", - "guildevents": "Events/guildEvents.md", - "imageborderrad": "Image/imageBorderRad.md", - "imagecreate": "Image/imageCreate.md", - "imagecrop": "Image/imageCrop.md", - "imagedraw": "Image/imageDraw.md", - "imagedrawback": "Image/imageDrawBack.md", - "imagefill": "Image/imageFill.md", - "imageheight": "Image/imageHeight.md", - "imagelineheight": "Image/imageLineHeight.md", - "imageloademoji": "Image/imageLoadEmoji.md", - "imageloadfromurl": "Image/imageLoadFromURL.md", - "imageoutput": "Image/imageOutput.md", - "imagepositionbase": "Image/imagePositionBase.md", - "imagesetopacity": "Image/imageSetOpacity.md", - "imagestroke": "Image/imageStroke.md", - "imagestrokewidth": "Image/imageStrokeWidth.md", - "imagetextalign": "Image/imageTextAlign.md", - "imagetextbaseline": "Image/imageTextBaseline.md", - "imagetextcolor": "Image/imageTextColor.md", - "imagetextfill": "Image/imageTextFill.md", - "imagetextfillcolor": "Image/imageTextFillColor.md", - "imagetextsize": "Image/imageTextSize.md", - "imagetextstroke": "Image/imageTextStroke.md", - "imagetextstrokecolor": "Image/imageTextStrokeColor.md", - "imagetextweight": "Image/imageTextWeight.md", - "imageusefont": "Image/imageUseFont.md", - "imagewidth": "Image/imageWidth.md", - "commandname": "Interaction/commandName.md", - "getoption": "Interaction/getOption.md", - "interactiondelete": "Interaction/interactionDelete.md", - "interactionedit": "Interaction/interactionEdit.md", - "interactionid": "Interaction/interactionId.md", - "interactionreply": "Interaction/interactionReply.md", - "modal": "Interaction/modal.md", - "modalanswer": "Interaction/modalAnswer.md", - "modalid": "Interaction/modalID.md", - "authoravatar": "Member/authorAvatar.md", - "authorid": "Member/authorID.md", - "ban": "Member/ban.md", - "blacklistids": "Member/blackListIDs.md", - "boostingsince": "Member/boostingSince.md", - "changenickname": "Member/changeNickname.md", - "discriminator": "Member/discriminator.md", - "displayname": "Member/displayName.md", - "eventnewnickname": "Member/eventNewNickname.md", - "eventoldnickname": "Member/eventOldNickname.md", - "findmember": "Member/findMember.md", - "getuserbadges": "Member/getUserBadges.md", - "hasanyperm": "Member/hasAnyPerm.md", - "hasanyrole": "Member/hasAnyRole.md", - "hasperms": "Member/hasPerms.md", - "hasroles": "Member/hasRoles.md", - "isbanned": "Member/isBanned.md", - "isuserdmenabled": "Member/isUserDMEnabled.md", - "kick": "Member/kick.md", - "membersearch": "Member/memberSearch.md", - "memberswithstatus": "Member/membersWithStatus.md", - "mention": "Member/mention.md", - "moveuser": "Member/moveUser.md", - "muteuser": "Member/muteUser.md", - "nickname": "Member/nickname.md", - "status": "Member/status.md", - "unban": "Member/unban.md", - "user": "Member/user.md", - "useravatar": "Member/userAvatar.md", - "userbanner": "Member/userBanner.md", - "userconnectedvc": "Member/userConnectedVC.md", - "userexists": "Member/userExists.md", - "userid": "Member/userID.md", - "userperms": "Member/userPerms.md", - "userreacted": "Member/userReacted.md", - "userrolecolor": "Member/userRoleColor.md", - "userroles": "Member/userRoles.md", - "usertag": "Member/userTag.md", - "username": "Member/username.md", - "usersbanned": "Member/usersBanned.md", - "usersinchannel": "Member/usersInChannel.md", - "userstyping": "Member/usersTyping.md", - "userswithrole": "Member/usersWithRole.md", - "dm": "Message/DM.md", - "addcmdreactions": "Message/addCmdReactions.md", - "addmessagereactions": "Message/addMessageReactions.md", - "addreactions": "Message/addReactions.md", - "argscheck": "Message/argsCheck.md", - "argscount": "Message/argsCount.md", - "awaitmessage": "Message/awaitMessage.md", - "channelsendmessage": "Message/channelSendMessage.md", - "clearreaction": "Message/clearReaction.md", - "clearreactions": "Message/clearReactions.md", - "createwebhook": "Message/createWebhook.md", - "deletecommand": "Message/deleteCommand.md", - "deletein": "Message/deleteIn.md", - "deletemessage": "Message/deleteMessage.md", - "deletewebhook": "Message/deleteWebhook.md", - "deletewebhookmessage": "Message/deleteWebhookMessage.md", - "disablechannelmentions": "Message/disableChannelMentions.md", - "disableeveryonementions": "Message/disableEveryoneMentions.md", - "disablerolementions": "Message/disableRoleMentions.md", - "editembed": "Message/editEmbed.md", - "editin": "Message/editIn.md", - "editmessage": "Message/editMessage.md", - "editwebhookmessage": "Message/editWebhookMessage.md", - "emoji": "Message/emoji.md", - "emojiid": "Message/emojiID.md", - "emojiname": "Message/emojiName.md", - "emojitostring": "Message/emojiToString.md", - "emojisfrommessage": "Message/emojisFromMessage.md", - "enableeveryonementions": "Message/enableEveryoneMentions.md", - "getcommandoption": "Message/getCommandOption.md", - "getembed": "Message/getEmbed.md", - "getmessage": "Message/getMessage.md", - "getmessagereactions": "Message/getMessageReactions.md", - "getreactioncount": "Message/getReactionCount.md", - "getreactions": "Message/getReactions.md", - "hasembeds": "Message/hasEmbeds.md", - "hyperlink": "Message/hyperlink.md", - "message": "Message/message.md", - "messageattachment": "Message/messageAttachment.md", - "messageexists": "Message/messageExists.md", - "messageflags": "Message/messageFlags.md", - "messageid": "Message/messageID.md", - "messagepublish": "Message/messagePublish.md", - "messageslice": "Message/messageSlice.md", - "messagetype": "Message/messageType.md", - "messagewebhookid": "Message/messageWebhookID.md", - "modifywebhook": "Message/modifyWebhook.md", - "msg": "Message/msg.md", - "noescapingmessage": "Message/noEscapingMessage.md", - "nomentionmessage": "Text/noMentionMessage.md", - "pinmessage": "Message/pinMessage.md", - "poll": "Message/poll.md", - "referencechannelid": "Message/referenceChannelID.md", - "referencemessageid": "Message/referenceMessageID.md", - "reply": "Message/reply.md", - "sendcrosspostingmessage": "Message/sendCrosspostingMessage.md", - "senddm": "Message/sendDM.md", - "sendmessage": "Message/sendMessage.md", - "sendwebhook": "Message/sendWebhook.md", - "sentmessageid": "Message/sentMessageID.md", - "unpinmessage": "Message/unpinMessage.md", - "webhookexists": "Message/webhookExists.md", - "random": "Random/random.md", - "randomchannelid": "Random/randomChannelID.md", - "randommention": "Random/randomMention.md", - "randomroleid": "Random/randomRoleID.md", - "randomstring": "Random/randomString.md", - "randomtext": "Random/randomText.md", - "randomtextbiased": "Random/randomTextBiased.md", - "randomuserid": "Random/randomUserID.md", - "resetrandom": "Random/resetRandom.md", - "httprequest": "Request/httpRequest.md", - "httprequestheader": "Request/httpRequestHeader.md", - "httprequeststatus": "Request/httpRequestStatus.md", - "blacklistroleids": "Role/blackListRoleIDs.md", - "colorrole": "Role/colorRole.md", - "createrole": "Role/createRole.md", - "deleteroles": "Role/deleteRoles.md", - "findrole": "Role/findRole.md", - "getrolecolor": "Role/getRoleColor.md", - "giveroles": "Role/giveRoles.md", - "guildroles": "Role/guildRoles.md", - "hasrole": "Role/hasRole.md", - "highestrole": "Role/highestRole.md", - "highestserverrole": "Role/highestServerRole.md", - "lowestrole": "Role/lowestRole.md", - "lowestserverrole": "Role/lowestServerRole.md", - "mentionrole": "Role/mentionRole.md", - "modifyrole": "Role/modifyRole.md", - "modifyroleperms": "Role/modifyRolePerms.md", - "modifyuserroles": "Role/modifyUserRoles.md", - "role": "Role/role.md", - "rolecount": "Role/roleCount.md", - "roleexists": "Role/roleExists.md", - "roleid": "Role/roleID.md", - "roleicon": "Role/roleIcon.md", - "rolememberscount": "Role/roleMembersCount.md", - "rolename": "Role/roleName.md", - "roleperms": "Role/rolePerms.md", - "roleposition": "Role/rolePosition.md", - "setroles": "Role/setRoles.md", - "takeroles": "Role/takeRoles.md", - "toggleroles": "Role/toggleRoles.md", - "addemoji": "Server/addEmoji.md", - "allmemberscount": "Server/allMembersCount.md", - "createautomodkeyword": "Server/createAutomodKeyword.md", - "deleteautomod": "Server/deleteAutomod.md", - "deleteemojis": "Server/deleteEmojis.md", - "editautomodkeyword": "Server/editAutomodKeyword.md", - "emojicount": "Server/emojiCount.md", - "emojiexists": "Server/emojiExists.md", - "getinviteinfo": "Server/getInviteInfo.md", - "getserverinvite": "Server/getServerInvite.md", - "guild": "Server/guild.md", - "memberscount": "Server/membersCount.md", - "ownerid": "Server/ownerID.md", - "resolveemojiid": "Server/resolveEmojiID.md", - "securitypause": "Server/securityPause.md", - "serverbanner": "Server/serverBanner.md", - "serverboostcount": "Server/serverBoostCount.md", - "serverboostlevel": "Server/serverBoostLevel.md", - "servercontentfilter": "Server/serverContentFilter.md", - "serverdescription": "Server/serverDescription.md", - "serveremojis": "Server/serverEmojis.md", - "serverfeatures": "Server/serverFeatures.md", - "servericon": "Server/serverIcon.md", - "servername": "Server/serverName.md", - "serverregion": "Server/serverRegion.md", - "serversplash": "Server/serverSplash.md", - "serververificationlevel": "Server/serverVerificationLevel.md", - "setguildicon": "Server/setGuildIcon.md", - "setguildname": "Server/setGuildName.md", - "systemchannelid": "Server/systemChannelID.md", - "createsticker": "Stickers/createSticker.md", - "deletesticker": "Stickers/deleteSticker.md", - "editsticker": "Stickers/editSticker.md", - "messagestickers": "Stickers/messageStickers.md", - "serverstickers": "Stickers/serverStickers.md", - "sticker": "Stickers/sticker.md", - "arrayclear": "Text/Array/arrayClear.md", - "arrayconcat": "Text/Array/arrayConcat.md", - "arraycount": "Text/Array/arrayCount.md", - "arraycreate": "Text/Array/arrayCreate.md", - "arrayelementcount": "Text/Array/arrayElementCount.md", - "arrayfilter": "Text/Array/arrayFilter.md", - "arrayget": "Text/Array/arrayGet.md", - "arrayinclude": "Text/Array/arrayInclude.md", - "arrayjoin": "Text/Array/arrayJoin.md", - "arraylength": "Text/Array/arrayLength.md", - "arrayloop": "Text/Array/arrayLoop.md", - "arraymap": "Text/Array/arrayMap.md", - "arraypop": "Text/Array/arrayPop.md", - "arraypush": "Text/Array/arrayPush.md", - "arrayremove": "Text/Array/arrayRemove.md", - "arrayreverse": "Text/Array/arrayReverse.md", - "arraysearch": "Text/Array/arraySearch.md", - "arrayset": "Text/Array/arraySet.md", - "arrayshift": "Text/Array/arrayShift.md", - "arrayshuffle": "Text/Array/arrayShuffle.md", - "arrayslice": "Text/Array/arraySlice.md", - "arraysort": "Text/Array/arraySort.md", - "arrayunique": "Text/Array/arrayUnique.md", - "arrayunshift": "Text/Array/arrayUnshift.md", - "addbutton": "Text/Components/addButton.md", - "addmenu": "Text/Components/addMenu.md", - "awaitbutton": "Text/Components/awaitButton.md", - "awaitmenu": "Text/Components/awaitMenu.md", - "button": "Text/Components/button.md", - "buttonemoji": "Text/Components/buttonEmoji.md", - "buttonid": "Text/Components/buttonID.md", - "buttonisdisabled": "Text/Components/buttonIsDisabled.md", - "buttonlabel": "Text/Components/buttonLabel.md", - "buttonstyle": "Text/Components/buttonStyle.md", - "buttonurl": "Text/Components/buttonURL.md", - "disablebutton": "Text/Components/disableButton.md", - "disablebuttons": "Text/Components/disableButtons.md", - "disablemenu": "Text/Components/disableMenu.md", - "editbutton": "Text/Components/editButton.md", - "editmenu": "Text/Components/editMenu.md", - "enablebuttons": "Text/Components/enableButtons.md", - "enablemenu": "Text/Components/enableMenu.md", - "eventselected": "Text/Components/eventSelected.md", - "menuid": "Text/Components/menuId.md", - "removebutton": "Text/Components/removeButton.md", - "removebuttons": "Text/Components/removeButtons.md", - "removeembed": "Text/Components/removeEmbed.md", - "removemenu": "Text/Components/removeMenu.md", - "selectmenu": "Text/Components/selectMenu.md", - "checkcondition": "Text/Condition/checkCondition.md", - "conditional": "Text/Condition/conditional.md", - "else": "Text/Condition/else.md", - "elseif": "Text/Condition/elseif.md", - "endif": "Text/Condition/endIf.md", - "endelseif": "Text/Condition/endelseif.md", - "if": "Text/Condition/if.md", - "addfield": "Text/Embed/addField.md", - "addtimestamp": "Text/Embed/addTimestamp.md", - "attachment": "Text/Embed/attachment.md", - "author": "Text/Embed/author.md", - "color": "Text/Embed/color.md", - "description": "Text/Embed/description.md", - "footer": "Text/Embed/footer.md", - "image": "Text/Embed/image.md", - "thumbnail": "Text/Embed/thumbnail.md", - "title": "Text/Embed/title.md", - "abbreviate": "Text/Math/abbreviate.md", - "abs": "Text/Math/abs.md", - "ceil": "Text/Math/ceil.md", - "divide": "Text/Math/divide.md", - "floor": "Text/Math/floor.md", - "math": "Text/Math/math.md", - "mathmax": "Text/Math/mathMax.md", - "mathmin": "Text/Math/mathMin.md", - "modulo": "Text/Math/modulo.md", - "multi": "Text/Math/multi.md", - "ordinal": "Text/Math/ordinal.md", - "round": "Text/Math/round.md", - "roundtenth": "Text/Math/roundTenth.md", - "sub": "Text/Math/sub.md", - "sum": "Text/Math/sum.md", - "truncate": "Text/Math/truncate.md", - "objectcreate": "Text/Object/ObjectCreate.md", - "objectget": "Text/Object/ObjectGet.md", - "objectincrease": "Text/Object/ObjectIncrease.md", - "objectkeyexists": "Text/Object/ObjectKeyExists.md", - "objectkeys": "Text/Object/ObjectKeys.md", - "objectloop": "Text/Object/ObjectLoop.md", - "objectmerge": "Text/Object/ObjectMerge.md", - "objectremove": "Text/Object/ObjectRemove.md", - "objectrenamekey": "Text/Object/ObjectRenameKey.md", - "objectset": "Text/Object/ObjectSet.md", - "objectvalues": "Text/Object/ObjectValues.md", - "addobjectproperty": "Text/Object/addObjectProperty.md", - "createobject": "Text/Object/createObject.md", - "getobject": "Text/Object/getObject.md", - "getobjectkeys": "Text/Object/getObjectKeys.md", - "getobjectproperty": "Text/Object/getObjectProperty.md", - "regexcheck": "Text/Regex/regexCheck.md", - "regexmatch": "Text/Regex/regexMatch.md", - "regexreplace": "Text/Regex/regexReplace.md", - "replacetextwithregex": "Text/Regex/replaceTextWithRegex.md", - "buffer": "Text/buffer.md", - "channelnsfw": "Text/channelNSFW.md", - "charcount": "Text/charCount.md", - "checkcontains": "Text/checkContains.md", - "customemoji": "Text/customEmoji.md", - "disablementions": "Text/disableMentions.md", - "filtermessage": "Text/filterMessage.md", - "filtermessagewords": "Text/filterMessageWords.md", - "findchars": "Text/findChars.md", - "findnumbers": "Text/findNumbers.md", - "findspecialchars": "Text/findSpecialChars.md", - "indexof": "Text/indexOf.md", - "ischannelmention": "Text/isChannelMention.md", - "isusermention": "Text/isUserMention.md", - "isboosting": "Text/isandhas/isBoosting.md", - "isbot": "Text/isandhas/isBot.md", - "isconnected": "Text/isandhas/isConnected.md", - "isdeafened": "Text/isandhas/isDeafened.md", - "isemoji": "Text/isandhas/isEmoji.md", - "ishoisted": "Text/isandhas/isHoisted.md", - "ismanaged": "Text/isandhas/isManaged.md", - "ismentionable": "Text/isandhas/isMentionable.md", - "ismentioned": "Text/isandhas/isMentioned.md", - "ismuted": "Text/isandhas/isMuted.md", - "isnumber": "Text/isandhas/isNumber.md", - "isstreaming": "Text/isandhas/isStreaming.md", - "isticket": "Text/isandhas/isTicket.md", - "isvalidhex": "Text/isandhas/isValidHex.md", - "isvalidinvite": "Text/isandhas/isValidInvite.md", - "isvalidlink": "Text/isandhas/isValidLink.md", - "isvalidobject": "Text/isandhas/isValidObject.md", - "mentiontype": "Text/mentionType.md", - "mentioned": "Text/mentioned.md", - "mentionedchannels": "Text/mentionedChannels.md", - "mentionedroles": "Text/mentionedRoles.md", - "numtoword": "Text/numToWord.md", - "numberseparator": "Text/numberSeparator.md", - "onlybotperms": "Text/only/onlyBotPerms.md", - "onlyforcategories": "Text/only/onlyForCategories.md", - "onlyforchannels": "Text/only/onlyForChannels.md", - "onlyforids": "Text/only/onlyForIDs.md", - "onlyforroles": "Text/only/onlyForRoles.md", - "onlyif": "Text/only/onlyIf.md", - "onlyifmessagecontains": "Text/only/onlyIfMessageContains.md", - "onlynsfw": "Text/only/onlyNSFW.md", - "onlyperms": "Text/only/onlyPerms.md", - "padleft": "Text/padLeft.md", - "padright": "Text/padRight.md", - "repeatmessage": "Text/repeatMessage.md", - "replacetext": "Text/replaceText.md", - "stringendswith": "Text/stringEndsWith.md", - "stringstartswith": "Text/stringStartsWith.md", - "textlength": "Text/textLength.md", - "textshuffle": "Text/textShuffle.md", - "textslice": "Text/textSlice.md", - "advancedtextsplit": "Text/textSplit/advancedTextSplit.md", - "concattextsplit": "Text/textSplit/concatTextSplit.md", - "edittextsplitelement": "Text/textSplit/editTextSplitElement.md", - "findtextsplitindex": "Text/textSplit/findTextSplitIndex.md", - "gettextsplitlength": "Text/textSplit/getTextSplitLength.md", - "joinsplittext": "Text/textSplit/joinSplitText.md", - "removesplittextelement": "Text/textSplit/removeSplitTextElement.md", - "removetextsplitelement": "Text/textSplit/removeTextSplitElement.md", - "splicetextjoin": "Text/textSplit/spliceTextJoin.md", - "splittext": "Text/textSplit/splitText.md", - "textsplit": "Text/textSplit/textSplit.md", - "texttrim": "Text/textTrim.md", - "tolocaleuppercase": "Text/toLocaleUpperCase.md", - "tolowercase": "Text/toLowercase.md", - "touppercase": "Text/toUppercase.md", - "uri": "Text/uri.md", - "void": "Text/void.md", - "adduserstothread": "Threads/addUsersToThread.md", - "archivethread": "Threads/archiveThread.md", - "closepost": "Threads/closePost.md", - "createpost": "Threads/createPost.md", - "createthread": "Threads/createThread.md", - "deletepost": "Threads/deletePost.md", - "deleteposts": "Threads/deletePosts.md", - "deletethreads": "Threads/deleteThreads.md", - "editpost": "Threads/editPost.md", - "editthread": "Threads/editThread.md", - "getthreads": "Threads/getThreads.md", - "jointhreads": "Threads/joinThreads.md", - "leavethreads": "Threads/leaveThreads.md", - "lockpost": "Threads/lockPost.md", - "lockthread": "Threads/lockThread.md", - "pinpost": "Threads/pinPost.md", - "removeusersfromthread": "Threads/removeUsersFromThread.md", - "thread": "Threads/thread.md", - "timeoutaction": "Timeout/timeoutAction.md", - "timeoutby": "Timeout/timeoutBy.md", - "timeoutreason": "Timeout/timeoutReason.md", - "usergettimeout": "Timeout/userGetTimeout.md", - "userremovetimeout": "Timeout/userRemoveTimeout.md", - "usersettimeout": "Timeout/userSetTimeout.md", - "callfunction": "Useful/callFunction.md", - "commandcode": "Useful/commandCode.md", - "deletetrigger": "Useful/deleteTrigger.md", - "edittrigger": "Useful/editTrigger.md", - "endforeach": "Useful/endForEach.md", - "endfunction": "Useful/endFunction.md", - "endtimeout": "Useful/endTimeout.md", - "error": "Useful/error.md", - "foreach": "Useful/forEach.md", - "function": "Useful/function.md", - "gettoken": "Useful/getToken.md", - "gettrigger": "Useful/getTrigger.md", - "ignoreerrors": "Useful/ignoreErrors.md", - "includelibrary": "Useful/includeLibrary.md", - "jsonrequest": "Useful/jsonRequest.md", - "redirecterrors": "Useful/redirectErrors.md", - "return": "Useful/return.md", - "seq": "Useful/seq.md", - "settimeout": "Useful/setTimeout.md", - "spread": "Useful/spread.md", - "stop": "Useful/stop.md", - "suppresserrors": "Useful/suppressErrors.md", - "triggerexists": "Useful/triggerExists.md", - "wait": "Useful/wait.md", - "deletechannelvar": "Variables/deleteChannelVar.md", - "deletemessagevar": "Variables/deleteMessageVar.md", - "deleteservervar": "Variables/deleteServerVar.md", - "deleteuservar": "Variables/deleteUserVar.md", - "get": "Variables/get.md", - "getchannelvar": "Variables/getChannelVar.md", - "getmessagevar": "Variables/getMessageVar.md", - "getservervar": "Variables/getServerVar.md", - "getuservar": "Variables/getUserVar.md", - "increasechannelvar": "Variables/increaseChannelVar.md", - "increaseservervar": "Variables/increaseServerVar.md", - "increaseuservar": "Variables/increaseUserVar.md", - "initvar": "Variables/initVar.md", - "let": "Variables/let.md", - "resetuservar": "Variables/resetUserVar.md", - "setchannelvar": "Variables/setChannelVar.md", - "setmessagevar": "Variables/setMessageVar.md", - "setservervar": "Variables/setServerVar.md", - "setuservar": "Variables/setUserVar.md", - "userleaderboard": "Variables/userLeaderboard.md", - "uservarrank": "Variables/userVarRank.md", - "viewchannelvars": "Variables/viewChannelVars.md", - "viewservervars": "Variables/viewServerVars.md", - "viewuservars": "Variables/viewUserVars.md" -} \ No newline at end of file + "abbreviate": "Text/Math/abbreviate.mdx", + "abs": "Text/Math/abs.mdx", + "addbutton": "Text/Components/addButton.mdx", + "addcmdreactions": "Message/addCmdReactions.mdx", + "addemoji": "Server/addEmoji.mdx", + "addfield": "Text/Embed/addField.mdx", + "addmenu": "Text/Components/addMenu.mdx", + "addmessagereactions": "Message/addMessageReactions.mdx", + "addobjectproperty": "Text/Object/addObjectProperty.mdx", + "addreactions": "Message/addReactions.mdx", + "addtimestamp": "Text/Embed/addTimestamp.mdx", + "adduserstothread": "Threads/addUsersToThread.mdx", + "advancedtextsplit": "Text/textSplit/advancedTextSplit.mdx", + "allmemberscount": "Server/allMembersCount.mdx", + "archivethread": "Threads/archiveThread.mdx", + "argscheck": "Message/argsCheck.mdx", + "argscount": "Message/argsCount.mdx", + "arrayclear": "Text/Array/arrayClear.mdx", + "arrayconcat": "Text/Array/arrayConcat.mdx", + "arraycount": "Text/Array/arrayCount.mdx", + "arraycreate": "Text/Array/arrayCreate.mdx", + "arrayelementcount": "Text/Array/arrayElementCount.mdx", + "arrayfilter": "Text/Array/arrayFilter.mdx", + "arrayget": "Text/Array/arrayGet.mdx", + "arrayinclude": "Text/Array/arrayInclude.mdx", + "arrayjoin": "Text/Array/arrayJoin.mdx", + "arraylength": "Text/Array/arrayLength.mdx", + "arrayloop": "Text/Array/arrayLoop.mdx", + "arraymap": "Text/Array/arrayMap.mdx", + "arraypop": "Text/Array/arrayPop.mdx", + "arraypush": "Text/Array/arrayPush.mdx", + "arrayremove": "Text/Array/arrayRemove.mdx", + "arrayreverse": "Text/Array/arrayReverse.mdx", + "arraysearch": "Text/Array/arraySearch.mdx", + "arrayset": "Text/Array/arraySet.mdx", + "arrayshift": "Text/Array/arrayShift.mdx", + "arrayshuffle": "Text/Array/arrayShuffle.mdx", + "arrayslice": "Text/Array/arraySlice.mdx", + "arraysort": "Text/Array/arraySort.mdx", + "arrayunique": "Text/Array/arrayUnique.mdx", + "arrayunshift": "Text/Array/arrayUnshift.mdx", + "attachment": "Text/Embed/attachment.mdx", + "author": "Text/Embed/author.mdx", + "authoravatar": "Member/authorAvatar.mdx", + "authorid": "Member/authorID.mdx", + "awaitbutton": "Text/Components/awaitButton.mdx", + "awaitmenu": "Text/Components/awaitMenu.mdx", + "awaitmessage": "Message/awaitMessage.mdx", + "ban": "Member/ban.mdx", + "blacklistchannelids": "Channel/blackListChannelIDs.mdx", + "blacklistids": "Member/blackListIDs.mdx", + "blacklistroleids": "Role/blackListRoleIDs.mdx", + "boostingsince": "Member/boostingSince.mdx", + "botcount": "Bot/botCount.mdx", + "botownerid": "Bot/botOwnerID.mdx", + "botping": "Bot/botPing.mdx", + "bottier": "Bot/botTier.mdx", + "bottyping": "Bot/botTyping.mdx", + "botverified": "Bot/botVerified.mdx", + "botversion": "Bot/botVersion.mdx", + "buffer": "Text/buffer.mdx", + "button": "Text/Components/button.mdx", + "buttonemoji": "Text/Components/buttonEmoji.mdx", + "buttonid": "Text/Components/buttonID.mdx", + "buttonisdisabled": "Text/Components/buttonIsDisabled.mdx", + "buttonlabel": "Text/Components/buttonLabel.mdx", + "buttonstyle": "Text/Components/buttonStyle.mdx", + "buttonurl": "Text/Components/buttonURL.mdx", + "cachechannelmessages": "Channel/cacheChannelMessages.mdx", + "cachemember": "Bot/cacheMember.mdx", + "callfunction": "Useful/callFunction.mdx", + "categorychannels": "Channel/categoryChannels.mdx", + "ceil": "Text/Math/ceil.mdx", + "changenickname": "Member/changeNickname.mdx", + "channel": "Channel/channel.mdx", + "channelcategoryid": "Channel/channelCategoryID.mdx", + "channelcooldown": "Cooldown/channelCooldown.mdx", + "channelcount": "Channel/channelCount.mdx", + "channelexists": "Channel/channelExists.mdx", + "channelid": "Channel/channelID.mdx", + "channelname": "Channel/channelName.mdx", + "channelnsfw": "Text/channelNSFW.mdx", + "channelpermissionsfor": "Channel/channelPermissionsFor.mdx", + "channelsendmessage": "Message/channelSendMessage.mdx", + "channeltopic": "Channel/channelTopic.mdx", + "channeltype": "Channel/channelType.mdx", + "channelused": "Channel/channelUsed.mdx", + "charcount": "Text/charCount.mdx", + "checkcondition": "Text/Condition/checkCondition.mdx", + "checkcontains": "Text/checkContains.mdx", + "clear": "Channel/clear.mdx", + "clearcooldown": "Cooldown/clearCoolDown.mdx", + "clearreaction": "Message/clearReaction.mdx", + "clearreactions": "Message/clearReactions.mdx", + "clientid": "Bot/clientID.mdx", + "clonechannel": "Channel/cloneChannel.mdx", + "closepost": "Threads/closePost.mdx", + "closeticket": "Channel/closeTicket.mdx", + "color": "Text/Embed/color.mdx", + "colorrole": "Role/colorRole.mdx", + "commandcode": "Useful/commandCode.mdx", + "commandname": "Interaction/commandName.mdx", + "concattextsplit": "Text/textSplit/concatTextSplit.mdx", + "conditional": "Text/Condition/conditional.mdx", + "cooldown": "Cooldown/cooldown.mdx", + "cpu": "Bot/cpu.mdx", + "createautomodkeyword": "Server/createAutomodKeyword.mdx", + "createchannel": "Channel/createChannel.mdx", + "createforum": "Channel/createForum.mdx", + "createobject": "Text/Object/createObject.mdx", + "createpost": "Threads/createPost.mdx", + "createrole": "Role/createRole.mdx", + "createsticker": "Stickers/createSticker.mdx", + "createthread": "Threads/createThread.mdx", + "createwebhook": "Message/createWebhook.mdx", + "creationdate": "Date/creationDate.mdx", + "customemoji": "Text/customEmoji.mdx", + "datestamp": "Date/dateStamp.mdx", + "datetotime": "Date/dateToTime.mdx", + "day": "Date/day.mdx", + "deleteautomod": "Server/deleteAutomod.mdx", + "deletechannels": "Channel/deleteChannels.mdx", + "deletechannelvar": "Variables/deleteChannelVar.mdx", + "deletecommand": "Message/deleteCommand.mdx", + "deleteemojis": "Server/deleteEmojis.mdx", + "deletein": "Message/deleteIn.mdx", + "deletemessage": "Message/deleteMessage.mdx", + "deletemessagevar": "Variables/deleteMessageVar.mdx", + "deletepost": "Threads/deletePost.mdx", + "deleteposts": "Threads/deletePosts.mdx", + "deleteroles": "Role/deleteRoles.mdx", + "deleteservervar": "Variables/deleteServerVar.mdx", + "deletesticker": "Stickers/deleteSticker.mdx", + "deletethreads": "Threads/deleteThreads.mdx", + "deletetrigger": "Useful/deleteTrigger.mdx", + "deleteuservar": "Variables/deleteUserVar.mdx", + "deletewebhook": "Message/deleteWebhook.mdx", + "deletewebhookmessage": "Message/deleteWebhookMessage.mdx", + "description": "Text/Embed/description.mdx", + "disablebutton": "Text/Components/disableButton.mdx", + "disablebuttons": "Text/Components/disableButtons.mdx", + "disablechannelmentions": "Message/disableChannelMentions.mdx", + "disableeveryonementions": "Message/disableEveryoneMentions.mdx", + "disablementions": "Text/disableMentions.mdx", + "disablemenu": "Text/Components/disableMenu.mdx", + "disablerolementions": "Message/disableRoleMentions.mdx", + "discriminator": "Member/discriminator.mdx", + "displayname": "Member/displayName.mdx", + "divide": "Text/Math/divide.mdx", + "dm": "Message/DM.mdx", + "editautomodkeyword": "Server/editAutomodKeyword.mdx", + "editbutton": "Text/Components/editButton.mdx", + "editchannel": "Channel/editChannel.mdx", + "editembed": "Message/editEmbed.mdx", + "editforum": "Channel/editForum.mdx", + "editin": "Message/editIn.mdx", + "editmenu": "Text/Components/editMenu.mdx", + "editmessage": "Message/editMessage.mdx", + "editpost": "Threads/editPost.mdx", + "editsticker": "Stickers/editSticker.mdx", + "edittextsplitelement": "Text/textSplit/editTextSplitElement.mdx", + "editthread": "Threads/editThread.mdx", + "edittrigger": "Useful/editTrigger.mdx", + "editwebhookmessage": "Message/editWebhookMessage.mdx", + "else": "Text/Condition/else.mdx", + "elseif": "Text/Condition/elseif.mdx", + "emoji": "Message/emoji.mdx", + "emojicount": "Server/emojiCount.mdx", + "emojiexists": "Server/emojiExists.mdx", + "emojiid": "Message/emojiID.mdx", + "emojiname": "Message/emojiName.mdx", + "emojisfrommessage": "Message/emojisFromMessage.mdx", + "emojitostring": "Message/emojiToString.mdx", + "enablebuttons": "Text/Components/enableButtons.mdx", + "enableeveryonementions": "Message/enableEveryoneMentions.mdx", + "enablemenu": "Text/Components/enableMenu.mdx", + "endelseif": "Text/Condition/endelseif.mdx", + "endforeach": "Useful/endForEach.mdx", + "endfunction": "Useful/endFunction.mdx", + "endif": "Text/Condition/endIf.mdx", + "endtimeout": "Useful/endTimeout.mdx", + "error": "Useful/error.mdx", + "eventchannelid": "Channel/eventChannelID.mdx", + "eventchannelparent": "Channel/eventChannelParent.mdx", + "eventcreate": "Events/eventCreate.mdx", + "eventdelete": "Events/eventDelete.mdx", + "eventedit": "Events/eventEdit.mdx", + "eventend": "Events/eventEnd.mdx", + "eventexists": "Events/eventExists.mdx", + "eventnewnickname": "Member/eventNewNickname.mdx", + "eventoldnickname": "Member/eventOldNickname.mdx", + "eventselected": "Text/Components/eventSelected.mdx", + "eventstart": "Events/eventStart.mdx", + "eventtargetid": "Text/Components/eventTargetID.mdx", + "example": "Text/Embed/example.mdx", + "executiontime": "Bot/executionTime.mdx", + "filtermessage": "Text/filterMessage.mdx", + "filtermessagewords": "Text/filterMessageWords.mdx", + "findchannel": "Channel/findChannel.mdx", + "findchars": "Text/findChars.mdx", + "findmember": "Member/findMember.mdx", + "findnumbers": "Text/findNumbers.mdx", + "findrole": "Role/findRole.mdx", + "findserverchannel": "Channel/findServerChannel.mdx", + "findspecialchars": "Text/findSpecialChars.mdx", + "findtextsplitindex": "Text/textSplit/findTextSplitIndex.mdx", + "floor": "Text/Math/floor.mdx", + "footer": "Text/Embed/footer.mdx", + "foreach": "Useful/forEach.mdx", + "formatdate": "Date/formatDate.mdx", + "forwardmessage": "Message/forwardMessage.mdx", + "function": "Useful/function.mdx", + "get": "Variables/get.mdx", + "getbotactivity": "Bot/getBotActivity.mdx", + "getbotinvite": "Bot/getBotInvite.mdx", + "getchannelmessages": "Channel/getChannelMessages.mdx", + "getchannelslowmode": "Channel/getChannelSlowmode.mdx", + "getchannelvar": "Variables/getChannelVar.mdx", + "getcommandoption": "Message/getCommandOption.mdx", + "getcooldowntime": "Cooldown/getCooldownTime.mdx", + "getembed": "Message/getEmbed.mdx", + "geteventinfo": "Events/getEventInfo.mdx", + "geteventusers": "Events/getEventUsers.mdx", + "getinviteinfo": "Server/getInviteInfo.mdx", + "getmessage": "Message/getMessage.mdx", + "getmessagereactions": "Message/getMessageReactions.mdx", + "getmessagevar": "Variables/getMessageVar.mdx", + "getobject": "Text/Object/getObject.mdx", + "getobjectkeys": "Text/Object/getObjectKeys.mdx", + "getobjectproperty": "Text/Object/getObjectProperty.mdx", + "getoption": "Interaction/getOption.mdx", + "getreactioncount": "Message/getReactionCount.mdx", + "getreactions": "Message/getReactions.mdx", + "getrolecolor": "Role/getRoleColor.mdx", + "getserverinvite": "Server/getServerInvite.mdx", + "getservervar": "Variables/getServerVar.mdx", + "gettextsplitlength": "Text/textSplit/getTextSplitLength.mdx", + "getthreads": "Threads/getThreads.mdx", + "gettoken": "Useful/getToken.mdx", + "gettrigger": "Useful/getTrigger.mdx", + "getuserbadges": "Member/getUserBadges.mdx", + "getuservar": "Variables/getUserVar.mdx", + "giveroles": "Role/giveRoles.mdx", + "globalname": "Member/globalName.mdx", + "guild": "Server/guild.mdx", + "guildevents": "Events/guildEvents.mdx", + "guildroles": "Role/guildRoles.mdx", + "hasanyperm": "Member/hasAnyPerm.mdx", + "hasanyrole": "Member/hasAnyRole.mdx", + "hasembeds": "Message/hasEmbeds.mdx", + "hasperms": "Member/hasPerms.mdx", + "hasrole": "Role/hasRole.mdx", + "hasroles": "Member/hasRoles.mdx", + "highestrole": "Role/highestRole.mdx", + "highestserverrole": "Role/highestServerRole.mdx", + "hour": "Date/hour.mdx", + "httprequest": "Request/httpRequest.mdx", + "httprequestheader": "Request/httpRequestHeader.mdx", + "httprequeststatus": "Request/httpRequestStatus.mdx", + "humanizems": "Date/humanizeMS.mdx", + "hyperlink": "Message/hyperlink.mdx", + "if": "Text/Condition/if.mdx", + "ignoreerrors": "Useful/ignoreErrors.mdx", + "image": "Text/Embed/image.mdx", + "imageborderrad": "Image/imageBorderRad.mdx", + "imagecreate": "Image/imageCreate.mdx", + "imagecrop": "Image/imageCrop.mdx", + "imagedraw": "Image/imageDraw.mdx", + "imagedrawback": "Image/imageDrawBack.mdx", + "imagefill": "Image/imageFill.mdx", + "imageheight": "Image/imageHeight.mdx", + "imagelineheight": "Image/imageLineHeight.mdx", + "imageloademoji": "Image/imageLoadEmoji.mdx", + "imageloadfromurl": "Image/imageLoadFromURL.mdx", + "imageoutput": "Image/imageOutput.mdx", + "imagepositionbase": "Image/imagePositionBase.mdx", + "imagesetopacity": "Image/imageSetOpacity.mdx", + "imagestroke": "Image/imageStroke.mdx", + "imagestrokewidth": "Image/imageStrokeWidth.mdx", + "imagetextalign": "Image/imageTextAlign.mdx", + "imagetextbaseline": "Image/imageTextBaseline.mdx", + "imagetextcolor": "Image/imageTextColor.mdx", + "imagetextfill": "Image/imageTextFill.mdx", + "imagetextfillcolor": "Image/imageTextFillColor.mdx", + "imagetextsize": "Image/imageTextSize.mdx", + "imagetextstroke": "Image/imageTextStroke.mdx", + "imagetextstrokecolor": "Image/imageTextStrokeColor.mdx", + "imagetextweight": "Image/imageTextWeight.mdx", + "imageusefont": "Image/imageUseFont.mdx", + "imagewidth": "Image/imageWidth.mdx", + "includelibrary": "Useful/includeLibrary.mdx", + "increasechannelvar": "Variables/increaseChannelVar.mdx", + "increaseservervar": "Variables/increaseServerVar.mdx", + "increaseuservar": "Variables/increaseUserVar.mdx", + "indexof": "Text/indexOf.mdx", + "initvar": "Variables/initVar.mdx", + "interactiondelete": "Interaction/interactionDelete.mdx", + "interactionedit": "Interaction/interactionEdit.mdx", + "interactionid": "Interaction/interactionId.mdx", + "interactionreply": "Interaction/interactionReply.mdx", + "isbanned": "Member/isBanned.mdx", + "isboosting": "Text/isandhas/isBoosting.mdx", + "isbot": "Text/isandhas/isBot.mdx", + "ischannelmention": "Text/isChannelMention.mdx", + "isconnected": "Text/isandhas/isConnected.mdx", + "isdeafened": "Text/isandhas/isDeafened.mdx", + "isemoji": "Text/isandhas/isEmoji.mdx", + "ishoisted": "Text/isandhas/isHoisted.mdx", + "ismanaged": "Text/isandhas/isManaged.mdx", + "ismentionable": "Text/isandhas/isMentionable.mdx", + "ismentioned": "Text/isandhas/isMentioned.mdx", + "ismuted": "Text/isandhas/isMuted.mdx", + "isnumber": "Text/isandhas/isNumber.mdx", + "isstreaming": "Text/isandhas/isStreaming.mdx", + "isticket": "Text/isandhas/isTicket.mdx", + "isuserdmenabled": "Member/isUserDMEnabled.mdx", + "isusermention": "Text/isUserMention.mdx", + "isvalidhex": "Text/isandhas/isValidHex.mdx", + "isvalidinvite": "Text/isandhas/isValidInvite.mdx", + "isvalidlink": "Text/isandhas/isValidLink.mdx", + "isvalidobject": "Text/isandhas/isValidObject.mdx", + "joinsplittext": "Text/textSplit/joinSplitText.mdx", + "jointhreads": "Threads/joinThreads.mdx", + "jsonrequest": "Useful/jsonRequest.mdx", + "kick": "Member/kick.mdx", + "latestmessage": "Channel/latestMessage.mdx", + "leavethreads": "Threads/leaveThreads.mdx", + "let": "Variables/let.mdx", + "lockpost": "Threads/lockPost.mdx", + "lockthread": "Threads/lockThread.mdx", + "lowestrole": "Role/lowestRole.mdx", + "lowestserverrole": "Role/lowestServerRole.mdx", + "math": "Text/Math/math.mdx", + "mathmax": "Text/Math/mathMax.mdx", + "mathmin": "Text/Math/mathMin.mdx", + "maxram": "Bot/maxRam.mdx", + "memberjoinedcode": "Date/memberJoinedCode.mdx", + "memberjoineddate": "Date/memberJoinedDate.mdx", + "memberscount": "Server/membersCount.mdx", + "membersearch": "Member/memberSearch.mdx", + "memberswithstatus": "Member/membersWithStatus.mdx", + "mention": "Member/mention.mdx", + "mentionchannel": "Channel/mentionChannel.mdx", + "mentioned": "Text/mentioned.mdx", + "mentionedchannels": "Text/mentionedChannels.mdx", + "mentionedroles": "Text/mentionedRoles.mdx", + "mentionrole": "Role/mentionRole.mdx", + "mentiontype": "Text/mentionType.mdx", + "menuid": "Text/Components/menuId.mdx", + "message": "Message/message.mdx", + "messageattachment": "Message/messageAttachment.mdx", + "messageexists": "Message/messageExists.mdx", + "messageflags": "Message/messageFlags.mdx", + "messageid": "Message/messageID.mdx", + "messagepublish": "Message/messagePublish.mdx", + "messageslice": "Message/messageSlice.mdx", + "messagestickers": "Stickers/messageStickers.mdx", + "messagetype": "Message/messageType.mdx", + "messagewebhookid": "Message/messageWebhookID.mdx", + "minute": "Date/minute.mdx", + "modal": "Interaction/modal.mdx", + "modalanswer": "Interaction/modalAnswer.mdx", + "modalid": "Interaction/modalID.mdx", + "modifychannelperms": "Channel/modifyChannelPerms.mdx", + "modifyrole": "Role/modifyRole.mdx", + "modifyroleperms": "Role/modifyRolePerms.mdx", + "modifyuserroles": "Role/modifyUserRoles.mdx", + "modifywebhook": "Message/modifyWebhook.mdx", + "modulo": "Text/Math/modulo.mdx", + "month": "Date/month.mdx", + "moveuser": "Member/moveUser.mdx", + "msg": "Message/msg.mdx", + "multi": "Text/Math/multi.mdx", + "muteuser": "Member/muteUser.mdx", + "newticket": "Channel/newTicket.mdx", + "nickname": "Member/nickname.mdx", + "noescapingmessage": "Message/noEscapingMessage.mdx", + "nomentionmessage": "Text/noMentionMessage.mdx", + "numberseparator": "Text/numberSeparator.mdx", + "numtoword": "Text/numToWord.mdx", + "objectcreate": "Text/Object/ObjectCreate.mdx", + "objectget": "Text/Object/ObjectGet.mdx", + "objectincrease": "Text/Object/ObjectIncrease.mdx", + "objectkeyexists": "Text/Object/ObjectKeyExists.mdx", + "objectkeys": "Text/Object/ObjectKeys.mdx", + "objectloop": "Text/Object/ObjectLoop.mdx", + "objectmerge": "Text/Object/ObjectMerge.mdx", + "objectremove": "Text/Object/ObjectRemove.mdx", + "objectrenamekey": "Text/Object/ObjectRenameKey.mdx", + "objectset": "Text/Object/ObjectSet.mdx", + "objectvalues": "Text/Object/ObjectValues.mdx", + "onlybotperms": "Text/only/onlyBotPerms.mdx", + "onlyforcategories": "Text/only/onlyForCategories.mdx", + "onlyforchannels": "Text/only/onlyForChannels.mdx", + "onlyforids": "Text/only/onlyForIDs.mdx", + "onlyforroles": "Text/only/onlyForRoles.mdx", + "onlyif": "Text/only/onlyIf.mdx", + "onlyifmessagecontains": "Text/only/onlyIfMessageContains.mdx", + "onlynsfw": "Text/only/onlyNSFW.mdx", + "onlyperms": "Text/only/onlyPerms.mdx", + "ordinal": "Text/Math/ordinal.mdx", + "ownerid": "Server/ownerID.mdx", + "padleft": "Text/padLeft.mdx", + "padright": "Text/padRight.mdx", + "parsedate": "Date/parseDate.mdx", + "parsetime": "Date/parseTime.mdx", + "ping": "Bot/ping.mdx", + "pinmessage": "Message/pinMessage.mdx", + "pinpost": "Threads/pinPost.mdx", + "poll": "Message/poll.mdx", + "ram": "Bot/ram.mdx", + "random": "Random/random.mdx", + "randomchannelid": "Random/randomChannelID.mdx", + "randommention": "Random/randomMention.mdx", + "randomroleid": "Random/randomRoleID.mdx", + "randomstring": "Random/randomString.mdx", + "randomtext": "Random/randomText.mdx", + "randomtextbiased": "Random/randomTextBiased.mdx", + "randomuserid": "Random/randomUserID.mdx", + "redirecterrors": "Useful/redirectErrors.mdx", + "ref.channel_types": "CodeReferences/ref.channel_types.mdx", + "ref.embed.colors": "CodeReferences/ref.embed.colors.mdx", + "ref.expression": "CodeReferences/ref.expression.mdx", + "ref.imgbuild.position": "CodeReferences/ref.imgbuild.position.mdx", + "ref.imgbuild.size": "CodeReferences/ref.imgbuild.size.mdx", + "ref.message_curl_format": "CodeReferences/ref.message_curl_format.mdx", + "ref.message_types": "CodeReferences/ref.message_types.mdx", + "ref.permissions_list": "CodeReferences/ref.permissions_list.mdx", + "ref.poll_data": "CodeReferences/ref.poll_data.mdx", + "ref.time_format": "CodeReferences/ref.time_format.mdx", + "ref.v2_components": "CodeReferences/ref.v2_components.mdx", + "referencechannelid": "Message/referenceChannelID.mdx", + "referencemessageid": "Message/referenceMessageID.mdx", + "regexcheck": "Text/Regex/regexCheck.mdx", + "regexmatch": "Text/Regex/regexMatch.mdx", + "regexreplace": "Text/Regex/regexReplace.mdx", + "removebutton": "Text/Components/removeButton.mdx", + "removebuttons": "Text/Components/removeButtons.mdx", + "removecontains": "Channel/removeContains.mdx", + "removeembed": "Text/Components/removeEmbed.mdx", + "removemenu": "Text/Components/removeMenu.mdx", + "removesplittextelement": "Text/textSplit/removeSplitTextElement.mdx", + "removetextsplitelement": "Text/textSplit/removeTextSplitElement.mdx", + "removeusersfromthread": "Threads/removeUsersFromThread.mdx", + "repeatmessage": "Text/repeatMessage.mdx", + "replacetext": "Text/replaceText.mdx", + "replacetextwithregex": "Text/Regex/replaceTextWithRegex.mdx", + "reply": "Message/reply.mdx", + "resetrandom": "Random/resetRandom.mdx", + "resetuservar": "Variables/resetUserVar.mdx", + "resolveemojiid": "Server/resolveEmojiID.mdx", + "return": "Useful/return.mdx", + "role": "Role/role.mdx", + "rolecount": "Role/roleCount.mdx", + "roleexists": "Role/roleExists.mdx", + "roleicon": "Role/roleIcon.mdx", + "roleid": "Role/roleID.mdx", + "rolememberscount": "Role/roleMembersCount.mdx", + "rolename": "Role/roleName.mdx", + "roleperms": "Role/rolePerms.mdx", + "roleposition": "Role/rolePosition.mdx", + "round": "Text/Math/round.mdx", + "roundtenth": "Text/Math/roundTenth.mdx", + "second": "Date/second.mdx", + "securitypause": "Server/securityPause.mdx", + "selectmenu": "Text/Components/selectMenu.mdx", + "sendcrosspostingmessage": "Message/sendCrosspostingMessage.mdx", + "senddm": "Message/sendDM.mdx", + "sendmessage": "Message/sendMessage.mdx", + "sendwebhook": "Message/sendWebhook.mdx", + "sentmessageid": "Message/sentMessageID.mdx", + "seq": "Useful/seq.mdx", + "serverbanner": "Server/serverBanner.mdx", + "serverboostcount": "Server/serverBoostCount.mdx", + "serverboostlevel": "Server/serverBoostLevel.mdx", + "serverchannels": "Channel/serverChannels.mdx", + "servercontentfilter": "Server/serverContentFilter.mdx", + "servercooldown": "Cooldown/serverCooldown.mdx", + "servercount": "Bot/serverCount.mdx", + "serverdescription": "Server/serverDescription.mdx", + "serveremojis": "Server/serverEmojis.mdx", + "serverfeatures": "Server/serverFeatures.mdx", + "servericon": "Server/serverIcon.mdx", + "servername": "Server/serverName.mdx", + "serverregion": "Server/serverRegion.mdx", + "serversplash": "Server/serverSplash.mdx", + "serverstickers": "Stickers/serverStickers.mdx", + "serververificationlevel": "Server/serverVerificationLevel.mdx", + "setbotactivity": "Bot/setBotActivity.mdx", + "setchanneltopic": "Channel/setChannelTopic.mdx", + "setchannelvar": "Variables/setChannelVar.mdx", + "setguildicon": "Server/setGuildIcon.mdx", + "setguildname": "Server/setGuildName.mdx", + "setmessagevar": "Variables/setMessageVar.mdx", + "setroles": "Role/setRoles.mdx", + "setservervar": "Variables/setServerVar.mdx", + "settimeout": "Useful/setTimeout.mdx", + "setuservar": "Variables/setUserVar.mdx", + "slowmode": "Channel/slowmode.mdx", + "specialcharacters": "CodeReferences/specialCharacters.mdx", + "splicetextjoin": "Text/textSplit/spliceTextJoin.mdx", + "splittext": "Text/textSplit/splitText.mdx", + "spread": "Useful/spread.mdx", + "status": "Member/status.mdx", + "sticker": "Stickers/sticker.mdx", + "stop": "Useful/stop.mdx", + "stringendswith": "Text/stringEndsWith.mdx", + "stringstartswith": "Text/stringStartsWith.mdx", + "sub": "Text/Math/sub.mdx", + "sum": "Text/Math/sum.mdx", + "suppresserrors": "Useful/suppressErrors.mdx", + "systemchannelid": "Server/systemChannelID.mdx", + "takeroles": "Role/takeRoles.mdx", + "textlength": "Text/textLength.mdx", + "textshuffle": "Text/textShuffle.mdx", + "textslice": "Text/textSlice.mdx", + "textsplit": "Text/textSplit/textSplit.mdx", + "texttrim": "Text/textTrim.mdx", + "thread": "Threads/thread.mdx", + "thumbnail": "Text/Embed/thumbnail.mdx", + "timeoutaction": "Timeout/timeoutAction.mdx", + "timeoutby": "Timeout/timeoutBy.mdx", + "timeoutreason": "Timeout/timeoutReason.mdx", + "timestamp": "Date/timeStamp.mdx", + "timetodate": "Date/timeToDate.mdx", + "timezone": "Date/timezone.mdx", + "title": "Text/Embed/title.mdx", + "toggleroles": "Role/toggleRoles.mdx", + "tolocaleuppercase": "Text/toLocaleUpperCase.mdx", + "tolowercase": "Text/toLowercase.mdx", + "touppercase": "Text/toUppercase.mdx", + "transcriptchannel": "Channel/transcriptChannel.mdx", + "triggerexists": "Useful/triggerExists.mdx", + "truncate": "Text/Math/truncate.mdx", + "unban": "Member/unban.mdx", + "unpinmessage": "Message/unpinMessage.mdx", + "uptime": "Bot/uptime.mdx", + "upvotereferraluserid": "Member/upvoteReferralUserID.mdx", + "upvotetime": "Date/upvoteTime.mdx", + "uri": "Text/uri.mdx", + "usechannel": "Channel/useChannel.mdx", + "user": "Member/user.mdx", + "useravatar": "Member/userAvatar.mdx", + "userbanner": "Member/userBanner.mdx", + "userconnectedvc": "Member/userConnectedVC.mdx", + "userexists": "Member/userExists.mdx", + "usergettimeout": "Timeout/userGetTimeout.mdx", + "userid": "Member/userID.mdx", + "userleaderboard": "Variables/userLeaderboard.mdx", + "username": "Member/username.mdx", + "userperms": "Member/userPerms.mdx", + "userreacted": "Member/userReacted.mdx", + "userremovetimeout": "Timeout/userRemoveTimeout.mdx", + "userrolecolor": "Member/userRoleColor.mdx", + "userroles": "Member/userRoles.mdx", + "usersbanned": "Member/usersBanned.mdx", + "usersettimeout": "Timeout/userSetTimeout.mdx", + "usersinchannel": "Member/usersInChannel.mdx", + "userstyping": "Member/usersTyping.mdx", + "userswithrole": "Member/usersWithRole.mdx", + "usertag": "Member/userTag.mdx", + "uservarrank": "Variables/userVarRank.mdx", + "vcafter": "Channel/vcAfter.mdx", + "vcbefore": "Channel/vcBefore.mdx", + "viewchannelvars": "Variables/viewChannelVars.mdx", + "viewservervars": "Variables/viewServerVars.mdx", + "viewuservars": "Variables/viewUserVars.mdx", + "voicechannelid": "Channel/voiceChannelID.mdx", + "void": "Text/void.mdx", + "wait": "Useful/wait.mdx", + "webhookexists": "Message/webhookExists.mdx", + "year": "Date/year.mdx" +} diff --git a/guide/notUsed/perms&privacy.md b/guide/notUsed/perms&privacy.md deleted file mode 100644 index 444d4e76..00000000 --- a/guide/notUsed/perms&privacy.md +++ /dev/null @@ -1,7 +0,0 @@ -# Terms Of Service, Privacy Policy - -## Terms Of Service (ToS) -[Read here](../Legal/tos.md) - -# Privacy Policy -[Read here](../Legal/policy.md) \ No newline at end of file diff --git a/lib/cclang.ts b/lib/cclang.ts new file mode 100644 index 00000000..35ba92d1 --- /dev/null +++ b/lib/cclang.ts @@ -0,0 +1,148 @@ +import type { LanguageRegistration } from "shiki"; +import githubDark from "shiki/themes/github-dark.mjs"; +import githubLight from "shiki/themes/github-light.mjs"; + +export const cclang: LanguageRegistration = { + name: "cc", + scopeName: "source.cclang", + repository: {}, + patterns: [ + { + name: "keyword.function.cclang", + match: "\\$[\\w\\d_]+", + }, + { + name: "comment.line.double-slash", + match: "//.*$", + }, + { + name: "comment.block", + begin: "/\\*", + end: "\\*/", + }, + { + name: "keyword.important.cclang", + match: "[\\[\\];]", + }, + { + name: "keyword.digits.cclang", + match: "(?]=?|!==?|===?)", + }, + { + name: "keyword.keys.cclang", + match: "(?<={[\\w\\d_]*)[:=]", + }, + { + name: "keyword.tags.cclang", + match: "#[A-Z]{2,}#", + }, + ], +}; + +export const cc_dark = { + ...githubDark, + name: "cc-dark", + tokenColors: [ + { + scope: ["keyword.function.cclang"], + settings: { + foreground: "rgb(133, 255, 255)", + }, + }, + { + scope: ["keyword.important.cclang"], + settings: { + foreground: "rgb(255, 66, 129)", + }, + }, + { + scope: ["keyword.digits.cclang"], + settings: { + foreground: "rgb(78, 190, 255)", + }, + }, + { + scope: ["keyword.curl.cclang"], + settings: { + foreground: "rgb(214, 133, 255)", + }, + }, + { + scope: ["keyword.condition.cclang"], + settings: { + foreground: "rgb(255, 165, 0)", + }, + }, + { + scope: ["keyword.keys.cclang"], + settings: { + foreground: "rgb(240, 128, 128)", + }, + }, + { + scope: ["keyword.tags.cclang"], + settings: { + foreground: "rgb(174, 220, 174)", + }, + }, + ...(githubDark.tokenColors ?? []), + ], +}; + +export const cc_light = { + ...githubLight, + name: "cc-light", + tokenColors: [ + { + scope: ["keyword.function.cclang"], + settings: { + foreground: "rgb(53, 175, 255)", + }, + }, + { + scope: ["keyword.important.cclang"], + settings: { + foreground: "rgb(255, 66, 129)", + }, + }, + { + scope: ["keyword.digits.cclang"], + settings: { + foreground: "rgb(78, 190, 255)", + }, + }, + { + scope: ["keyword.curl.cclang"], + settings: { + foreground: "rgb(194, 113, 225)", + }, + }, + { + scope: ["keyword.condition.cclang"], + settings: { + foreground: "rgb(255, 165, 0)", + }, + }, + { + scope: ["keyword.keys.cclang"], + settings: { + foreground: "rgb(240, 128, 128)", + }, + }, + { + scope: ["keyword.tags.cclang"], + settings: { + foreground: "rgb(174, 220, 174)", + }, + }, + ...(githubLight.tokenColors ?? []), + ], +}; diff --git a/lib/cn.ts b/lib/cn.ts new file mode 100644 index 00000000..241ffb37 --- /dev/null +++ b/lib/cn.ts @@ -0,0 +1 @@ +export { cn } from 'cnfast'; diff --git a/lib/layout.shared.tsx b/lib/layout.shared.tsx new file mode 100644 index 00000000..f730c24c --- /dev/null +++ b/lib/layout.shared.tsx @@ -0,0 +1,39 @@ +import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; +import { appName, gitConfig } from "./shared"; + +export function baseOptions(): BaseLayoutProps { + return { + nav: { + title: ( + <> + + {appName} + + ), + }, + links: [ + { + text: "Dashboard", + url: "https://ccommandbot.com/dashboard", + external: true, + }, + { + text: "Invite The Bot", + url: "https://ccommandbot.com/add", + external: true, + }, + { + text: "Join Support Server", + url: "https://ccommandbot.com/join", + external: true, + }, + ], + githubUrl: `https://github.com/${gitConfig.user}/${gitConfig.repo}`, + }; +} diff --git a/lib/remark/cooldowns.ts b/lib/remark/cooldowns.ts new file mode 100644 index 00000000..f635cf30 --- /dev/null +++ b/lib/remark/cooldowns.ts @@ -0,0 +1,114 @@ +import path from 'node:path'; +import type { Root, RootContent, PhrasingContent } from 'mdast'; +import cooldowns from '../../data/cooldowns.json'; + +type Cooldown = { + time: number; + per: string; + scope: string; + hardCooldown?: boolean; +}; + +const table = cooldowns as Record; + +function formatDuration(ms: number): string { + if (ms < 1) return `${(ms * 1000).toFixed(ms >= 0.1 ? 0 : 1)} μs`; + if (ms < 1000) return `${ms} ms`; + + const units: [string, number][] = [ + ['day', 86400000], + ['hour', 3600000], + ['minute', 60000], + ['second', 1000], + ]; + + const parts: string[] = []; + let rest = ms; + for (const [name, value] of units) { + const amount = Math.floor(rest / value); + if (!amount) continue; + parts.push(`${amount} ${name}${amount !== 1 ? 's' : ''}`); + rest %= value; + if (parts.length === 2) break; + } + return parts.join(' '); +} + +const text = (value: string): PhrasingContent => ({ type: 'text', value }); +const bullet = (label: string, ...rest: PhrasingContent[]): RootContent => + ({ + type: 'listItem', + spread: false, + children: [ + { + type: 'paragraph', + children: [{ type: 'strong', children: [text(label)] }, text(' '), ...rest], + }, + ], + }) as RootContent; + +/** + * Port of the VuePress `cooldownAddition` replacer: appends a generated + * "Function Cooldown" section to any function page listed in + * `data/cooldowns.json`. + */ +export function remarkCooldowns() { + return (tree: Root, file: { path?: string }) => { + if (!file.path) return; + + const fn = '$' + path.basename(file.path).replace(/\.mdx?$/, ''); + const cooldown = table[fn.toLowerCase()]; + if (!cooldown) return; + + tree.children.push( + { type: 'heading', depth: 2, children: [text('Function Cooldown')] }, + { + type: 'paragraph', + children: [ + text('This function has built-in cooldown. Why? Read more about cooldowns '), + { + type: 'link', + url: '/Other/ratelimits', + children: [text('here')], + }, + text('.'), + ], + }, + { + type: 'list', + ordered: false, + spread: false, + children: [ + bullet('Cooldown:', text(formatDuration(cooldown.time))), + bullet('Tracked By:', text(cooldown.per)), + bullet('Type:', { type: 'inlineCode', value: cooldown.scope }), + ], + } as RootContent, + { + type: 'paragraph', + children: [ + text('Functions with the same type share cooldowns based on the same '), + { type: 'inlineCode', value: 'Tracked By' }, + text(' value.'), + ], + }, + ); + + if (cooldown.hardCooldown) { + tree.children.push({ + type: 'mdxJsxFlowElement', + name: 'Callout', + attributes: [ + { type: 'mdxJsxAttribute', name: 'type', value: 'warn' }, + { type: 'mdxJsxAttribute', name: 'title', value: 'Warning' }, + ], + children: [ + { + type: 'paragraph', + children: [text('This cooldown cannot be bypassed by Tier 3+ bots.')], + }, + ], + } as unknown as RootContent); + } + }; +} diff --git a/lib/remark/function-links.ts b/lib/remark/function-links.ts new file mode 100644 index 00000000..27004fcd --- /dev/null +++ b/lib/remark/function-links.ts @@ -0,0 +1,91 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import type { Root, InlineCode, Parent } from 'mdast'; + +const CONTENT = path.join(process.cwd(), 'content/docs'); + +/** lowercased function name -> site route, e.g. `sendmessage` -> `/Message/sendMessage` */ +let routes: Map | null = null; + +function buildRoutes() { + const map = new Map(); + + const walk = (dir: string) => { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + walk(full); + continue; + } + if (!entry.name.endsWith('.mdx')) continue; + + const rel = path.relative(CONTENT, full).split(path.sep).join('/'); + const isFunction = rel.startsWith('(functions)/'); + const url = '/' + rel.replace(/\.mdx$/, '').replace(/^\(functions\)\//, ''); + const key = path.basename(entry.name, '.mdx').toLowerCase(); + + /* + * Six names exist in two places (e.g. $modal is both a function and a + * trigger page). The old scan let the last match win, which pointed + * `$modal` at /Trigger/modal instead of the function — always prefer the + * function page, and otherwise keep the first match. + */ + const existing = map.get(key); + if (!existing || (isFunction && !existing.isFunction)) { + map.set(key, { url, isFunction }); + } + } + }; + + walk(CONTENT); + return new Map([...map].map(([key, { url }]) => [key, url])); +} + +/** + * Port of the VuePress `functionLinkReference` replacer: turns an inline + * `` `$someFunction` `` into a link to that function's page. + * + * Unlike the original this skips self-references, which previously produced a + * link from a page to itself. + */ +export function remarkFunctionLinks() { + return (tree: Root, file: { path?: string }) => { + routes ??= buildRoutes(); + + const self = file.path ? path.basename(file.path, '.mdx').toLowerCase() : null; + + const visit = (node: Parent) => { + for (let i = 0; i < node.children.length; i++) { + const child = node.children[i]; + + if (child.type === 'inlineCode') { + const match = (child as InlineCode).value.match(/^\$([A-Za-z]+)$/); + if (!match) continue; + + const name = match[1].toLowerCase(); + if (name === self) continue; + + const url = routes!.get(name); + if (!url) continue; + + node.children[i] = { + type: 'link', + url, + children: [child], + } as never; + continue; + } + + /* + * Skip links and code blocks (no nested anchors, no rewriting source), + * and skip headings: Fumadocs wraps every heading in its own anchor, so + * a link inside one is invalid HTML and breaks hydration. + */ + if (child.type === 'link' || child.type === 'code' || child.type === 'heading') continue; + if ('children' in child) visit(child as Parent); + } + }; + + visit(tree); + }; +} diff --git a/lib/remark/images.ts b/lib/remark/images.ts new file mode 100644 index 00000000..0c8b595b --- /dev/null +++ b/lib/remark/images.ts @@ -0,0 +1,50 @@ +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; +import type { Root, Image, Parent } from 'mdast'; + +const CACHE_DIR = path.join(process.cwd(), 'public/images'); + +/** + * Must stay byte-identical to the old VuePress `imageReplacement` helper: the + * cache in public/images is filled by a separate process using that naming, so + * the extension is taken from the raw URL (query string included) rather than + * from the parsed pathname. + */ +function hashedName(url: string) { + const ext = path.extname(url); + return crypto.createHash('sha256').update(url).digest('hex') + ext; +} + +/** + * Port of the VuePress `imageReplacement` replacer: swaps a remote image URL + * for a locally cached copy at `public/images/.`, when one has + * been downloaded. Falls back to the remote URL when it hasn't. + */ +export function remarkCachedImages() { + return (tree: Root) => { + const visit = (node: Parent) => { + for (const child of node.children) { + if (child.type === 'image') { + const image = child as Image; + if (!/^https?:\/\//.test(image.url)) continue; + + let name: string; + try { + name = hashedName(image.url); + } catch { + continue; + } + + if (fs.existsSync(path.join(CACHE_DIR, name))) { + image.url = `/images/${name}`; + } + continue; + } + if ('children' in child) visit(child as Parent); + } + }; + + visit(tree); + }; +} diff --git a/lib/shared.ts b/lib/shared.ts new file mode 100644 index 00000000..c69bc5e8 --- /dev/null +++ b/lib/shared.ts @@ -0,0 +1,13 @@ +export const appName = "Custom Command"; +export const appDescription = "Custom Command Bot's Documentation"; +export const siteUrl = "https://doc.ccommandbot.com"; +export const socialImage = `${siteUrl}/bot-profile.png`; + +export const docsRoute = "/"; +export const docsContentRoute = "/llms.mdx"; + +export const gitConfig = { + user: "raspdevpy", + repo: "ccdoc", + branch: "main", +}; diff --git a/lib/source.ts b/lib/source.ts new file mode 100644 index 00000000..166ec8b1 --- /dev/null +++ b/lib/source.ts @@ -0,0 +1,44 @@ +import { loader } from "fumadocs-core/source"; +import { docsContentRoute, docsRoute } from "./shared"; +import { defineDocs } from "fumadocs-mdx/macro"; +import { metaSchema, pageSchema } from "fumadocs-core/source/schema"; + +const docs = defineDocs({ + dir: "content/docs", + docs: { + schema: pageSchema, + postprocess: { + includeProcessedMarkdown: true, + }, + }, + meta: { + schema: metaSchema, + }, +}); + +export const source = loader({ + baseUrl: docsRoute, + source: docs.toFumadocsSource(), + plugins: [], +}); + +export function getPageMarkdownUrl(page: (typeof source)["$inferPage"]) { + const segments = [...page.slugs, "content.md"]; + + return { + segments, + url: + "/" + + [page.locale, ...docsContentRoute.split("/"), ...segments] + .filter(Boolean) + .join("/"), + }; +} + +export async function getLLMText(page: (typeof source)["$inferPage"]) { + const processed = await page.data.getText("processed"); + + return `# ${page.data.title} (${page.url}) + +${processed}`; +} diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 00000000..aa0f2c72 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,16 @@ +import { createMDX } from "fumadocs-mdx/next"; +import os from "node:os"; + +const withMDX = createMDX(); + +/** @type {import("next").NextConfig} */ +const config = { + output: "export", + reactStrictMode: true, + images: { unoptimized: true }, + experimental: { + ...(process.env.USE_ALL_CPU == 'true'?{cpus: os.cpus().length}:{}) + }, +}; + +export default withMDX(config); diff --git a/nginx.conf b/nginx.conf index a6e75bc5..2f63eb87 100644 --- a/nginx.conf +++ b/nginx.conf @@ -5,6 +5,31 @@ server { root /usr/share/nginx/html; index index.html; + # Fumadocs inlines the navigation tree and the RSC payload into every page, + # so pages are ~290 KB raw but ~27 KB gzipped. The search index is 8.6 MB + # raw / 1.4 MB gzipped. Serving these uncompressed is not viable. + gzip on; + gzip_comp_level 6; + gzip_min_length 1024; + gzip_vary on; + gzip_proxied any; + gzip_types + text/plain + text/css + text/markdown + application/json + application/javascript + application/octet-stream + image/svg+xml; + # text/html is always compressed by nginx and must not be listed here + + # Serve the home page directly. Without this, the `index index.html` + # fallback below rewrites "/" to "/index.html", which the redirect rule + # then bounces to "/index". + location = / { + try_files /index.html =404; + } + location ~ ^(.+)\.html$ { return 301 $1; } @@ -12,4 +37,4 @@ server { location / { try_files $uri $uri.html $uri/ =404; } -} \ No newline at end of file +} diff --git a/old b/old deleted file mode 160000 index c77a347f..00000000 --- a/old +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c77a347f975674b5599726c57d5e4ae07d2fd17b diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 68463e6e..00000000 --- a/package-lock.json +++ /dev/null @@ -1,5664 +0,0 @@ -{ - "name": "guide", - "version": "3.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "guide", - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "@discord-message-components/vue": "^0.2.1", - "@vueuse/core": "^14.4.0", - "cheerio": "^1.0.0-rc.10", - "gray-matter": "^4.0.3", - "vuepress-plugin-remove-html-extension": "^1.26.0" - }, - "devDependencies": { - "@vuepress/bundler-vite": "^2.0.0-rc.31", - "@vuepress/plugin-container": "^2.0.0-rc.28", - "@vuepress/plugin-search": "^2.0.0-rc.131", - "@vuepress/theme-default": "^2.0.0-rc.132", - "sass-embedded": "^1.100.0", - "vuepress": "^2.0.0-rc.31" - } - }, - "node_modules/@babel/generator": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", - "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^8.0.0", - "@babel/types": "^8.0.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "@types/jsesc": "^2.5.0", - "jsesc": "^3.0.2" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/helper-string-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", - "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/parser": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.4.tgz", - "integrity": "sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^8.0.4" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/types": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", - "integrity": "sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^8.0.0", - "@babel/helper-validator-identifier": "^8.0.4" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bufbuild/protobuf": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.13.0.tgz", - "integrity": "sha512-acq7c49vxfm1ggJ95P70TX7ABDM0vxr1SYD3BB0o0jnBLB4OAqeHyKuN+cD3w80gXEDQ2zxHpR6CUeA+O/aU9g==", - "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/@discord-message-components/core": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@discord-message-components/core/-/core-0.2.1.tgz", - "integrity": "sha512-oPxBpq5vS7yLYvfMcHpCt1JVcGuRtnksPsJoiAmtmWDOeiO83BWfWvC1Xhvb2B6gNpg/H6+y6XuX3FhuHORJfA==", - "dependencies": { - "@discord-message-components/markdown": "^0.2.0", - "color-rgba": "^2.2.3" - } - }, - "node_modules/@discord-message-components/markdown": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@discord-message-components/markdown/-/markdown-0.2.0.tgz", - "integrity": "sha512-Av+Q6rUNTtYqKI0NqkcPDNoYv2U7YcWNQmAEDU1JMR7lZOoz5R/iSGV1TwAs6uoYNawDovBECiEQgIDUxKKPBg==", - "dependencies": { - "simple-markdown": "^0.7.3" - } - }, - "node_modules/@discord-message-components/vue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@discord-message-components/vue/-/vue-0.2.1.tgz", - "integrity": "sha512-BLs6JshamjKh28f9boWIDMZ/BqWqLfg9wUUGxE3PqnMaomqKgs1eeWMKff/20Ie1cBJ6vYSYCxxxQUsw97SptQ==", - "dependencies": { - "@discord-message-components/core": "^0.2.1" - }, - "peerDependencies": { - "vue": "^3.0.6" - } - }, - "node_modules/@emnapi/core": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", - "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", - "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", - "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mdit-vue/plugin-component": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-3.0.2.tgz", - "integrity": "sha512-Fu53MajrZMOAjOIPGMTdTXgHLgGU9KwTqKtYc6WNYtFZNKw04euSfJ/zFg8eBY/2MlciVngkF7Gyc2IL7e8Bsw==", - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/plugin-frontmatter": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-3.0.2.tgz", - "integrity": "sha512-QKKgIva31YtqHgSAz7S7hRcL7cHXiqdog4wxTfxeQCHo+9IP4Oi5/r1Y5E93nTPccpadDWzAwr3A0F+kAEnsVQ==", - "license": "MIT", - "dependencies": { - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "gray-matter": "^4.0.3", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/plugin-headers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-3.0.2.tgz", - "integrity": "sha512-Z3PpDdwBTO5jlW2r617tQibkwtCc5unTnj/Ew1SCxTQaXjtKgwP9WngdSN+xxriISHoNOYzwpoUw/1CW8ntibA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/shared": "3.0.2", - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/plugin-sfc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-3.0.2.tgz", - "integrity": "sha512-dhxIrCGu5Nd4Cgo9JJHLjdNy2lMEv+LpimetBHDSeEEJxJBC4TPN0Cljn+3/nV1uJdGyw33UZA86PGdgt1LsoA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/plugin-title": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-3.0.2.tgz", - "integrity": "sha512-KTDP7s68eKTwy4iYp5UauQuVJf+tDMdJZMO6K4feWYS8TX95ItmcxyX7RprfBWLTUwNXBYOifsL6CkIGlWcNjA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/shared": "3.0.2", - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/plugin-toc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-3.0.2.tgz", - "integrity": "sha512-Dz0dURjD5wR4nBxFMiqb0BTGRAOkCE60byIemqLqnkF6ORKKJ8h5aLF5J5ssbLO87hwu81IikHiaXvqoiEneoQ==", - "license": "MIT", - "dependencies": { - "@mdit-vue/shared": "3.0.2", - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/shared": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-3.0.2.tgz", - "integrity": "sha512-anFGls154h0iVzUt5O43EaqYvPwzfUxQ34QpNQsUQML7pbEJMhcgkRNvYw9hZBspab+/TP45agdPw5joh6/BBA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/types": "3.0.2", - "@types/markdown-it": "^14.1.2", - "markdown-it": "^14.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit-vue/types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-3.0.2.tgz", - "integrity": "sha512-00aAZ0F0NLik6I6Yba2emGbHLxv+QYrPH00qQ5dFKXlAo1Ll2RHDXwY7nN2WAfrx2pP+WrvSRFTGFCNGdzBDHw==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mdit/helper": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@mdit/helper/-/helper-1.0.1.tgz", - "integrity": "sha512-zAzShsRZmkqjuoOFg6/zTCYVpvghj9a30Cl/eOGkE0xzRJJJG8T18eqb2lgceQhjVLWHK02HNVkzyfNHc429lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14.1.2" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "markdown-it": "^14.2.0" - }, - "peerDependenciesMeta": { - "markdown-it": { - "optional": true - } - } - }, - "node_modules/@mdit/plugin-alert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mdit/plugin-alert/-/plugin-alert-1.0.2.tgz", - "integrity": "sha512-A8p/Kodj96OeO1wrQMH0oSKQQ8N4jzeHSVrZQwQsBS6Z2NA+JvAk1AdVhzmn2C4b4EuprbFwWPvFlruoFm9iMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14.1.2" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "markdown-it": "^14.2.0" - }, - "peerDependenciesMeta": { - "markdown-it": { - "optional": true - } - } - }, - "node_modules/@mdit/plugin-container": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mdit/plugin-container/-/plugin-container-1.0.2.tgz", - "integrity": "sha512-gCpqmadamWVbDI7+OgkywDGjfgqxrjZo3U+iK+sH7vERnZyX4sx1X65pXbqrem8Q5/4yO5t0d+kWkPC733ceRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14.1.2" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "markdown-it": "^14.2.0" - }, - "peerDependenciesMeta": { - "markdown-it": { - "optional": true - } - } - }, - "node_modules/@mdit/plugin-tab": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mdit/plugin-tab/-/plugin-tab-1.0.2.tgz", - "integrity": "sha512-eWrP8lgrMOVRJDS4E1fOpFNTiH/FTxMcnUp3GqwkNrUNnNvdptjMmnJdBV7tnrYzSJpjG/JB+EA5TXjZ/Cru9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdit/helper": "1.0.1", - "@types/markdown-it": "^14.1.2" - }, - "engines": { - "node": ">=22" - }, - "peerDependencies": { - "markdown-it": "^14.2.0" - }, - "peerDependenciesMeta": { - "markdown-it": { - "optional": true - } - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", - "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.140.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.140.0.tgz", - "integrity": "sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", - "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.6.0", - "@parcel/watcher-darwin-arm64": "2.6.0", - "@parcel/watcher-darwin-x64": "2.6.0", - "@parcel/watcher-freebsd-x64": "2.6.0", - "@parcel/watcher-linux-arm-glibc": "2.6.0", - "@parcel/watcher-linux-arm-musl": "2.6.0", - "@parcel/watcher-linux-arm64-glibc": "2.6.0", - "@parcel/watcher-linux-arm64-musl": "2.6.0", - "@parcel/watcher-linux-x64-glibc": "2.6.0", - "@parcel/watcher-linux-x64-musl": "2.6.0", - "@parcel/watcher-win32-arm64": "2.6.0", - "@parcel/watcher-win32-x64": "2.6.0" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", - "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", - "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", - "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", - "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", - "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", - "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", - "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", - "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", - "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", - "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", - "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", - "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.0.tgz", - "integrity": "sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.0.tgz", - "integrity": "sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.0.tgz", - "integrity": "sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.0.tgz", - "integrity": "sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.0.tgz", - "integrity": "sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.0.tgz", - "integrity": "sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.0.tgz", - "integrity": "sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.0.tgz", - "integrity": "sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.0.tgz", - "integrity": "sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.0.tgz", - "integrity": "sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.0.tgz", - "integrity": "sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.0.tgz", - "integrity": "sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.0.tgz", - "integrity": "sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "1.11.2", - "@emnapi/runtime": "1.11.2", - "@napi-rs/wasm-runtime": "^1.1.6" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.0.tgz", - "integrity": "sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.0.tgz", - "integrity": "sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "license": "MIT", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", - "license": "MIT" - }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/markdown-it-emoji": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-3.0.1.tgz", - "integrity": "sha512-cz1j8R35XivBqq9mwnsrP2fsz2yicLhB8+PDtuVkKOExwEdsVBNI+ROL3sbhtR5occRZ66vT0QnwFZCqdjf3pA==", - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", - "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", - "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", - "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "^1.0.1" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue-macros/common": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.4.tgz", - "integrity": "sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==", - "license": "MIT", - "dependencies": { - "@vue/compiler-sfc": "^3.5.22", - "ast-kit": "^2.1.2", - "local-pkg": "^1.1.2", - "magic-string-ast": "^1.0.2", - "unplugin-utils": "^0.3.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/vue-macros" - }, - "peerDependencies": { - "vue": "^2.7.0 || ^3.2.25" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.40.tgz", - "integrity": "sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@vue/shared": "3.5.40", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-core/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.40.tgz", - "integrity": "sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.40", - "@vue/shared": "3.5.40" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.40.tgz", - "integrity": "sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@vue/compiler-core": "3.5.40", - "@vue/compiler-dom": "3.5.40", - "@vue/compiler-ssr": "3.5.40", - "@vue/shared": "3.5.40", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.19", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.40.tgz", - "integrity": "sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.40", - "@vue/shared": "3.5.40" - } - }, - "node_modules/@vue/devtools-api": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", - "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^8.2.1" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", - "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^8.2.1", - "birpc": "^2.6.1", - "hookable": "^5.5.3", - "perfect-debounce": "^2.0.0" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", - "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", - "license": "MIT" - }, - "node_modules/@vue/reactivity": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.40.tgz", - "integrity": "sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.40" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.40.tgz", - "integrity": "sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.40", - "@vue/shared": "3.5.40" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.40.tgz", - "integrity": "sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.40", - "@vue/runtime-core": "3.5.40", - "@vue/shared": "3.5.40", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.40.tgz", - "integrity": "sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.40", - "@vue/runtime-dom": "3.5.40", - "@vue/shared": "3.5.40" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.40.tgz", - "integrity": "sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==", - "license": "MIT" - }, - "node_modules/@vuepress/bundler-vite": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.31.tgz", - "integrity": "sha512-4ptpbmDvAf9KvME7xY4OhYT4M/fAyk4qnP97jl5+kdRkOcv/XsRW2WKhP2lC8ckr9hMwVoRdBRE2/qgrtX+iDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitejs/plugin-vue": "^6.0.8", - "@vuepress/bundlerutils": "2.0.0-rc.31", - "@vuepress/client": "2.0.0-rc.31", - "@vuepress/core": "2.0.0-rc.31", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "autoprefixer": "^10.5.4", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.5.22", - "postcss-load-config": "^6.0.1", - "rolldown": "^1.2.0", - "vite": "^8.1.5", - "vue": "^3.5.40", - "vue-router": "^5.2.0" - } - }, - "node_modules/@vuepress/bundlerutils": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/bundlerutils/-/bundlerutils-2.0.0-rc.31.tgz", - "integrity": "sha512-CSk4gR0fvJ419ocipH3cbk/xt0IFK92XwqzFX3N7BzPVFlWE74iaBfT3VUFQHQN2vYPwMMou4wlEdnK4PS4cvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/client": "2.0.0-rc.31", - "@vuepress/core": "2.0.0-rc.31", - "@vuepress/markdown": "2.0.0-rc.31", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "vue": "^3.5.40", - "vue-router": "^5.2.0" - } - }, - "node_modules/@vuepress/cli": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.31.tgz", - "integrity": "sha512-X75edJjhacYCzrYSOhXvlakh+/1fm2eCGJcrcZqKGfeZXcKhDrF154E7meLqfEkiHDb3zPCg+C2wAs1m6ujoxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/core": "2.0.0-rc.31", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "cac": "^7.0.0", - "chokidar": "^5.0.0", - "envinfo": "^7.21.0", - "rolldown": "^1.2.0" - }, - "bin": { - "vuepress-cli": "bin/vuepress.js" - } - }, - "node_modules/@vuepress/client": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.31.tgz", - "integrity": "sha512-F1mVj2NCblUwweGjfsmfLiC7GrO0YN5rnej14nMSGfHP3ch1FHpZeACiiRk1L0MolpBd7OYskx5rYyh7vY0tCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^8.1.5", - "@vue/devtools-kit": "^8.1.5", - "@vuepress/shared": "2.0.0-rc.31", - "vue": "^3.5.40", - "vue-router": "^5.2.0" - } - }, - "node_modules/@vuepress/core": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.31.tgz", - "integrity": "sha512-b01o8GkukVSZwQYn0DZirEr5ghiAiX2m8yNUeptOJ6nJgLyPGO02zmGlmERCxR9qsfHnTsc5UcbjJpmOr/cFiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/client": "2.0.0-rc.31", - "@vuepress/markdown": "2.0.0-rc.31", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "vue": "^3.5.40" - } - }, - "node_modules/@vuepress/helper": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/helper/-/helper-2.0.0-rc.131.tgz", - "integrity": "sha512-VlzJre0tJhlyoHpiRzclM9KntYzdip9rUWf8zaqfwlOV8A280fexTfWdxZwDkekgh9E3l6jJTqRJZpVDdXVFYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "^3.5.39", - "@vueuse/core": "^14.3.0", - "cheerio": "^1.2.0", - "fflate": "^0.8.3", - "gray-matter": "^4.0.3", - "vue": "^3.5.39" - }, - "peerDependencies": { - "@vuepress/bundler-vite": "2.0.0-rc.30", - "@vuepress/bundler-webpack": "2.0.0-rc.30", - "vuepress": "2.0.0-rc.30" - }, - "peerDependenciesMeta": { - "@vuepress/bundler-vite": { - "optional": true - }, - "@vuepress/bundler-webpack": { - "optional": true - } - } - }, - "node_modules/@vuepress/highlighter-helper": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/highlighter-helper/-/highlighter-helper-2.0.0-rc.131.tgz", - "integrity": "sha512-KbKI30NlVWttza0KiKCIQtQTUzWWVXwVnhUxKN2lL7dvK2mGM/41tutIBGj0G16kvPr5KiCHNAWSmZVd4IRkkg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "vuepress": "2.0.0-rc.30" - }, - "peerDependenciesMeta": { - "@vueuse/core": { - "optional": true - } - } - }, - "node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.31.tgz", - "integrity": "sha512-W4UdVwYob3sZ794BFd53dolhXVOma0JzN15k6CwmmhOy/3wWuIZ8pV3YQsxxyAQJ8ZxQWGZ4Wf5u/w7G/1/IkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdit-vue/plugin-component": "^3.0.2", - "@mdit-vue/plugin-frontmatter": "^3.0.2", - "@mdit-vue/plugin-headers": "^3.0.2", - "@mdit-vue/plugin-sfc": "^3.0.2", - "@mdit-vue/plugin-title": "^3.0.2", - "@mdit-vue/plugin-toc": "^3.0.2", - "@mdit-vue/shared": "^3.0.2", - "@mdit-vue/types": "^3.0.2", - "@types/markdown-it": "^14.1.2", - "@types/markdown-it-emoji": "^3.0.1", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "markdown-it": "^14.3.0", - "markdown-it-anchor": "^9.2.1", - "markdown-it-emoji": "^3.1.0", - "mdurl": "^2.1.0" - } - }, - "node_modules/@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.131.tgz", - "integrity": "sha512-ouBBcln9iqmH0Kmm5gtq05B/TmeruFjIlyerrSRN9fuOhP2whDAlF05JixXd0EEFLuVt/DNMscWIsx0TE4TKPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vueuse/core": "^14.3.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.131.tgz", - "integrity": "sha512-SKuAT7vcilBae7W7TBMyZU/Toy7GEPxprrBbN9RmdIov/g2NQd9jY1mSuOY4o0cQlM6R91dm8LQCNKhBUW+6Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-container": { - "version": "2.0.0-rc.28", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-rc.28.tgz", - "integrity": "sha512-EBvmanLATZRtjDr/a6Td8Dw8Mr3ToigNoqdfibhhGA3PKAk5/olUbtpJBcYemgA3nVIyH6gdqbC3zMTO3/vx3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/markdown-it": "^14.1.1", - "markdown-it": "^14.1.0", - "markdown-it-container": "^4.0.0" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.9" - } - }, - "node_modules/@vuepress/plugin-copy-code": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-copy-code/-/plugin-copy-code-2.0.0-rc.131.tgz", - "integrity": "sha512-fHZroAO1hmB4p3xsoUmcGV0sWGPghmW+ukDZQ7fgz11eAtUk9idWqQtZ8+NrhWab2ZV9vC0mxNXSXyAQKjmEEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-git": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.132.tgz", - "integrity": "sha512-2F7ef0t8Av6U35xcNwWFxn/o4+Bn4fseArFC0jl5ov3OeZZF2FVd54B5NKxbo98gnteZ0W5UUMr37iMAeBhfSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "rehype-parse": "^9.0.1", - "rehype-sanitize": "^6.0.0", - "rehype-stringify": "^10.0.1", - "unified": "^11.0.5", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-links-check": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-links-check/-/plugin-links-check-2.0.0-rc.131.tgz", - "integrity": "sha512-uWz2bXDlrZmCtZL+q7YQiVV0fBJwNLy7WWPl3AlD9EPVf61mT1K5P1HSKaVO2TMAdDr6pBjjfvMw6DZj9bJd1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-markdown-hint": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-hint/-/plugin-markdown-hint-2.0.0-rc.132.tgz", - "integrity": "sha512-vnq++26+NYMdxJPj60sBL8HYoIkNsTUwXwtE2QHYJ8psqe4HIQAxICVTo13munhFCKn1EQQTvgs9P2mW/WraEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdit/plugin-alert": "^1.0.1", - "@mdit/plugin-container": "^1.0.1", - "@types/markdown-it": "^14.1.2", - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-markdown-tab": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-tab/-/plugin-markdown-tab-2.0.0-rc.132.tgz", - "integrity": "sha512-JdXbfzPqLdeOjhmKgn6gLdUqH2CnvGBqei/HYPYVkEm5Pg3BCCYY8ePaTJdBpsFWRdkkgYGV3jKfSs7isXMviA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdit/plugin-tab": "^1.0.1", - "@types/markdown-it": "^14.1.2", - "@vuepress/helper": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.131.tgz", - "integrity": "sha512-QO53LlZs27JLnOyH9ZfH8tpITRUehGOtwpISw+ZSBEqXAkqqPspDjH//CXiqY4pgjm3sARFkXIXrX1GKCmZnrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "medium-zoom": "^1.1.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.131.tgz", - "integrity": "sha512-22a4qHBPObBVQanFGnCDEuLb4WCkC7MQAlksX8cAQdbhFIo6Q4L/GvZJR/thfil0feAgEI2qGxTrULJ97f3aFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-palette": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.131.tgz", - "integrity": "sha512-FVdWjwJ1BD/e8wP4M/09iEdSYuRwk6g1yTKMZeqRC0enXFyOPZg2BGXZ4MeQwi+j8q+NgSCGJN0l6UK9FWUjTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "chokidar": "^5.0.0" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.132.tgz", - "integrity": "sha512-DZDt1hoWCdRegzlKG3BB+wWbu4z+cIC/t40fpgHiIVhfTVDZIg9bqOlZylPnLEbSin45V4gAI/20x9RevtU0cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vuepress/highlighter-helper": "2.0.0-rc.131", - "prismjs": "^1.30.0" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-search": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-2.0.0-rc.131.tgz", - "integrity": "sha512-IfhvhfW17035WTTGcji1jnUdej4A346YABpjMwsMU0vNLmoeXluakWeIk7CujtI/RCTF0PaWjCBru6J3gW5R6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "chokidar": "^5.0.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-seo": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-seo/-/plugin-seo-2.0.0-rc.132.tgz", - "integrity": "sha512-+dQ2YJ/LKt/InHgN93DwtrjXkaERplXxD9gu+xkj02ioHgo87WZRH8rkChWPjzBRvfDjEFYcXDT16pzcyc27OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-sitemap": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.132.tgz", - "integrity": "sha512-bTeThkscqNRnyMcm35UR50c+YAjbOk6youMojBrHvf/ocggmiWpFa7EbKW399NsfZ7udo/2EaG4GTyn0UZws+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "sitemap": "^9.0.1" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/plugin-theme-data": { - "version": "2.0.0-rc.131", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.131.tgz", - "integrity": "sha512-/v1c77ILZ3usYJ+QaAkCIELymvglJOa5Rl7sZ+dEqtcfPs3DMm8NPbsUyy+8oi08oFgF4ViefAZhKKIMgOSYmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^8.1.5", - "vue": "^3.5.39" - }, - "peerDependencies": { - "vuepress": "2.0.0-rc.30" - } - }, - "node_modules/@vuepress/shared": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.31.tgz", - "integrity": "sha512-FCBYbDrRd8rbRdj7osw2liS+gGsx7eyYktEm0efJlZavPh5O9nqC6e1ryUc0Mjzo04ZCgS+8EY3B+NHa5W2t8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdit-vue/types": "^3.0.2" - } - }, - "node_modules/@vuepress/theme-default": { - "version": "2.0.0-rc.132", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.132.tgz", - "integrity": "sha512-ZzYdbRMNmlCr7wlqlcd46e16/IkGfwWlqceMOZdrw/5Cp3U/lWA06s2VUQECsJGZc9oqnHI71E/O1hg/YDchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.131", - "@vuepress/plugin-active-header-links": "2.0.0-rc.131", - "@vuepress/plugin-back-to-top": "2.0.0-rc.131", - "@vuepress/plugin-copy-code": "2.0.0-rc.131", - "@vuepress/plugin-git": "2.0.0-rc.132", - "@vuepress/plugin-links-check": "2.0.0-rc.131", - "@vuepress/plugin-markdown-hint": "2.0.0-rc.132", - "@vuepress/plugin-markdown-tab": "2.0.0-rc.132", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.131", - "@vuepress/plugin-nprogress": "2.0.0-rc.131", - "@vuepress/plugin-palette": "2.0.0-rc.131", - "@vuepress/plugin-prismjs": "2.0.0-rc.132", - "@vuepress/plugin-seo": "2.0.0-rc.132", - "@vuepress/plugin-sitemap": "2.0.0-rc.132", - "@vuepress/plugin-theme-data": "2.0.0-rc.131", - "@vueuse/core": "^14.3.0", - "vue": "^3.5.39" - }, - "peerDependencies": { - "sass": "^1.101.0", - "sass-embedded": "^1.100.0", - "sass-loader": "^17.0.0", - "vuepress": "2.0.0-rc.30" - }, - "peerDependenciesMeta": { - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "sass-loader": { - "optional": true - } - } - }, - "node_modules/@vuepress/utils": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.31.tgz", - "integrity": "sha512-UeJYobsP2JuGjGNqh9Tk/iLhV9O0FQLj1ClFRxjG0gl/KUAASxofOODjOFFEsWv4FnkxNEUwejxO6cNqW1zOWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/debug": "^4.1.13", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@types/picomatch": "^4.0.3", - "@vuepress/shared": "2.0.0-rc.31", - "debug": "^4.4.3", - "fs-extra": "^11.3.6", - "hash-sum": "^2.0.0", - "ora": "^9.4.1", - "picocolors": "^1.1.1", - "picomatch": "^4.0.5", - "tinyglobby": "^0.2.17", - "upath": "^3.0.8" - } - }, - "node_modules/@vueuse/core": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.4.0.tgz", - "integrity": "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ==", - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "14.4.0", - "@vueuse/shared": "14.4.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/@vueuse/metadata": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.4.0.tgz", - "integrity": "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.4.0.tgz", - "integrity": "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/ast-kit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", - "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "pathe": "^2.0.3" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/ast-walker-scope": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.9.0.tgz", - "integrity": "sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.2", - "@babel/types": "^7.29.0", - "ast-kit": "^2.2.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/autoprefixer": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", - "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.6", - "caniuse-lite": "^1.0.30001806", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.6.tgz", - "integrity": "sha512-69D/imtToCsIcAl8WBS2YaRwA4jO/j0HhU+hELqMEu9f54MoUtI6+XH5mrKU8rEFNEk/Ui1I2MK4/JkWacclGw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/birpc": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", - "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.28.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", - "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.10.44", - "caniuse-lite": "^1.0.30001806", - "electron-to-chromium": "^1.5.393", - "node-releases": "^2.0.51", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001806", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", - "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", - "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.1.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.19.0", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=20.18.1" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "license": "MIT", - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", - "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-parse": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", - "dependencies": { - "color-name": "^1.0.0" - } - }, - "node_modules/color-rgba": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", - "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", - "dependencies": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" - } - }, - "node_modules/color-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", - "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" - }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", - "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "license": "MIT" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.398", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.398.tgz", - "integrity": "sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", - "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/exsolve": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.1.tgz", - "integrity": "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fflate": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", - "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs-extra": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", - "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "license": "MIT" - }, - "node_modules/hast-util-from-html": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-sanitize": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz", - "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "unist-util-position": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", - "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/js-yaml": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", - "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/linkify-it": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", - "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/local-pkg": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz", - "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", - "license": "MIT", - "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.3.0", - "quansync": "^0.2.11" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/magic-string-ast": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", - "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", - "license": "MIT", - "dependencies": { - "magic-string": "^0.30.19" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/markdown-it": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", - "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.5.0", - "linkify-it": "^5.0.2", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it-anchor": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.1.tgz", - "integrity": "sha512-p6APiLJDFAW2GEvaavDvhIBn7jrX2jLv77NkBGgNacFTurbORYc4pyYySg/mI6mpR6cHQuAtzKtmqgQr4K8dsQ==", - "license": "Unlicense", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it-container": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-4.0.0.tgz", - "integrity": "sha512-HaNccxUH0l7BNGYbFbjmGpf5aLHAMTinqRZQAEQbMr2cdD3z91Q6kIo1oUn1CQndkT03jat6ckrdRYuwwqLlQw==", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-it-emoji": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.1.0.tgz", - "integrity": "sha512-NhmMEH2ywduD4Nty1E8uB5NqfLhAT1VR0dyvoJyStKOqCzbZmVdn/+8wj7zpDsb/fLBikpCPsWwxqKlvMmbz4g==", - "license": "MIT" - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdurl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", - "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", - "license": "MIT" - }, - "node_modules/medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mlly": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", - "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", - "license": "MIT", - "dependencies": { - "acorn": "^8.16.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.3" - } - }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "license": "MIT" - }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", - "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-releases": { - "version": "2.0.51", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", - "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/nostics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/nostics/-/nostics-1.2.0.tgz", - "integrity": "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", - "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.2", - "string-width": "^8.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, - "node_modules/perfect-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", - "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", - "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", - "license": "MIT", - "dependencies": { - "confbox": "^0.2.4", - "exsolve": "^1.0.8", - "pathe": "^2.0.3" - } - }, - "node_modules/postcss": { - "version": "8.5.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.24.tgz", - "integrity": "sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/rehype-parse": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-html": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-sanitize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz", - "integrity": "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-sanitize": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rolldown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.0.tgz", - "integrity": "sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.140.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.0", - "@rolldown/binding-darwin-arm64": "1.2.0", - "@rolldown/binding-darwin-x64": "1.2.0", - "@rolldown/binding-freebsd-x64": "1.2.0", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.0", - "@rolldown/binding-linux-arm64-gnu": "1.2.0", - "@rolldown/binding-linux-arm64-musl": "1.2.0", - "@rolldown/binding-linux-ppc64-gnu": "1.2.0", - "@rolldown/binding-linux-s390x-gnu": "1.2.0", - "@rolldown/binding-linux-x64-gnu": "1.2.0", - "@rolldown/binding-linux-x64-musl": "1.2.0", - "@rolldown/binding-openharmony-arm64": "1.2.0", - "@rolldown/binding-wasm32-wasi": "1.2.0", - "@rolldown/binding-win32-arm64-msvc": "1.2.0", - "@rolldown/binding-win32-x64-msvc": "1.2.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", - "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^5.0.0", - "immutable": "^5.1.5", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=20.19.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-embedded": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz", - "integrity": "sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bufbuild/protobuf": "^2.5.0", - "colorjs.io": "^0.5.0", - "immutable": "^5.1.5", - "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "sync-child-process": "^1.0.2", - "varint": "^6.0.0" - }, - "bin": { - "sass": "dist/bin/sass.js" - }, - "engines": { - "node": ">=16.0.0" - }, - "optionalDependencies": { - "sass-embedded-all-unknown": "1.100.0", - "sass-embedded-android-arm": "1.100.0", - "sass-embedded-android-arm64": "1.100.0", - "sass-embedded-android-riscv64": "1.100.0", - "sass-embedded-android-x64": "1.100.0", - "sass-embedded-darwin-arm64": "1.100.0", - "sass-embedded-darwin-x64": "1.100.0", - "sass-embedded-linux-arm": "1.100.0", - "sass-embedded-linux-arm64": "1.100.0", - "sass-embedded-linux-musl-arm": "1.100.0", - "sass-embedded-linux-musl-arm64": "1.100.0", - "sass-embedded-linux-musl-riscv64": "1.100.0", - "sass-embedded-linux-musl-x64": "1.100.0", - "sass-embedded-linux-riscv64": "1.100.0", - "sass-embedded-linux-x64": "1.100.0", - "sass-embedded-unknown-all": "1.100.0", - "sass-embedded-win32-arm64": "1.100.0", - "sass-embedded-win32-x64": "1.100.0" - } - }, - "node_modules/sass-embedded-all-unknown": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.100.0.tgz", - "integrity": "sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==", - "cpu": [ - "!arm", - "!arm64", - "!riscv64", - "!x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "sass": "1.100.0" - } - }, - "node_modules/sass-embedded-android-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.100.0.tgz", - "integrity": "sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.100.0.tgz", - "integrity": "sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.100.0.tgz", - "integrity": "sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.100.0.tgz", - "integrity": "sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.100.0.tgz", - "integrity": "sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz", - "integrity": "sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz", - "integrity": "sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": "glibc", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz", - "integrity": "sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": "glibc", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.100.0.tgz", - "integrity": "sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz", - "integrity": "sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.100.0.tgz", - "integrity": "sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.100.0.tgz", - "integrity": "sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.100.0.tgz", - "integrity": "sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": "glibc", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.100.0.tgz", - "integrity": "sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": "glibc", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-unknown-all": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", - "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "!android", - "!darwin", - "!linux", - "!win32" - ], - "dependencies": { - "sass": "1.100.0" - } - }, - "node_modules/sass-embedded-win32-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.100.0.tgz", - "integrity": "sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-win32-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz", - "integrity": "sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "license": "MIT" - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-markdown": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/simple-markdown/-/simple-markdown-0.7.3.tgz", - "integrity": "sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg==", - "dependencies": { - "@types/react": ">=16.0.0" - } - }, - "node_modules/sitemap": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", - "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^24.9.2", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.4.1" - }, - "bin": { - "sitemap": "dist/esm/cli.js" - }, - "engines": { - "node": ">=20.19.5", - "npm": ">=10.8.2" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/stdin-discarder": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", - "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/sync-child-process": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", - "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "sync-message-port": "^1.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/sync-message-port": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", - "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/ufo": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", - "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", - "license": "MIT" - }, - "node_modules/undici": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", - "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT" - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unplugin": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.3.0.tgz", - "integrity": "sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==", - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "picomatch": "^4.0.4", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "@farmfe/core": "*", - "@rspack/core": "*", - "bun-types-no-globals": "*", - "esbuild": "*", - "rolldown": "*", - "rollup": "*", - "unloader": "*", - "vite": "*", - "webpack": "*" - }, - "peerDependenciesMeta": { - "@farmfe/core": { - "optional": true - }, - "@rspack/core": { - "optional": true - }, - "bun-types-no-globals": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "rolldown": { - "optional": true - }, - "rollup": { - "optional": true - }, - "unloader": { - "optional": true - }, - "vite": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/unplugin-utils": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.2.tgz", - "integrity": "sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==", - "license": "MIT", - "dependencies": { - "pathe": "^2.0.3", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/upath": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/upath/-/upath-3.0.8.tgz", - "integrity": "sha512-YAsrLMIlhfSCm9rga5TZsJ1mXgahs7N0qOTokzU8mFz35hUrYMvVkaEPefI3rEb/vkAWAOj1Km/qdije9RC1kQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/anodynos" - }, - { - "type": "polar", - "url": "https://polar.sh/anodynos" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-upath" - } - ], - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", - "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lightningcss": "^1.32.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.17", - "rolldown": "~1.1.5", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.3.0", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@emnapi/core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", - "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.2", - "tslib": "^2.4.0" - } - }, - "node_modules/vite/node_modules/@emnapi/runtime": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", - "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/vite/node_modules/@oxc-project/types": { - "version": "0.139.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", - "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", - "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", - "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", - "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", - "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", - "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", - "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", - "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", - "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", - "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", - "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", - "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", - "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", - "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "1.11.1", - "@emnapi/runtime": "1.11.1", - "@napi-rs/wasm-runtime": "^1.1.6" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", - "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", - "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/vite/node_modules/rolldown": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", - "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.139.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.1.5", - "@rolldown/binding-darwin-arm64": "1.1.5", - "@rolldown/binding-darwin-x64": "1.1.5", - "@rolldown/binding-freebsd-x64": "1.1.5", - "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", - "@rolldown/binding-linux-arm64-gnu": "1.1.5", - "@rolldown/binding-linux-arm64-musl": "1.1.5", - "@rolldown/binding-linux-ppc64-gnu": "1.1.5", - "@rolldown/binding-linux-s390x-gnu": "1.1.5", - "@rolldown/binding-linux-x64-gnu": "1.1.5", - "@rolldown/binding-linux-x64-musl": "1.1.5", - "@rolldown/binding-openharmony-arm64": "1.1.5", - "@rolldown/binding-wasm32-wasi": "1.1.5", - "@rolldown/binding-win32-arm64-msvc": "1.1.5", - "@rolldown/binding-win32-x64-msvc": "1.1.5" - } - }, - "node_modules/vue": { - "version": "3.5.40", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.40.tgz", - "integrity": "sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.40", - "@vue/compiler-sfc": "3.5.40", - "@vue/runtime-dom": "3.5.40", - "@vue/server-renderer": "3.5.40", - "@vue/shared": "3.5.40" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.2.0.tgz", - "integrity": "sha512-QAC5i0LEb1GLG0LXDQmHu8L7FX12j0KwU/JTKmLQUJMrn04gQdKP6Du+p0QwpHb3iy71vBlqnHQ8WAfOSAWhqw==", - "license": "MIT", - "dependencies": { - "@babel/generator": "^8.0.0", - "@vue-macros/common": "^3.1.3", - "@vue/devtools-api": "^8.1.5", - "ast-walker-scope": "^0.9.0", - "chokidar": "^5.0.0", - "json5": "^2.2.3", - "local-pkg": "^1.2.1", - "magic-string": "^0.30.21", - "mlly": "^1.8.2", - "muggle-string": "^0.4.1", - "nostics": "^1.1.4", - "pathe": "^2.0.3", - "picomatch": "^4.0.5", - "scule": "^1.3.0", - "tinyglobby": "^0.2.17", - "unplugin": "^3.3.0", - "unplugin-utils": "^0.3.2", - "yaml": "^2.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "@pinia/colada": ">=0.21.2", - "@vue/compiler-sfc": "^3.5.34 || ^4.0.0", - "pinia": "^3.0.4 || ^4.0.2", - "vite": "^7.3.0 || ^8.0.0", - "vue": "^3.5.34 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@pinia/colada": { - "optional": true - }, - "@vue/compiler-sfc": { - "optional": true - }, - "pinia": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/vuepress": { - "version": "2.0.0-rc.31", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.31.tgz", - "integrity": "sha512-IcJ4E5iOL4aoERm5d+W4j6rJeH/gxDx+NGxvLYvEVPInmv2p90Mjj4VFjFoxqlWc7lIwwFNIVYpPI6dw0miH4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/cli": "2.0.0-rc.31", - "@vuepress/client": "2.0.0-rc.31", - "@vuepress/core": "2.0.0-rc.31", - "@vuepress/markdown": "2.0.0-rc.31", - "@vuepress/shared": "2.0.0-rc.31", - "@vuepress/utils": "2.0.0-rc.31", - "vue": "^3.5.40" - }, - "bin": { - "vuepress": "bin/vuepress.js", - "vuepress-vite": "bin/vuepress-vite.js", - "vuepress-webpack": "bin/vuepress-webpack.js" - }, - "engines": { - "node": ">=22.18.0" - }, - "peerDependencies": { - "@vuepress/bundler-vite": "2.0.0-rc.31", - "@vuepress/bundler-webpack": "2.0.0-rc.31", - "vue": "^3.5.40" - }, - "peerDependenciesMeta": { - "@vuepress/bundler-vite": { - "optional": true - }, - "@vuepress/bundler-webpack": { - "optional": true - } - } - }, - "node_modules/vuepress-plugin-remove-html-extension": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/vuepress-plugin-remove-html-extension/-/vuepress-plugin-remove-html-extension-1.26.0.tgz", - "integrity": "sha512-0SPSJHZPF3EoA6ENO5bQqWuJVYDUerJp7vTFQx6KqEPLmSpOMM7e8mf4rgT0FK5sORfJXL3WpjHCoXYrPjA25Q==", - "license": "MIT", - "dependencies": { - "@vuepress/core": "2.0.0-rc.30" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - } - }, - "node_modules/vuepress-plugin-remove-html-extension/node_modules/@vuepress/client": { - "version": "2.0.0-rc.30", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.30.tgz", - "integrity": "sha512-bIAY32Z3Rx6ONBriY+8K2K5wjKxQXzA1jMao4cVTOgMfapHyzhyfNCp1FTkWw6iHoccM9xIDniuyeT8W6JDWPg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^8.1.1", - "@vue/devtools-kit": "^8.1.1", - "@vuepress/shared": "2.0.0-rc.30", - "vue": "^3.5.34", - "vue-router": "^5.0.6" - } - }, - "node_modules/vuepress-plugin-remove-html-extension/node_modules/@vuepress/core": { - "version": "2.0.0-rc.30", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.30.tgz", - "integrity": "sha512-Sxe+S0xC0Yn7eh4P4TlnzolYqDBo62ZnfbY3qaLc5nlKW4sgJY+pJDBqSOHBL5Z5I4q0V43+9WULNtHXeDHVMg==", - "license": "MIT", - "dependencies": { - "@vuepress/client": "2.0.0-rc.30", - "@vuepress/markdown": "2.0.0-rc.30", - "@vuepress/shared": "2.0.0-rc.30", - "@vuepress/utils": "2.0.0-rc.30", - "vue": "^3.5.34" - } - }, - "node_modules/vuepress-plugin-remove-html-extension/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.30", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.30.tgz", - "integrity": "sha512-4wloGD4xBVm09yi48rPg9LOBXHh/aHGMxpks1GuF79yifS78n8cHSZilWaDryM5nimcUrPtK21XUAXFjyZHjBA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/plugin-component": "^3.0.2", - "@mdit-vue/plugin-frontmatter": "^3.0.2", - "@mdit-vue/plugin-headers": "^3.0.2", - "@mdit-vue/plugin-sfc": "^3.0.2", - "@mdit-vue/plugin-title": "^3.0.2", - "@mdit-vue/plugin-toc": "^3.0.2", - "@mdit-vue/shared": "^3.0.2", - "@mdit-vue/types": "^3.0.2", - "@types/markdown-it": "^14.1.2", - "@types/markdown-it-emoji": "^3.0.1", - "@vuepress/shared": "2.0.0-rc.30", - "@vuepress/utils": "2.0.0-rc.30", - "markdown-it": "^14.1.1", - "markdown-it-anchor": "^9.2.0", - "markdown-it-emoji": "^3.0.0", - "mdurl": "^2.0.0" - } - }, - "node_modules/vuepress-plugin-remove-html-extension/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.30", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.30.tgz", - "integrity": "sha512-tW2bUobo96UQjBtnq6VkFG8ytWTwFT/3jjSVp75kDUb6N6D5ogXZdQIMvX7q+9OW0ogNKjLkCyRM3xK5eJbojA==", - "license": "MIT", - "dependencies": { - "@mdit-vue/types": "^3.0.2" - } - }, - "node_modules/vuepress-plugin-remove-html-extension/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.30", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.30.tgz", - "integrity": "sha512-pIqvCPDAm3puCeJqYtVmxTN35Q3ApKYe5O6xPYt0SExnmmZI6W7QmV1ZsYwanjjjWME2Kqd4OrFVxEw7V+V6ng==", - "license": "MIT", - "dependencies": { - "@types/debug": "^4.1.13", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@types/picomatch": "^4.0.3", - "@vuepress/shared": "2.0.0-rc.30", - "debug": "^4.4.3", - "fs-extra": "^11.3.5", - "hash-sum": "^2.0.0", - "ora": "^9.4.0", - "picocolors": "^1.1.1", - "picomatch": "^4.0.4", - "tinyglobby": "^0.2.16", - "upath": "^3.0.7" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "license": "MIT" - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/yaml": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yoctocolors": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", - "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/package.json b/package.json index 11ec8664..ccbc2c3c 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,51 @@ { "name": "guide", "description": "Imagine a guide..", - "version": "3.0.0", + "version": "4.0.0", "private": true, "scripts": { - "dev": "vuepress dev guide", - "build": "NODE_OPTIONS=--max-old-space-size=8192 vuepress build guide" - }, - "devDependencies": { - "@vuepress/bundler-vite": "^2.0.0-rc.31", - "@vuepress/plugin-container": "^2.0.0-rc.28", - "@vuepress/plugin-search": "^2.0.0-rc.131", - "@vuepress/theme-default": "^2.0.0-rc.132", - "sass-embedded": "^1.100.0", - "vuepress": "^2.0.0-rc.31" + "dev": "next dev -p 8080", + "build": "next build && node scripts/build-docs-pages.mjs", + "start": "serve out -l 8080", + "types:check": "next typegen && tsc --noEmit", + "wpack:dev": "next dev -p 8080 --webpack", + "wpack:build": "next build --webpack && node scripts/build-docs-pages.mjs" }, "dependencies": { - "@discord-message-components/vue": "^0.2.1", - "@vueuse/core": "^14.4.0", - "cheerio": "^1.0.0-rc.10", - "gray-matter": "^4.0.3", - "vuepress-plugin-remove-html-extension": "^1.26.0" + "@base-ui/react": "^1.6.0", + "@fuma-translate/react": "^1.0.2", + "@fumadocs/base-ui": "^16.14.0", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-slot": "^1.3.3", + "@skyra/discord-components-core": "^4.0.2", + "@skyra/discord-components-react": "^4.0.2", + "class-variance-authority": "^0.7.1", + "cnfast": "^0.1.0", + "fumadocs-core": "16.14.0", + "fumadocs-mdx": "15.2.1", + "fumadocs-ui": "npm:@fumadocs/base-ui@16.14.0", + "lucide-react": "^1.27.0", + "next": "16.2.12", + "next-themes": "^0.4.6", + "react": "^19.2.8", + "react-dom": "^19.2.8", + "scroll-into-view-if-needed": "^3.1.0", + "shiki": "^4.4.1" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.3.3", + "@types/mdast": "^4.0.4", + "@types/mdx": "^2.0.14", + "@types/node": "^26.1.2", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "cheerio": "^1.2.0", + "postcss": "^8.5.24", + "react-medium-image-zoom": "^5.4.8", + "serve": "^14.2.6", + "tailwindcss": "^4.3.3", + "typescript": "^6.0.3" }, - "main": "index.js", "repository": { "type": "git", "url": "git+https://github.com/raspdevpy/ccdoc.git" @@ -33,8 +56,5 @@ "bugs": { "url": "https://github.com/raspdevpy/ccdoc/issues" }, - "homepage": "https://github.com/raspdevpy/ccdoc", - "allowScripts": { - "vue-demi": true - } + "homepage": "https://github.com/raspdevpy/ccdoc" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..03419554 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4496 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@base-ui/react': + specifier: ^1.6.0 + version: 1.6.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fuma-translate/react': + specifier: ^1.0.2 + version: 1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fumadocs/base-ui': + specifier: ^16.14.0 + version: 16.14.0(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) + '@radix-ui/react-icons': + specifier: ^1.3.2 + version: 1.3.2(react@19.2.8) + '@radix-ui/react-slot': + specifier: ^1.3.3 + version: 1.3.3(@types/react@19.2.18)(react@19.2.8) + '@skyra/discord-components-core': + specifier: ^4.0.2 + version: 4.0.2 + '@skyra/discord-components-react': + specifier: ^4.0.2 + version: 4.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + cnfast: + specifier: ^0.1.0 + version: 0.1.0 + fumadocs-core: + specifier: 16.14.0 + version: 16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3) + fumadocs-mdx: + specifier: 15.2.1 + version: 15.2.1(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(supports-color@7.2.0) + fumadocs-ui: + specifier: npm:@fumadocs/base-ui@16.14.0 + version: '@fumadocs/base-ui@16.14.0(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)' + lucide-react: + specifier: ^1.27.0 + version: 1.28.0(react@19.2.8) + next: + specifier: 16.2.12 + version: 16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: + specifier: ^19.2.8 + version: 19.2.8 + react-dom: + specifier: ^19.2.8 + version: 19.2.8(react@19.2.8) + scroll-into-view-if-needed: + specifier: ^3.1.0 + version: 3.1.0 + shiki: + specifier: ^4.4.1 + version: 4.4.1 + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.3.3 + version: 4.3.3 + '@types/mdast': + specifier: ^4.0.4 + version: 4.0.4 + '@types/mdx': + specifier: ^2.0.14 + version: 2.0.14 + '@types/node': + specifier: ^26.1.2 + version: 26.1.2 + '@types/react': + specifier: ^19.2.17 + version: 19.2.18 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.4(@types/react@19.2.18) + cheerio: + specifier: ^1.2.0 + version: 1.2.0 + postcss: + specifier: ^8.5.24 + version: 8.5.25 + react-medium-image-zoom: + specifier: ^5.4.8 + version: 5.4.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + serve: + specifier: ^14.2.6 + version: 14.2.6(supports-color@7.2.0) + tailwindcss: + specifier: ^4.3.3 + version: 4.3.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + + '@base-ui/react@1.6.0': + resolution: {integrity: sha512-/jzjTWJYXhRFO45Bev9lc3cHbmjzCMpUqbMZ2AgKy/z25mY9B6shGSNcXcjQar9n5doM0KYW1W8fcFv2jZBuMw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + + '@base-ui/utils@0.3.1': + resolution: {integrity: sha512-gFFiltORVmW/N6IILTGxizP3PBpVpysqML1ALY5Vk0mH+7faVkCknOU31goYHN5Aoek2dkjxva1XOD2Ce9WuIg==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@fuma-translate/react@1.0.2': + resolution: {integrity: sha512-uOiOtBx3nRXR8Nu1GzBf1tApgF1FErDBTHxRIAQeyQdyOoZbrNRN6H4kDCWObY4qyGeGbHydG0DHzgeUgFDMIw==} + peerDependencies: + '@types/react': '*' + react: ^19.2.0 + react-dom: ^19.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@fumadocs/base-ui@16.14.0': + resolution: {integrity: sha512-mJ0PVUtKGr/PdwIb3S0CYgUr+U5RxQ+SwnaM+m4yxl7MvVyvaP4DMtU791POOVzF3tYpYa0xEEp1CQjM6A0r5w==} + peerDependencies: + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: 16.14.0 + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + takumi-js: '*' + peerDependenciesMeta: + '@types/mdx': + optional: true + '@types/react': + optional: true + next: + optional: true + takumi-js: + optional: true + + '@fumadocs/tailwind@0.1.1': + resolution: {integrity: sha512-BnPe52UxSaG8yKlHMKBxXw8h6GpK5qO55ci6+Qd5JnquTvIw6SpfbC1P+qAi82PuPWv1KZAWY8bxRk4+x9ctXw==} + peerDependencies: + tailwindcss: ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@lit-labs/ssr-dom-shim@1.6.0': + resolution: {integrity: sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==} + + '@lit/context@1.1.6': + resolution: {integrity: sha512-M26qDE6UkQbZA2mQ3RjJ3Gzd8TxP+/0obMgE5HfkfLhEEyYE3Bui4A5XHiGPjy0MUGAyxB3QgVuw2ciS0kHn6A==} + + '@lit/react@1.0.8': + resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} + peerDependencies: + '@types/react': 17 || 18 || 19 + + '@lit/reactive-element@2.1.2': + resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@next/env@16.2.12': + resolution: {integrity: sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==} + + '@next/swc-darwin-arm64@16.2.12': + resolution: {integrity: sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.2.12': + resolution: {integrity: sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.2.12': + resolution: {integrity: sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.2.12': + resolution: {integrity: sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.2.12': + resolution: {integrity: sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.2.12': + resolution: {integrity: sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.2.12': + resolution: {integrity: sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.2.12': + resolution: {integrity: sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc + + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@shikijs/core@4.4.1': + resolution: {integrity: sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.4.1': + resolution: {integrity: sha512-6U4lJBh8LTvIkEVqRHv/rr3ruwtO6IweFQt1ME1ntHJMGHS+6N86vfYGO1o8c/DtOCTia2lfhdQBtBrps1sDfQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.4.1': + resolution: {integrity: sha512-p23RugMKss0r5DAtRJW1yAXUDl60JvhQYV20yuxei//26JyDSJefV3umyWzzwep2weblMnJGDYahuti6XkcMgA==} + engines: {node: '>=20'} + + '@shikijs/langs@4.4.1': + resolution: {integrity: sha512-xb2kCMloBCIraIy2fS5MW0t/BxVY3q2nDyQKBoeSeq6KNrQbShHetCFlw2n35fGIJ6t3+hXDLQogP5ir9O9bvA==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.4.1': + resolution: {integrity: sha512-ko2OfDoG89YuQ7xL5LtcQiWKb7NIv1Ephb7g48TVU198OzAMLC8lXVEwaJGHK4sUMYrfAGJDqYmNLOLiW/Kz8w==} + engines: {node: '>=20'} + + '@shikijs/themes@4.4.1': + resolution: {integrity: sha512-wudOaoFro+/Zl9gQv2W1Ur5XlVduqvTuYLI483Xi0wgc1A+cy1hfB2r6ac6ufBgF+ID7KJEW7L41MHrzQ4wH+w==} + engines: {node: '>=20'} + + '@shikijs/types@4.4.1': + resolution: {integrity: sha512-GOwCLQDHM5EjGUWNPrhzJbr6JP8V/Dx/CDVkWvbZ1Avw5JFnNUckrgbLmE07qtg4WlW7Q7QFndhjIkeU9XMPvw==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@skyra/discord-components-core@4.0.2': + resolution: {integrity: sha512-1AvNBWZ7clY9jVZzA9Lmxr2wXddXA2lWT/kknFa2vO0p4ON8vz2uqbPrmzSStZGVHqT4jk5A6MTFInm/K0qQIw==} + engines: {node: '>=v18'} + + '@skyra/discord-components-react@4.0.2': + resolution: {integrity: sha512-K3wF8Op/zsHi5Y6cMVwACh/Df0FLkVLkYUUAJ+KnRVfuYM5id9i82jVnInQcmcw/jdR6FcUp2dOGSMINGUG2Qw==} + engines: {node: '>=v18'} + peerDependencies: + react: 16.8.x || 17.x || 18.x || 19.x + react-dom: 16.8.x || 17.x || 18.x || 19.x + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@26.1.2': + resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + + '@yuku-analyzer/binding-android-arm64@0.8.3': + resolution: {integrity: sha512-t1H+d/ubotHLJPQ2gTPZ9C+XD5ZYsxasmxi8wBsUm9WONr0DEFtlxwIgvGZS1Kvlc+sZH9xErCtnKS+odKCabA==} + cpu: [arm64] + os: [android] + + '@yuku-analyzer/binding-darwin-arm64@0.8.3': + resolution: {integrity: sha512-2SULWSl6ZJb9mSmlJTw+tzHtYu4PUV50TQDnB3x3VpxHNextIj4Cc2MPO+KYxnETpKliD9ufaxjViU0EPbaRKw==} + cpu: [arm64] + os: [darwin] + + '@yuku-analyzer/binding-darwin-x64@0.8.3': + resolution: {integrity: sha512-CUnZOy4xKlEZyZddO14sodw7dxlJjm+ELTRRvIStf+Q3UVIwqH8gfvrQc1oFFWdYAQxMNVG+xtzAkcC1wL0IAA==} + cpu: [x64] + os: [darwin] + + '@yuku-analyzer/binding-freebsd-x64@0.8.3': + resolution: {integrity: sha512-hmzVEB0hl1NwDw0WhTam9BL5MB+WQ23CCWeB0PN5o7+8x/k69v816VipV+67eFkagjWEFkF32c586qYUT0H5wQ==} + cpu: [x64] + os: [freebsd] + + '@yuku-analyzer/binding-linux-arm-gnu@0.8.3': + resolution: {integrity: sha512-N7o78i1TGloyw9hNbFzD5qts4DQFz+pMBywPyPZ0P4asTjCIZFxQlJwQyvFIqI/ddPT6WSMbwyIdwnA4HNQP4w==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm-musl@0.8.3': + resolution: {integrity: sha512-G/7tB72G7nkNHHd6kW0wUjfCCJHNAXHjWb5zFusLhR5JR/qG1mtPCHZKh8kcYuXVtdx10EQUBvDvwYR8qcg8Fw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-arm64-gnu@0.8.3': + resolution: {integrity: sha512-RzZs4PTRMZkOKlxRz3TgQcwYURqsNDJQsCZiGDsMr6oujUenAA55g83G8R4qrp4AP8XzupuctiN2Mj94ix5C9w==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm64-musl@0.8.3': + resolution: {integrity: sha512-bhVhTXNkSmIY4XW7UBHjv/FcFzIKFlWAdYl7JgznwoN9f30Gm75hakEImFVNI1Cyapo1IgDzBttBEkcgtr3hjQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-x64-gnu@0.8.3': + resolution: {integrity: sha512-GchPBviJ2WobjhNwEUb7csnCTa900jwUy98OIhvJ0fktlMXSw4a49jztUobIaThvR1prfa280XcIwwUpFrTJtQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-x64-musl@0.8.3': + resolution: {integrity: sha512-FmKdZ8eJjP405zsjkfCq78L5+zLYMfh2jit5xVUkc5FHFkekILTP3/l4A5WbAg3vSlsHuU8IK8qTMP/I/DdjnQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-win32-arm64@0.8.3': + resolution: {integrity: sha512-QkpBczJfr462MvOY7kWXfv0NkLmjiUNaPwwty2lwZv2Xk1NKuYPiAjcdyqC59nsoftp1xf8qjDKUtF5ykuhoRQ==} + cpu: [arm64] + os: [win32] + + '@yuku-analyzer/binding-win32-x64@0.8.3': + resolution: {integrity: sha512-bgdgP+I/+lYIaG6xWv0L8VpwSVZ+FUsqTju+xFGhU2mkhgmU1e5PYle7Vl8ZsS7R4Udf28j66L1lXeLEyWvwhg==} + cpu: [x64] + os: [win32] + + '@yuku-toolchain/types@0.8.3': + resolution: {integrity: sha512-9LN3HYs3A9qSPVFunsxlbfwBcUgexti3TmhOzIxB/UH8zFuaHQJXTRDcN17DW6cp1GsyZtiZA7f18uIra36Jag==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.11.10: + resolution: {integrity: sha512-35JEvJ5/KKlbCHjMCsONI2w6HE88STjVdHk+C7d8LtcFxUjZR1KeLP9izofn2qs0KUxX5r4z73bwH/rd+JHacw==} + engines: {node: '>=6.0.0'} + hasBin: true + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} + engines: {node: '>=20.18.1'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cnfast@0.1.0: + resolution: {integrity: sha512-rH0jBKeLkVrK7NsZ5Ba2l7WdMBmm1k0FMpABeXUU1PgTUxbz3261gEuCSsrYuXo4BwAe3yCcIbQ93YyS52lOGQ==} + hasBin: true + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-uri@3.1.5: + resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + framer-motion@12.43.0: + resolution: {integrity: sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fumadocs-core@16.14.0: + resolution: {integrity: sha512-CQBsVm2XoxytoK5iTxd2Q3L76XBXY9yrWdThH9iJxZPcZ4aHED7YJCYuHPHZDIWg80fy1UAgVc6ogfE+24jTDA==} + peerDependencies: + '@mdx-js/mdx': '*' + '@mixedbread/sdk': 0.x.x + '@orama/core': 1.x.x + '@oramacloud/client': 2.x.x + '@tanstack/react-router': 1.x.x + '@types/estree-jsx': '*' + '@types/hast': '*' + '@types/mdast': '*' + '@types/react': '*' + algoliasearch: 5.x.x + flexsearch: '*' + lucide-react: '*' + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x || 8.x.x + waku: '*' + zod: 4.x.x + peerDependenciesMeta: + '@mdx-js/mdx': + optional: true + '@mixedbread/sdk': + optional: true + '@orama/core': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/estree-jsx': + optional: true + '@types/hast': + optional: true + '@types/mdast': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + flexsearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true + + fumadocs-mdx@15.2.1: + resolution: {integrity: sha512-lyx35MAFAj9yuLPudNoRGGvauZlT1xRLLw17P0jnvhXikrJNC8mAeg/4WIity5K+3V6ZetBQ2PYIcnli450vMg==} + hasBin: true + peerDependencies: + '@fumadocs/satteri': 0.x.x + '@types/mdast': '*' + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: ^16.7.0 + mdast-util-directive: '*' + next: ^15.3.0 || ^16.0.0 + react: ^19.2.0 + rolldown: '*' + satteri: ^0.9.4 + vite: 7.x.x || 8.x.x + peerDependenciesMeta: + '@fumadocs/satteri': + optional: true + '@types/mdast': + optional: true + '@types/mdx': + optional: true + '@types/react': + optional: true + mdast-util-directive: + optional: true + next: + optional: true + react: + optional: true + rolldown: + optional: true + satteri: + optional: true + vite: + optional: true + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lit-element@4.2.2: + resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} + + lit-html@3.3.3: + resolution: {integrity: sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==} + + lit@3.3.3: + resolution: {integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lucide-react@1.28.0: + resolution: {integrity: sha512-fARAFJULsGuDDydjp6+6blekG/sBIM29TerzLjc9bQUKAcEfrSc4ZQKb25KRz4OMKd87cZTb5dgq0w/T6KufVg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@1.1.0: + resolution: {integrity: sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + motion-dom@12.43.0: + resolution: {integrity: sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==} + + motion-utils@12.39.0: + resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} + + motion@12.43.0: + resolution: {integrity: sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.2.12: + resolution: {integrity: sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-to-yarn@3.2.0: + resolution: {integrity: sha512-K1HmQeZT2HrjpsR6KgqbN2FAXL2NrJJmNUSD9ck7HGTVu1JKXox8n9SB+tjbU8m8JGLF4OscrroPepew/L7/Xw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} + engines: {node: ^10 || ^12 || >=14} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 + + react-medium-image-zoom@5.4.8: + resolution: {integrity: sha512-72CIldEUaPejjcaDOYIeDsGlWzNKpmxyKgiPi1LBCkWCIGHDLlA2KTeo2uNtmN/m72Y3k/2uWDfon9SDiPbHaA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + reselect@5.2.0: + resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + + serve@14.2.6: + resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} + engines: {node: '>= 14'} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@4.4.1: + resolution: {integrity: sha512-rFP+iYKzjLEIqiMiKANhARqiAbk4deDhWnBtnUO/K0D0dPxMGDH4N0FVfBY/VeI+lPrV4wNGCHQZp7EOr7NNBw==} + engines: {node: '>=20'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + + undici@7.29.0: + resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} + engines: {node: '>=20.18.1'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yuku-analyzer@0.8.3: + resolution: {integrity: sha512-u/kRdlS/Hcqo78pevGoKCcjM4ymcquFlw2qxZgZy6TPkyoExJLww8pnbR8Yck8wO7f9fQ4ymjCdFlhJ1VTzzBw==} + + yuku-ast@0.8.3: + resolution: {integrity: sha512-8x34yU5uhHUnJXzy2Qvjvec/vE9BzS0/2khVT1MsLmSLO/P8Q1Wp8IxHv+IhD+HMYETk6kherOSvP4JPWw2joQ==} + + zbsearch@3.3.4: + resolution: {integrity: sha512-xGsv9rIwrili/fpLpVwmnCovEcvaAJg1ey+3Ur0+m3x1mnGoVO71iAwn4op420QLGNsQJNmScZjFq5TQ+cRi/g==} + engines: {node: '>= 20.0.0'} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@babel/runtime@7.29.7': {} + + '@base-ui/react@1.6.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@base-ui/utils': 0.3.1(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@base-ui/utils@0.3.1(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + reselect: 5.2.0 + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/utils@0.2.12': {} + + '@fuma-translate/react@1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@fumadocs/base-ui@16.14.0(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)': + dependencies: + '@base-ui/react': 1.6.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fuma-translate/react': 1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fumadocs/tailwind': 0.1.1(tailwindcss@4.3.3) + class-variance-authority: 0.7.1 + cnfast: 0.1.0 + fumadocs-core: 16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3) + lucide-react: 1.28.0(react@19.2.8) + motion: 12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next-themes: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-remove-scroll: 2.7.2(@types/react@19.2.18)(react@19.2.8) + rehype-raw: 7.0.0 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.1 + unist-util-visit: 5.1.0 + optionalDependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + transitivePeerDependencies: + - '@date-fns/tz' + - '@emotion/is-prop-valid' + - date-fns + - tailwindcss + + '@fumadocs/tailwind@0.1.1(tailwindcss@4.3.3)': + optionalDependencies: + tailwindcss: 4.3.3 + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@lit-labs/ssr-dom-shim@1.6.0': {} + + '@lit/context@1.1.6': + dependencies: + '@lit/reactive-element': 2.1.2 + + '@lit/react@1.0.8(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@lit/reactive-element@2.1.2': + dependencies: + '@lit-labs/ssr-dom-shim': 1.6.0 + + '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.18.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.18.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0(supports-color@7.2.0) + remark-mdx: 3.1.1(supports-color@7.2.0) + remark-parse: 11.0.0(supports-color@7.2.0) + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@next/env@16.2.12': {} + + '@next/swc-darwin-arm64@16.2.12': + optional: true + + '@next/swc-darwin-x64@16.2.12': + optional: true + + '@next/swc-linux-arm64-gnu@16.2.12': + optional: true + + '@next/swc-linux-arm64-musl@16.2.12': + optional: true + + '@next/swc-linux-x64-gnu@16.2.12': + optional: true + + '@next/swc-linux-x64-musl@16.2.12': + optional: true + + '@next/swc-win32-arm64-msvc@16.2.12': + optional: true + + '@next/swc-win32-x64-msvc@16.2.12': + optional: true + + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.18)(react@19.2.8)': + dependencies: + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + '@radix-ui/react-icons@1.3.2(react@19.2.8)': + dependencies: + react: 19.2.8 + + '@radix-ui/react-slot@1.3.3(@types/react@19.2.18)(react@19.2.8)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.18)(react@19.2.8) + react: 19.2.8 + optionalDependencies: + '@types/react': 19.2.18 + + '@shikijs/core@4.4.1': + dependencies: + '@shikijs/primitive': 4.4.1 + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + + '@shikijs/primitive@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + + '@shikijs/types@4.4.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@skyra/discord-components-core@4.0.2': + dependencies: + '@lit/context': 1.1.6 + lit: 3.3.3 + + '@skyra/discord-components-react@4.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@lit/react': 1.0.8(@types/react@19.2.18) + '@skyra/discord-components-core': 4.0.2 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + + '@standard-schema/spec@1.1.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.3.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.5 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/postcss@4.3.3': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.25 + tailwindcss: 4.3.3 + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.14': {} + + '@types/ms@2.1.0': {} + + '@types/node@26.1.2': + dependencies: + undici-types: 8.3.0 + + '@types/react-dom@19.2.4(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + + '@types/trusted-types@2.0.7': {} + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.3.3': {} + + '@yuku-analyzer/binding-android-arm64@0.8.3': + optional: true + + '@yuku-analyzer/binding-darwin-arm64@0.8.3': + optional: true + + '@yuku-analyzer/binding-darwin-x64@0.8.3': + optional: true + + '@yuku-analyzer/binding-freebsd-x64@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-arm-gnu@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-arm-musl@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-arm64-gnu@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-arm64-musl@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-x64-gnu@0.8.3': + optional: true + + '@yuku-analyzer/binding-linux-x64-musl@0.8.3': + optional: true + + '@yuku-analyzer/binding-win32-arm64@0.8.3': + optional: true + + '@yuku-analyzer/binding-win32-x64@0.8.3': + optional: true + + '@yuku-toolchain/types@0.8.3': {} + + '@zeit/schemas@2.36.0': {} + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.5 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + arch@2.2.0: {} + + arg@5.0.2: {} + + astring@1.9.0: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.11.10: {} + + boolbase@1.0.0: {} + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.0.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.18: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + bytes@3.0.0: {} + + bytes@3.1.2: {} + + camelcase@7.0.1: {} + + caniuse-lite@1.0.30001806: {} + + ccount@2.0.1: {} + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.2.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.29.0 + whatwg-mimetype: 4.0.0 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-boxes@3.0.0: {} + + client-only@0.0.1: {} + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + + clsx@2.1.1: {} + + cnfast@0.1.0: {} + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + comma-separated-tokens@2.0.3: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1(supports-color@7.2.0): + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9(supports-color@7.2.0) + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.2.2: {} + + csstype@3.2.3: {} + + debug@2.6.9(supports-color@7.2.0): + dependencies: + ms: 2.0.0 + optionalDependencies: + supports-color: 7.2.0 + + debug@4.4.3(supports-color@7.2.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + deep-extend@0.6.0: {} + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + enhanced-resolve@5.24.5: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + entities@4.5.0: {} + + entities@6.0.1: {} + + entities@7.0.1: {} + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.18.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-uri@3.1.5: {} + + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + + framer-motion@12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + motion-dom: 12.43.0 + motion-utils: 12.39.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3): + dependencies: + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3(supports-color@7.2.0) + hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) + mdast-util-mdx: 3.0.0(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + npm-to-yarn: 3.2.0 + remark: 15.0.1(supports-color@7.2.0) + remark-gfm: 4.0.1(supports-color@7.2.0) + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.1 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + zbsearch: 3.3.4 + optionalDependencies: + '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/react': 19.2.18 + lucide-react: 1.28.0(react@19.2.8) + next: 16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + zod: 4.4.3 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@15.2.1(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(supports-color@7.2.0): + dependencies: + '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) + '@standard-schema/spec': 1.1.0 + chokidar: 5.0.0 + esbuild: 0.28.1 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.14.0(@mdx-js/mdx@3.1.1(supports-color@7.2.0))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.28.0(react@19.2.8))(next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@7.2.0)(zod@4.4.3) + github-slugger: 2.0.0 + magic-string: 1.1.0 + mdast-util-mdx: 3.0.0(supports-color@7.2.0) + picocolors: 1.1.1 + picomatch: 4.0.5 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + yuku-analyzer: 0.8.3 + zod: 4.4.3 + optionalDependencies: + '@types/mdast': 4.0.4 + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + transitivePeerDependencies: + - supports-color + + get-nonce@1.0.1: {} + + get-stream@6.0.1: {} + + github-slugger@2.0.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.3 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3(supports-color@7.2.0): + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + + html-void-elements@3.0.0: {} + + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + + human-signals@2.1.0: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ini@1.3.8: {} + + inline-style-parser@0.2.7: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-hexadecimal@2.0.1: {} + + is-plain-obj@4.1.0: {} + + is-port-reachable@4.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + jiti@2.7.0: {} + + json-schema-traverse@1.0.0: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lit-element@4.2.2: + dependencies: + '@lit-labs/ssr-dom-shim': 1.6.0 + '@lit/reactive-element': 2.1.2 + lit-html: 3.3.3 + + lit-html@3.3.3: + dependencies: + '@types/trusted-types': 2.0.7 + + lit@3.3.3: + dependencies: + '@lit/reactive-element': 2.1.2 + lit-element: 4.2.2 + lit-html: 3.3.3 + + longest-streak@3.1.0: {} + + lucide-react@1.28.0(react@19.2.8): + dependencies: + react: 19.2.8 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@1.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2(supports-color@7.2.0) + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0(supports-color@7.2.0): + dependencies: + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0(supports-color@7.2.0) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-table: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0(supports-color@7.2.0): + dependencies: + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + merge-stream@2.0.0: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2(supports-color@7.2.0): + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3(supports-color@7.2.0) + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mime-db@1.33.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mimic-fn@2.1.0: {} + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.18 + + minimist@1.2.8: {} + + motion-dom@12.43.0: + dependencies: + motion-utils: 12.39.0 + + motion-utils@12.39.0: {} + + motion@12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + framer-motion: 12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + ms@2.0.0: {} + + ms@2.1.3: {} + + nanoid@3.3.16: {} + + negotiator@0.6.4: {} + + next-themes@0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + next@16.2.12(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + '@next/env': 16.2.12 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.11.10 + caniuse-lite: 1.0.30001806 + postcss: 8.4.31 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(react@19.2.8) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.12 + '@next/swc-darwin-x64': 16.2.12 + '@next/swc-linux-arm64-gnu': 16.2.12 + '@next/swc-linux-arm64-musl': 16.2.12 + '@next/swc-linux-x64-gnu': 16.2.12 + '@next/swc-linux-x64-musl': 16.2.12 + '@next/swc-win32-arm64-msvc': 16.2.12 + '@next/swc-win32-x64-msvc': 16.2.12 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-to-yarn@3.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + on-headers@1.1.0: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-is-inside@1.0.2: {} + + path-key@3.1.1: {} + + path-to-regexp@3.3.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.5: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.25: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-information@7.2.0: {} + + range-parser@1.2.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react-medium-image-zoom@5.4.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react-remove-scroll@2.7.2(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.2.8) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.2.8) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + get-nonce: 1.0.1 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react@19.2.8: {} + + readdirp@5.0.0: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0(supports-color@7.2.0): + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0(supports-color@7.2.0) + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0(supports-color@7.2.0) + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1(supports-color@7.2.0): + dependencies: + mdast-util-mdx: 3.0.0(supports-color@7.2.0) + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1(supports-color@7.2.0): + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0(supports-color@7.2.0) + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + require-from-string@2.0.2: {} + + reselect@5.2.0: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scheduler@0.27.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + semver@7.8.5: + optional: true + + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.6(supports-color@7.2.0): + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.18.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1(supports-color@7.2.0) + is-port-reachable: 4.0.0 + serve-handler: 6.1.7 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@4.4.1: + dependencies: + '@shikijs/core': 4.4.1 + '@shikijs/engine-javascript': 4.4.1 + '@shikijs/engine-oniguruma': 4.4.1 + '@shikijs/langs': 4.4.1 + '@shikijs/themes': 4.4.1 + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + signal-exit@3.0.7: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + styled-jsx@5.1.6(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tailwindcss@4.3.3: {} + + tapable@2.3.3: {} + + tinyexec@1.3.0: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@2.8.1: {} + + type-fest@2.19.0: {} + + typescript@6.0.3: {} + + undici-types@8.3.0: {} + + undici@7.29.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 + + vary@1.1.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + web-namespaces@2.0.1: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + yaml@2.9.0: {} + + yuku-analyzer@0.8.3: + dependencies: + '@yuku-toolchain/types': 0.8.3 + yuku-ast: 0.8.3 + optionalDependencies: + '@yuku-analyzer/binding-android-arm64': 0.8.3 + '@yuku-analyzer/binding-darwin-arm64': 0.8.3 + '@yuku-analyzer/binding-darwin-x64': 0.8.3 + '@yuku-analyzer/binding-freebsd-x64': 0.8.3 + '@yuku-analyzer/binding-linux-arm-gnu': 0.8.3 + '@yuku-analyzer/binding-linux-arm-musl': 0.8.3 + '@yuku-analyzer/binding-linux-arm64-gnu': 0.8.3 + '@yuku-analyzer/binding-linux-arm64-musl': 0.8.3 + '@yuku-analyzer/binding-linux-x64-gnu': 0.8.3 + '@yuku-analyzer/binding-linux-x64-musl': 0.8.3 + '@yuku-analyzer/binding-win32-arm64': 0.8.3 + '@yuku-analyzer/binding-win32-x64': 0.8.3 + + yuku-ast@0.8.3: + dependencies: + '@yuku-toolchain/types': 0.8.3 + + zbsearch@3.3.4: {} + + zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..dbb26c82 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + esbuild: true + sharp: true diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 00000000..297374d8 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/guide/.vuepress/public/bot-profile.png b/public/bot-profile.png similarity index 100% rename from guide/.vuepress/public/bot-profile.png rename to public/bot-profile.png diff --git a/guide/.vuepress/public/favicon.ico b/public/favicon.ico similarity index 100% rename from guide/.vuepress/public/favicon.ico rename to public/favicon.ico diff --git a/public/images/guide/app-msg-cmd/app_user_cmd_example.png b/public/images/guide/app-msg-cmd/app_user_cmd_example.png new file mode 100644 index 00000000..12af4def Binary files /dev/null and b/public/images/guide/app-msg-cmd/app_user_cmd_example.png differ diff --git a/public/images/guide/app-user-cmd/app_cmd_example.png b/public/images/guide/app-user-cmd/app_cmd_example.png new file mode 100644 index 00000000..c48bbc25 Binary files /dev/null and b/public/images/guide/app-user-cmd/app_cmd_example.png differ diff --git a/public/images/guide/cb-setup/copy-token.png b/public/images/guide/cb-setup/copy-token.png new file mode 100644 index 00000000..ba6a7cca Binary files /dev/null and b/public/images/guide/cb-setup/copy-token.png differ diff --git a/public/images/guide/cb-setup/inv-your-bot.png b/public/images/guide/cb-setup/inv-your-bot.png new file mode 100644 index 00000000..b2f2314d Binary files /dev/null and b/public/images/guide/cb-setup/inv-your-bot.png differ diff --git a/public/images/guide/cb-setup/name-your-app.png b/public/images/guide/cb-setup/name-your-app.png new file mode 100644 index 00000000..a381a447 Binary files /dev/null and b/public/images/guide/cb-setup/name-your-app.png differ diff --git a/public/images/guide/cb-setup/nav-to-bot-cat.png b/public/images/guide/cb-setup/nav-to-bot-cat.png new file mode 100644 index 00000000..eef7eb12 Binary files /dev/null and b/public/images/guide/cb-setup/nav-to-bot-cat.png differ diff --git a/public/images/guide/cb-setup/nav-to-prem1.png b/public/images/guide/cb-setup/nav-to-prem1.png new file mode 100644 index 00000000..395510bf Binary files /dev/null and b/public/images/guide/cb-setup/nav-to-prem1.png differ diff --git a/public/images/guide/cb-setup/nav-to-prem2.png b/public/images/guide/cb-setup/nav-to-prem2.png new file mode 100644 index 00000000..bdd03aa0 Binary files /dev/null and b/public/images/guide/cb-setup/nav-to-prem2.png differ diff --git a/public/images/guide/cb-setup/new-app.png b/public/images/guide/cb-setup/new-app.png new file mode 100644 index 00000000..9b1df61d Binary files /dev/null and b/public/images/guide/cb-setup/new-app.png differ diff --git a/public/images/guide/cb-setup/paste-token.png b/public/images/guide/cb-setup/paste-token.png new file mode 100644 index 00000000..3d682668 Binary files /dev/null and b/public/images/guide/cb-setup/paste-token.png differ diff --git a/public/images/guide/cb-setup/reset-token.png b/public/images/guide/cb-setup/reset-token.png new file mode 100644 index 00000000..18751ba1 Binary files /dev/null and b/public/images/guide/cb-setup/reset-token.png differ diff --git a/public/images/guide/cb-setup/save-btn.png b/public/images/guide/cb-setup/save-btn.png new file mode 100644 index 00000000..647be4b2 Binary files /dev/null and b/public/images/guide/cb-setup/save-btn.png differ diff --git a/public/images/guide/cb-setup/setup-intents.png b/public/images/guide/cb-setup/setup-intents.png new file mode 100644 index 00000000..3816a6b6 Binary files /dev/null and b/public/images/guide/cb-setup/setup-intents.png differ diff --git a/guide/.vuepress/public/images/guide/creating-cc/0.png b/public/images/guide/creating-cc/0.png similarity index 100% rename from guide/.vuepress/public/images/guide/creating-cc/0.png rename to public/images/guide/creating-cc/0.png diff --git a/guide/.vuepress/public/images/guide/creating-cc/1.png b/public/images/guide/creating-cc/1.png similarity index 100% rename from guide/.vuepress/public/images/guide/creating-cc/1.png rename to public/images/guide/creating-cc/1.png diff --git a/public/images/guide/creating-cc/create-button.png b/public/images/guide/creating-cc/create-button.png new file mode 100644 index 00000000..09159464 Binary files /dev/null and b/public/images/guide/creating-cc/create-button.png differ diff --git a/guide/.vuepress/public/images/guide/get-started/get-started-join-event.png b/public/images/guide/getting-started/join-event.png similarity index 100% rename from guide/.vuepress/public/images/guide/get-started/get-started-join-event.png rename to public/images/guide/getting-started/join-event.png diff --git a/guide/.vuepress/public/images/guide/get-started/get-started-slash-cmd.png b/public/images/guide/getting-started/slash-cmd.png similarity index 100% rename from guide/.vuepress/public/images/guide/get-started/get-started-slash-cmd.png rename to public/images/guide/getting-started/slash-cmd.png diff --git a/guide/.vuepress/public/images/guide/get-started/get-started-word.png b/public/images/guide/getting-started/word.png similarity index 100% rename from guide/.vuepress/public/images/guide/get-started/get-started-word.png rename to public/images/guide/getting-started/word.png diff --git a/public/images/guide/templates/clone-commands.png b/public/images/guide/templates/clone-commands.png new file mode 100644 index 00000000..6e3b6d7c Binary files /dev/null and b/public/images/guide/templates/clone-commands.png differ diff --git a/guide/.vuepress/public/images/guide/templates/2.png b/public/images/guide/templates/cloning.png similarity index 100% rename from guide/.vuepress/public/images/guide/templates/2.png rename to public/images/guide/templates/cloning.png diff --git a/public/images/guide/templates/create-button.png b/public/images/guide/templates/create-button.png new file mode 100644 index 00000000..09159464 Binary files /dev/null and b/public/images/guide/templates/create-button.png differ diff --git a/public/images/guide/templates/main-view.png b/public/images/guide/templates/main-view.png new file mode 100644 index 00000000..e6202376 Binary files /dev/null and b/public/images/guide/templates/main-view.png differ diff --git a/public/images/guide/templates/select-wordle.png b/public/images/guide/templates/select-wordle.png new file mode 100644 index 00000000..f11cb525 Binary files /dev/null and b/public/images/guide/templates/select-wordle.png differ diff --git a/public/images/guide/word-new-trigger/word_new_contains.png b/public/images/guide/word-new-trigger/word_new_contains.png new file mode 100644 index 00000000..1a9d7849 Binary files /dev/null and b/public/images/guide/word-new-trigger/word_new_contains.png differ diff --git a/guide/Other/images/embedBuilder/1.png b/public/images/other/embedBuilder/1.png similarity index 100% rename from guide/Other/images/embedBuilder/1.png rename to public/images/other/embedBuilder/1.png diff --git a/guide/Other/images/embedBuilder/2.png b/public/images/other/embedBuilder/2.png similarity index 100% rename from guide/Other/images/embedBuilder/2.png rename to public/images/other/embedBuilder/2.png diff --git a/guide/Other/images/embedBuilder/3.png b/public/images/other/embedBuilder/3.png similarity index 100% rename from guide/Other/images/embedBuilder/3.png rename to public/images/other/embedBuilder/3.png diff --git a/guide/Other/images/embedBuilder/4.png b/public/images/other/embedBuilder/4.png similarity index 100% rename from guide/Other/images/embedBuilder/4.png rename to public/images/other/embedBuilder/4.png diff --git a/guide/Other/images/embedBuilder/5.png b/public/images/other/embedBuilder/5.png similarity index 100% rename from guide/Other/images/embedBuilder/5.png rename to public/images/other/embedBuilder/5.png diff --git a/guide/Other/images/embedBuilder/6.png b/public/images/other/embedBuilder/6.png similarity index 100% rename from guide/Other/images/embedBuilder/6.png rename to public/images/other/embedBuilder/6.png diff --git a/guide/Other/images/embedBuilder/embedInfo.png b/public/images/other/embedBuilder/embedInfo.png similarity index 100% rename from guide/Other/images/embedBuilder/embedInfo.png rename to public/images/other/embedBuilder/embedInfo.png diff --git a/guide/Other/images/welcomer/1.png b/public/images/other/welcomer/1.png similarity index 100% rename from guide/Other/images/welcomer/1.png rename to public/images/other/welcomer/1.png diff --git a/guide/Other/images/welcomer/2.png b/public/images/other/welcomer/2.png similarity index 100% rename from guide/Other/images/welcomer/2.png rename to public/images/other/welcomer/2.png diff --git a/guide/Other/images/welcomer/3.png b/public/images/other/welcomer/3.png similarity index 100% rename from guide/Other/images/welcomer/3.png rename to public/images/other/welcomer/3.png diff --git a/guide/Other/images/welcomer/4.png b/public/images/other/welcomer/4.png similarity index 100% rename from guide/Other/images/welcomer/4.png rename to public/images/other/welcomer/4.png diff --git a/guide/Other/images/welcomer/5.png b/public/images/other/welcomer/5.png similarity index 100% rename from guide/Other/images/welcomer/5.png rename to public/images/other/welcomer/5.png diff --git a/guide/Other/images/welcomer/6.png b/public/images/other/welcomer/6.png similarity index 100% rename from guide/Other/images/welcomer/6.png rename to public/images/other/welcomer/6.png diff --git a/guide/.vuepress/public/images/triggers/boost/0.png b/public/images/triggers/boost/0.png similarity index 100% rename from guide/.vuepress/public/images/triggers/boost/0.png rename to public/images/triggers/boost/0.png diff --git a/guide/.vuepress/public/images/triggers/join-leave/0.png b/public/images/triggers/join-leave/0.png similarity index 100% rename from guide/.vuepress/public/images/triggers/join-leave/0.png rename to public/images/triggers/join-leave/0.png diff --git a/scripts/build-docs-pages.mjs b/scripts/build-docs-pages.mjs new file mode 100644 index 00000000..a97442a2 --- /dev/null +++ b/scripts/build-docs-pages.mjs @@ -0,0 +1,88 @@ +/** + * Regenerates `docs-pages.json`, which the old VuePress build emitted as a side + * effect of its search plugin (guide/.vuepress/parseTags.js). It is served at + * /docs-pages.json and consumed outside this repo, so the shape is kept as-is: + * { title, path, content, tags }. + * + * Runs after `next build`, reading the exported HTML in `out/`. + */ +import fs from "node:fs"; +import path from "node:path"; +import * as cheerio from "cheerio"; + +const OUT = path.join(process.cwd(), "out"); +const CONTENT = path.join(process.cwd(), "content/docs"); + +/** difficulty labels were never treated as tags */ +const NOT_A_TAG = /Easy|Difficult|Read Below|Medium|Bugged/i; + +function walk(dir, test, found = []) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) walk(full, test, found); + else if (test(entry.name)) found.push(full); + } + return found; +} + +/** route -> source .mdx, so tags can be read off the original Badge props */ +const sources = new Map(); +for (const file of walk(CONTENT, (n) => n.endsWith(".mdx"))) { + const route = + "/" + + path + .relative(CONTENT, file) + .replace(/\.mdx$/, "") + .replace(/^\(functions\)[/\\]/, "") + .split(path.sep) + .join("/"); + sources.set(route === "/index" ? "/" : route, file); +} + +function metaFor(route) { + const file = sources.get(route); + if (!file) return { title: null, tags: [] }; + + const raw = fs.readFileSync(file, "utf8"); + const title = + raw + .match(/^title:\s*(.*)$/m)?.[1] + ?.trim() + .replace(/^"|"$/g, "") ?? null; + + const tags = []; + for (const [, text] of raw.matchAll(/]*\btext="([^"]*)"/g)) { + if (text.length > 1 && !NOT_A_TAG.test(text)) tags.push(text); + } + // the old plugin also indexed the bare function name + if (title?.startsWith("$")) tags.push(title.slice(1)); + + return { title, tags }; +} + +const pages = []; +for (const file of walk(OUT, (n) => n.endsWith(".html"))) { + if (file.includes(`${path.sep}_next${path.sep}`)) continue; + + const rel = path + .relative(OUT, file) + .replace(/\.html$/, "") + .split(path.sep) + .join("/"); + if (rel === "404" || rel === "_not-found") continue; + const route = rel === "index" ? "/" : "/" + rel; + + const $ = cheerio.load(fs.readFileSync(file, "utf8")); + const content = $(".prose").first().html(); + if (content === null) continue; + + const { title, tags } = metaFor(route); + pages.push({ title, path: route, content, tags }); +} + +pages.sort((a, b) => a.path.localeCompare(b.path)); +fs.writeFileSync( + path.join(OUT, "docs-pages.json"), + JSON.stringify(pages, null, 2), +); +console.log(`[docs-pages] wrote ${pages.length} pages to out/docs-pages.json`); diff --git a/source.config.ts b/source.config.ts new file mode 100644 index 00000000..eaf7ea60 --- /dev/null +++ b/source.config.ts @@ -0,0 +1,45 @@ +import { defineConfig } from "fumadocs-mdx/config"; +import { rehypeCodeDefaultOptions } from "fumadocs-core/mdx-plugins"; +import type { ShikiTransformer } from "shiki"; +import { remarkCooldowns } from "./lib/remark/cooldowns"; +import { remarkFunctionLinks } from "./lib/remark/function-links"; +import { remarkCachedImages } from "./lib/remark/images"; +import { cclang, cc_dark, cc_light } from "./lib/cclang"; + +const transformerLineNumbers: ShikiTransformer = { + name: "shiki-transformer-line-numbers", + pre(node) { + node.properties["data-line-numbers"] = ""; + }, +}; + +export default defineConfig({ + mdxOptions: { + remarkPlugins: (v) => [ + remarkCooldowns, + remarkFunctionLinks, + remarkCachedImages, + ...v, + ], + + remarkImageOptions: { + external: false, + onError: "ignore", + }, + + rehypeCodeOptions: { + ...rehypeCodeDefaultOptions, + themes: { + light: cc_light, + dark: cc_dark, + }, + transformers: [ + ...(rehypeCodeDefaultOptions.transformers ?? []), + transformerLineNumbers, + ], + langs: [ + cclang, + ], + }, + }, +}); diff --git a/styles/image-zoom.css b/styles/image-zoom.css new file mode 100644 index 00000000..23e0e96b --- /dev/null +++ b/styles/image-zoom.css @@ -0,0 +1,77 @@ +[data-rmiz] { + display: block; + position: relative; +} + +[data-rmiz-ghost] { + pointer-events: none; + position: absolute; +} + +[data-rmiz-btn-zoom], +[data-rmiz-btn-unzoom] { + display: none; +} + +[data-rmiz-content='found'] img { + cursor: zoom-in; +} + +[data-rmiz-modal][open] { + width: 100vw /* fallback */; + width: 100dvw; + + height: 100vh /* fallback */; + height: 100dvh; + + background-color: transparent; + max-width: none; + max-height: none; + margin: 0; + padding: 0; + position: fixed; + overflow: hidden; +} + +[data-rmiz-modal]:focus-visible { + outline: none; +} + +[data-rmiz-modal-overlay] { + transition: background-color 0.3s; + position: absolute; + inset: 0; +} + +[data-rmiz-modal-overlay='visible'] { + background-color: var(--color-fd-background); +} + +[data-rmiz-modal-overlay='hidden'] { + background-color: transparent; +} + +[data-rmiz-modal-content] { + width: 100%; + height: 100%; + position: relative; +} + +[data-rmiz-modal]::backdrop { + display: none; +} + +[data-rmiz-modal-img] { + cursor: zoom-out; + image-rendering: high-quality; + transform-origin: 0 0; + transition: transform 0.3s; + position: absolute; +} + +@media (prefers-reduced-motion: reduce) { + [data-rmiz-modal-overlay], + [data-rmiz-modal-img] { + transition-duration: 0.01ms !important; + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..67086f3f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "paths": { + "@/*": ["./*"] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": ["node_modules"] +}