Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
- Fixed notices getting created and deleted in a loop.
- Removed unused dependencies.
- Fixed missing channel causing voting on verifications to fail.
- Fixed node failing to play a track causing the bot to get stuck.
- Fixed not being able to connect to the audio node.

## 5.1.0

Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@
"music.options.pause.description": "Pozastaví aktuálně přehrávanou skladbu nebo kolekci skladeb.",
"music.options.pause.strings.paused.title": "Pauza",
"music.options.pause.strings.paused.description": "Pozastavil přehrávání hudby.",
"music.options.play.name": "přehrát",
"music.options.play.name": "hrát",
"music.options.play.description": "Umožňuje uživateli přehrávat hudbu v hlasovém kanálu.",
"music.options.play.options.stream.name": "stream",
"music.options.play.options.stream.description": "Přehrává zvukový proud.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@
"music.options.stop.description": "Lopettaa nykyisen kuunteluistunnon ja tyhjentää jonon ja kappaleiden historian.",
"music.options.stop.strings.stopped.title": "Pysähtyi",
"music.options.stop.strings.stopped.description": "Kuunteluistunto on lopetettu, ja kappalejono ja historia on tyhjennetty.",
"music.options.unskip.name": "ohita",
"music.options.unskip.name": "tuo-takaisin",
"music.options.unskip.description": "Palauttaa viimeksi soitetun kappaleen.",
"music.options.unskip.strings.historyEmpty.title": "Historia on tyhjä",
"music.options.unskip.strings.historyEmpty.description": "Palautettavia biisilistoja ei ole.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@
"music.options.resume.strings.notPaused.description": "現在の曲は一時停止されない。",
"music.options.resume.strings.resumed.title": "再開",
"music.options.resume.strings.resumed.description": "音楽再生が再開された。",
"music.options.skip-to.name": "スキップトゥ",
"music.options.skip-to.name": "スキップ-トゥ",
"music.options.skip-to.description": "現在再生中の曲の指定した箇所までスキップする。",
"music.options.skip-to.strings.noSong.title": "タイムスタンプを求める曲がない",
"music.options.skip-to.strings.noSong.description": "タイムスタンプを求める曲がない。",
Expand Down
4 changes: 2 additions & 2 deletions assets/localisations/commands/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@
"music.options.resume.strings.notPaused.description": "현재 노래가 일시정지되지 않습니다.",
"music.options.resume.strings.resumed.title": "재개됨",
"music.options.resume.strings.resumed.description": "음악 재생이 재개되었습니다.",
"music.options.skip-to.name": "건너뛰기",
"music.options.skip-to.name": "건너뛰기-위치",
"music.options.skip-to.description": "현재 재생 중인 노래의 지정된 지점으로 건너뜁니다.",
"music.options.skip-to.strings.noSong.title": "타임스탬프를 찾을 노래가 없습니다.",
"music.options.skip-to.strings.noSong.description": "타임스탬프를 찾을 노래가 없습니다.",
Expand Down Expand Up @@ -364,7 +364,7 @@
"music.options.stop.description": "현재 듣기 세션을 중지하고 대기열과 노래 기록을 지웁니다.",
"music.options.stop.strings.stopped.title": "중지됨",
"music.options.stop.strings.stopped.description": "듣기 세션이 중지되고 노래 대기열과 기록이 지워졌습니다.",
"music.options.unskip.name": "건너뛰기",
"music.options.unskip.name": "건너뛰기-해제",
"music.options.unskip.description": "마지막으로 재생한 노래를 다시 재생합니다.",
"music.options.unskip.strings.historyEmpty.title": "기록이 비어 있습니다.",
"music.options.unskip.strings.historyEmpty.description": "가져올 노래 목록이 없습니다.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/sv-SE.json
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@
"music.options.stop.description": "Avbryter den aktuella lyssningssessionen och rensar kö och låthistorik.",
"music.options.stop.strings.stopped.title": "Stoppad",
"music.options.stop.strings.stopped.description": "Lyssningssessionen har avbrutits och låtkön och historiken har rensats.",
"music.options.unskip.name": "hoppa-över",
"music.options.unskip.name": "ta-tillbaka",
"music.options.unskip.description": "Återställer den senast spelade låten.",
"music.options.unskip.strings.historyEmpty.title": "Historien är tom",
"music.options.unskip.strings.historyEmpty.description": "Det finns inga låtlistor att ta med tillbaka.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/th.json
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@
"music.options.stop.description": "หยุดการฟังปัจจุบัน ล้างคิวและประวัติเพลง",
"music.options.stop.strings.stopped.title": "หยุด",
"music.options.stop.strings.stopped.description": "การฟังเพลงได้ถูกหยุดแล้ว และคิวเพลงกับประวัติการฟังได้ถูกล้างแล้ว",
"music.options.unskip.name": "ข้าม",
"music.options.unskip.name": "เลิกข้าม",
"music.options.unskip.description": "นำเพลงที่เล่นล่าสุดกลับมา",
"music.options.unskip.strings.historyEmpty.title": "ประวัติว่างเปล่า",
"music.options.unskip.strings.historyEmpty.description": "ไม่มีรายการเพลงที่จะนำกลับมา",
Expand Down
4 changes: 2 additions & 2 deletions assets/localisations/commands/uk.json
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@
"music.options.loop.strings.disabled.title": "Цикл вимкнено",
"music.options.loop.strings.disabled.description.song": "Поточна пісня більше не буде зациклюватися.",
"music.options.loop.strings.disabled.description.songCollection": "Поточна підбірка пісень більше не буде зациклюватися.",
"music.options.now.name": "зараз.",
"music.options.now.name": "зараз",
"music.options.now.description": "Відображає поточну пісню, що відтворюється.",
"music.options.now.strings.noSong.title": "Не грає пісня",
"music.options.now.strings.noSong.description": "Пісні немає, щоб показати інформацію про неї.",
Expand Down Expand Up @@ -364,7 +364,7 @@
"music.options.stop.description": "Зупиняє поточний сеанс прослуховування, очищаючи чергу та історію пісень.",
"music.options.stop.strings.stopped.title": "Зупинився.",
"music.options.stop.strings.stopped.description": "Сеанс прослуховування було зупинено, а чергу пісень та історію було очищено.",
"music.options.unskip.name": "пропустити",
"music.options.unskip.name": "повернути",
"music.options.unskip.description": "Повертає останню відтворену пісню.",
"music.options.unskip.strings.historyEmpty.title": "Історія порожня",
"music.options.unskip.strings.historyEmpty.description": "Немає жодних списків пісень, які можна було б повернути.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/commands/vi.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@
"music.options.resume.strings.notPaused.description": "Bài hát hiện tại không bị tạm dừng.",
"music.options.resume.strings.resumed.title": "Tiếp tục",
"music.options.resume.strings.resumed.description": "Phát nhạc đã được tiếp tục.",
"music.options.skip-to.name": "bỏ-qua",
"music.options.skip-to.name": "bỏ-qua-vị-trí",
"music.options.skip-to.description": "Bỏ qua đến một điểm nhất định trong bài hát đang phát.",
"music.options.skip-to.strings.noSong.title": "Không có bài hát để tìm dấu thời gian",
"music.options.skip-to.strings.noSong.description": "Không có bài hát nào để tìm dấu thời gian.",
Expand Down
2 changes: 1 addition & 1 deletion assets/localisations/parameters/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@
"parameters.collection.description": "trueに設定すると、代わりにソングコレクションに対してアクションが実行される。",
"parameters.by.name": "による",
"parameters.by.description": "スキップする曲や曲リストの数。",
"parameters.to.name": "に変更する",
"parameters.to.name": "に変更する",
"parameters.to.description": "スキップするトラックのインデックス。"
}
11 changes: 9 additions & 2 deletions source/library/commands/handlers/music/play.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,21 @@ async function handleRequestQueryPlayback(
return;
}

await client.postponeReply(interaction);

const listing = await resolveToSongListing(client, interaction, { query: interaction.parameters.query });
if (listing === null) {
client.deleteReply(interaction).ignore();
return;
}

if (listing === undefined) {
const strings = constants.contexts.songNotFound({
localise: client.localise,
locale: interaction.locale,
});
client
.warning(interaction, {
.warned(interaction, {
title: strings.title,
description: `${strings.description.notFound}\n\n${strings.description.tryDifferentQuery}`,
})
Expand All @@ -49,7 +56,7 @@ async function handleRequestQueryPlayback(
return;
}

client.acknowledge(interaction).ignore();
client.deleteReply(interaction).ignore();

await handleRequestPlayback(client, interaction, listing);
}
Expand Down
2 changes: 1 addition & 1 deletion source/library/commands/resolvers/resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ type SongListingResolver = (
client: Client,
interaction: Rost.Interaction,
{ query }: { query: string },
) => Promise<SongListing | undefined>;
) => Promise<SongListing | null | undefined>;

export type { SongListingResolver };
16 changes: 8 additions & 8 deletions source/library/commands/resolvers/youtube.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ async function resolveYouTubeSongListings(
return undefined;
}

async function search(client: Client, interaction: Rost.Interaction, query: string): Promise<SongListing | undefined> {
async function search(client: Client, interaction: Rost.Interaction, query: string): Promise<SongListing | null | undefined> {
const resultsAll = await youtube.search(query, { limit: 20, type: "all", safeSearch: false });
const results = resultsAll.items.filter((element) => isPlaylist(element) || isVideo(element));
if (results.length === 0) {
return undefined;
}

const { promise, resolve } = Promise.withResolvers<SongListing | undefined>();
const { promise, resolve } = Promise.withResolvers<SongListing | null>();

const selectMenuSelection = new InteractionCollector(client, { only: [interaction.user.id], isSingle: true });

Expand All @@ -52,23 +52,23 @@ async function search(client: Client, interaction: Rost.Interaction, query: stri

const indexString = selection.data?.values?.at(0);
if (indexString === undefined) {
return resolve(undefined);
return resolve(null);
}

const index = Number(indexString);
if (!Number.isSafeInteger(index)) {
return resolve(undefined);
return resolve(null);
}

const result = results.at(index);
if (result === undefined) {
return resolve(undefined);
return resolve(null);
}

if (isPlaylist(result)) {
const playlist = await youtube.getPlaylist(result.id);
if (playlist === undefined) {
return resolve(undefined);
return resolve(null);
}

return resolve(getSongListingFromPlaylist(playlist, interaction.user.id));
Expand All @@ -77,7 +77,7 @@ async function search(client: Client, interaction: Rost.Interaction, query: stri
return resolve(getSongListingFromVideo(result, interaction.user.id));
});

selectMenuSelection.onDone(() => resolve(undefined));
selectMenuSelection.onDone(() => resolve(null));

await client.registerInteractionCollector(selectMenuSelection);

Expand All @@ -103,7 +103,7 @@ async function search(client: Client, interaction: Rost.Interaction, query: stri

const strings = constants.contexts.selectSong({ localise: client.localise, locale: interaction.locale });
client
.notice(interaction, {
.noticed(interaction, {
embeds: [
{
title: strings.title,
Expand Down
2 changes: 1 addition & 1 deletion source/library/services/lavalink.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ function patchShoukakuWebSockets(): void {
this.reconnects = 0;
this.state = shoukaku.Constants.State.NEARLY;
};
shoukaku.Node.prototype.connect = function () {
shoukaku.Node.prototype.connect = async function () {
if (!this.manager.id) {
throw new Error("Don't connect a node when the library is not yet ready");
}
Expand Down
3 changes: 3 additions & 0 deletions source/library/services/music.ts
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,8 @@ class MusicSession extends EventEmitter {
)} on ${this.client.diagnostics.guild(this.service.guildId)}.`,
),
);

await this.advanceQueue();
}

async receiveListing({ listing }: { listing: SongListing }): Promise<void> {
Expand Down Expand Up @@ -639,6 +641,7 @@ class MusicSession extends EventEmitter {
async play({ playable }: { playable: Playable }): Promise<boolean> {
const track = await this.#getTrack({ playable });
if (track === undefined) {
await this.advanceQueue();
return false;
}

Expand Down
Loading