diff options
author | Ven <vendicated@riseup.net> | 2022-11-14 18:05:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-14 18:05:41 +0100 |
commit | 82e444e19635a72d2e1c4d043840bdfd358fa120 (patch) | |
tree | 85e4bc94fb6c9a7bebc3a56e311fdf967aeeb2d5 /src/plugins/spotifyShareCommands.ts | |
parent | a96f8a89f36ccb980334da2274385373aa3ffb24 (diff) | |
download | Vencord-82e444e19635a72d2e1c4d043840bdfd358fa120.tar.gz Vencord-82e444e19635a72d2e1c4d043840bdfd358fa120.tar.bz2 Vencord-82e444e19635a72d2e1c4d043840bdfd358fa120.zip |
Less confusing plugin names (bulk plugin rename) (#214)
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Diffstat (limited to 'src/plugins/spotifyShareCommands.ts')
-rw-r--r-- | src/plugins/spotifyShareCommands.ts | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/plugins/spotifyShareCommands.ts b/src/plugins/spotifyShareCommands.ts new file mode 100644 index 0000000..e5b247b --- /dev/null +++ b/src/plugins/spotifyShareCommands.ts @@ -0,0 +1,141 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { ApplicationCommandInputType, sendBotMessage } from "../api/Commands"; +import { migratePluginSettings } from "../api/settings"; +import { Devs } from "../utils/constants"; +import { lazyWebpack } from "../utils/misc"; +import definePlugin from "../utils/types"; +import { filters } from "../webpack"; +import { FluxDispatcher } from "../webpack/common"; + +interface Album { + id: string; + image: { + height: number; + width: number; + url: string; + }; + name: string; +} + +interface Artist { + external_urls: { + spotify: string; + }; + href: string; + id: string; + name: string; + type: "artist" | string; + uri: string; +} + +interface Track { + id: string; + album: Album; + artists: Artist[]; + duration: number; + isLocal: boolean; + name: string; +} + +const Spotify = lazyWebpack(filters.byProps("getPlayerState")); +const MessageCreator = lazyWebpack(filters.byProps("getSendMessageOptionsForReply", "sendMessage")); +const PendingReplyStore = lazyWebpack(filters.byProps("getPendingReply")); + +function sendMessage(channelId, message) { + message = { + // The following are required to prevent Discord from throwing an error + invalidEmojis: [], + tts: false, + validNonShortcutEmojis: [], + ...message + }; + const reply = PendingReplyStore.getPendingReply(channelId); + MessageCreator.sendMessage(channelId, message, void 0, MessageCreator.getSendMessageOptionsForReply(reply)) + .then(() => { + if (reply) { + FluxDispatcher.dispatch({ type: "DELETE_PENDING_REPLY", channelId }); + } + }); +} + +migratePluginSettings("SpotifyShareCommands", "Sendify"); +export default definePlugin({ + name: "SpotifyShareCommands", + description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)", + authors: [Devs.katlyn], + dependencies: ["CommandsAPI"], + commands: [ + { + name: "track", + description: "Send your current Spotify track to chat", + inputType: ApplicationCommandInputType.BUILT_IN, + options: [], + execute: (_, ctx) => { + const track: Track | null = Spotify.getTrack(); + if (track === null) { + sendBotMessage(ctx.channel.id, { + content: "You're not listening to any music." + }); + return; + } + // Note: Due to how Discord handles commands, we need to manually create and send the message + sendMessage(ctx.channel.id, { + content: `https://open.spotify.com/track/${track.id}` + }); + } + }, + { + name: "album", + description: "Send your current Spotify album to chat", + inputType: ApplicationCommandInputType.BUILT_IN, + options: [], + execute: (_, ctx) => { + const track: Track | null = Spotify.getTrack(); + if (track === null) { + sendBotMessage(ctx.channel.id, { + content: "You're not listening to any music." + }); + return; + } + sendMessage(ctx.channel.id, { + content: `https://open.spotify.com/album/${track.album.id}` + }); + } + }, + { + name: "artist", + description: "Send your current Spotify artist to chat", + inputType: ApplicationCommandInputType.BUILT_IN, + options: [], + execute: (_, ctx) => { + const track: Track | null = Spotify.getTrack(); + if (track === null) { + sendBotMessage(ctx.channel.id, { + content: "You're not listening to any music." + }); + return; + } + sendMessage(ctx.channel.id, { + content: track.artists[0].external_urls.spotify + }); + } + } + ] +}); |