added search
This commit is contained in:
@@ -2,6 +2,7 @@ import { CacheType, ChatInputCommandInteraction, SlashCommandBuilder } from 'dis
|
|||||||
import { connectToChannelByInteraction } from '../util/helpers';
|
import { connectToChannelByInteraction } from '../util/helpers';
|
||||||
import { forceRequestSong } from '../playback';
|
import { forceRequestSong } from '../playback';
|
||||||
import { getPlayMsg } from '../messages';
|
import { getPlayMsg } from '../messages';
|
||||||
|
import { search } from '../util/downloader';
|
||||||
|
|
||||||
const name = "forceplay"
|
const name = "forceplay"
|
||||||
|
|
||||||
@@ -16,16 +17,27 @@ function register() {
|
|||||||
|
|
||||||
async function execute(interaction: ChatInputCommandInteraction<CacheType>) {
|
async function execute(interaction: ChatInputCommandInteraction<CacheType>) {
|
||||||
try {
|
try {
|
||||||
|
await interaction.deferReply()
|
||||||
connectToChannelByInteraction(interaction)
|
connectToChannelByInteraction(interaction)
|
||||||
|
|
||||||
const url = interaction.options.getString("url")!;
|
const input = interaction.options.getString("url")!;
|
||||||
|
let url: string;
|
||||||
|
|
||||||
|
if (input.startsWith("http")) {
|
||||||
|
url = input
|
||||||
|
} else {
|
||||||
|
url = await search(input)
|
||||||
|
await interaction.editReply(`searching for: ${input}`);
|
||||||
|
console.log(input, url)
|
||||||
|
}
|
||||||
|
|
||||||
await forceRequestSong(interaction, url)
|
await forceRequestSong(interaction, url)
|
||||||
|
|
||||||
const msg = getPlayMsg(url)
|
const msg = getPlayMsg(url)
|
||||||
await interaction.reply(msg);
|
await interaction.editReply(msg);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
await interaction.reply('Coś poszło nie tak :/');
|
await interaction.editReply('Coś poszło nie tak :/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { CacheType, ChatInputCommandInteraction, SlashCommandBuilder } from 'dis
|
|||||||
import { connectToChannelByInteraction } from '../util/helpers';
|
import { connectToChannelByInteraction } from '../util/helpers';
|
||||||
import { requestSong } from '../playback';
|
import { requestSong } from '../playback';
|
||||||
import { getPlayMsg } from '../messages';
|
import { getPlayMsg } from '../messages';
|
||||||
|
import { search } from '../util/downloader';
|
||||||
|
|
||||||
const name = "play"
|
const name = "play"
|
||||||
|
|
||||||
@@ -10,22 +11,33 @@ function register() {
|
|||||||
.setName(name)
|
.setName(name)
|
||||||
.setDescription('YT')
|
.setDescription('YT')
|
||||||
.addStringOption((option) => option.setName("url")
|
.addStringOption((option) => option.setName("url")
|
||||||
.setDescription("YT url")
|
.setDescription("YT url/search")
|
||||||
.setRequired(true))
|
.setRequired(true))
|
||||||
}
|
}
|
||||||
|
|
||||||
async function execute(interaction: ChatInputCommandInteraction<CacheType>) {
|
async function execute(interaction: ChatInputCommandInteraction<CacheType>) {
|
||||||
try {
|
try {
|
||||||
|
await interaction.deferReply()
|
||||||
connectToChannelByInteraction(interaction)
|
connectToChannelByInteraction(interaction)
|
||||||
|
|
||||||
const url = interaction.options.getString("url")!;
|
const input = interaction.options.getString("url")!;
|
||||||
|
let url: string;
|
||||||
|
|
||||||
|
if (input.startsWith("http")) {
|
||||||
|
url = input
|
||||||
|
} else {
|
||||||
|
url = await search(input)
|
||||||
|
await interaction.editReply(`searching for: ${input}`);
|
||||||
|
console.log(input, url)
|
||||||
|
}
|
||||||
|
|
||||||
await requestSong(interaction, url)
|
await requestSong(interaction, url)
|
||||||
|
|
||||||
const msg = getPlayMsg(url)
|
const msg = getPlayMsg(url)
|
||||||
await interaction.reply(msg);
|
await interaction.editReply(msg);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
await interaction.reply('Coś poszło nie tak :/');
|
await interaction.editReply('Coś poszło nie tak :/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export async function forceRequestSong(
|
|||||||
|
|
||||||
const path = await getAudioFile(url)
|
const path = await getAudioFile(url)
|
||||||
queue.songList.push(path)
|
queue.songList.push(path)
|
||||||
|
queue.current = path
|
||||||
playSong(player, path);
|
playSong(player, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ export async function updatePlayer() {
|
|||||||
queue.current = null
|
queue.current = null
|
||||||
return
|
return
|
||||||
};
|
};
|
||||||
|
queue.current = nextSong;
|
||||||
playSong(player, nextSong);
|
playSong(player, nextSong);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,3 +63,27 @@ export async function findFileById(id: string): Promise<string> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function search(input: string) {
|
||||||
|
return await new Promise<string>((resolve, reject) => {
|
||||||
|
const ytDlpBin = process.env.YT_DLP_BIN_PATH! ?? "yt-dlp";
|
||||||
|
console.log(`search for ${input}`)
|
||||||
|
const search_url = spawn(ytDlpBin, [
|
||||||
|
"--skip-download",
|
||||||
|
"--print", "%(webpage_url)s",
|
||||||
|
`ytsearch: ${input}`
|
||||||
|
]);
|
||||||
|
|
||||||
|
let out = "";
|
||||||
|
|
||||||
|
search_url.stdout.on("data", d => out += d.toString());
|
||||||
|
search_url.stderr.on("data", d => process.stderr.write(d));
|
||||||
|
|
||||||
|
search_url.on("close", code => {
|
||||||
|
if (code !== 0 || !out.trim()) {
|
||||||
|
reject(new Error("Search failed"));
|
||||||
|
} else {
|
||||||
|
resolve(out.trim());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user