A polished BetterDiscord plugin that adds KLIPY as its own GIF source without replacing Discord's built-in GIF picker.
GifSourcePlus adds a separate KLIPY tab next to Discord's native GIFs, Stickers, and Emoji tabs. Discord's original GIF experience stays untouched: Giphy results remain where they are, while KLIPY results appear in their own clean panel.
The plugin is designed for public distribution. It does not include a shared, hidden, or bundled KLIPY API key. Each user enters their own KLIPY developer key locally in BetterDiscord settings.
| Feature | What it does |
|---|---|
| Separate KLIPY tab | Keeps KLIPY results isolated from Discord/Giphy results. |
| Direct GIF sending | Clicking a KLIPY GIF sends it to the current channel immediately. |
| Safe fallback | If Discord's send internals fail, the GIF URL is copied to the clipboard. |
| User-owned API key | No shared key, no embedded secret, no public credential exposure. |
| High-quality media mode | Prefers better KLIPY media fields such as hd and gif for previews and sends. |
| 20-language settings | Settings text, update preference, and API key guide are localized across 20 selectable languages. |
| Ctrl+G shortcut | Optional shortcut opens the GIF picker directly on the KLIPY tab. |
| Update notifications | Checks the public GitHub plugin file and offers one-click updates when a newer version is available. |
| Clean shutdown | Removes injected UI, styles, observers, Flux listeners, timers, and pending requests. |
- Discord desktop with BetterDiscord installed.
- A personal KLIPY API key from KLIPY Developers.
- BetterDiscord plugin access to install a local
.plugin.jsfile.
- Download
GifSourcePlus.plugin.jsfrom this repository, the download button above, or the latest release assets. - Move it into your BetterDiscord plugins folder:
- Windows:
%appdata%\BetterDiscord\plugins
- Windows:
- Open Discord and enable
GifSourcePlusin BetterDiscord settings. - Open the plugin settings.
- Select your settings language, read the built-in API key guide, and paste your KLIPY API key.
GifSourcePlus includes an optional update check, enabled by default. On startup it reads the public raw plugin file from GitHub, compares the metadata version, and shows a BetterDiscord update notification when a newer version is available. Clicking Update replaces the installed GifSourcePlus.plugin.js file.
Users can disable update checks in the plugin settings. Manual updates still work by downloading the latest release asset again.
GifSourcePlus watches for Discord's GIF picker and injects a dedicated KLIPY tab into the existing picker layout. KLIPY search and trending results are rendered in a separate panel with Powered by KLIPY attribution.
When a GIF is clicked, the plugin tries Discord's current message-sending action for the selected channel. If that internal Discord action is unavailable or changes, the plugin falls back to copying the GIF URL so the user can still paste it manually.
For compatibility, the plugin uses current BetterDiscord APIs such as BdApi.Data, BdApi.DOM, BdApi.Net, BdApi.UI, and BdApi.Webpack. Discord internals are not a stable public API, so the plugin combines Webpack store lookups, Flux event resync, DOM observer fallback, and conservative cleanup logic.
- No shared KLIPY API key is bundled.
- Your KLIPY API key is stored only in BetterDiscord local plugin data.
- The plugin does not collect analytics.
- Network requests are limited to KLIPY API calls needed for GIF search/trending and the optional GitHub raw-file update check.
- If message sending fails, only the selected GIF URL is copied to your clipboard as a fallback.
Get your key from:
Keep your key private. Do not post it in screenshots, public issues, commits, support messages, or shared configuration files.
BetterDiscord plugins run inside Discord's desktop client and sometimes rely on Discord internals. GifSourcePlus avoids unnecessary invasive patching, but Discord picker DOM, Flux events, stores, or message action signatures may still change after Discord updates.
If a future Discord update breaks direct sending, the plugin should still fall back to copying the selected GIF URL.
The project is intentionally simple: one plugin file, no production dependencies.
Syntax check:
node --check .\GifSourcePlus.plugin.jsOptional credential string check before publishing:
Select-String -Path .\GifSourcePlus.plugin.js,.\README.md,.\CHANGELOG.md,.\LICENSE -Pattern "api_key|apikey|token|secret|password" -CaseSensitive:$falseExpected matches are documentation and settings labels only, not real credentials.
MIT. See LICENSE.