aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commands/play.ts14
-rw-r--r--src/commands/skip.ts7
-rw-r--r--src/commands/unskip.ts4
-rw-r--r--src/services/get-songs.ts2
-rw-r--r--src/services/player.ts4
-rw-r--r--src/utils/loading-message.ts14
6 files changed, 29 insertions, 16 deletions
diff --git a/src/commands/play.ts b/src/commands/play.ts
index 629a720..30f6314 100644
--- a/src/commands/play.ts
+++ b/src/commands/play.ts
@@ -102,7 +102,11 @@ export default class implements Command {
}
if (nSongsNotFound !== 0) {
- extraMsg += `and ${nSongsNotFound.toString()} songs were not found`;
+ if (nSongsNotFound === 1) {
+ extraMsg += 'and 1 song was not found';
+ } else {
+ extraMsg += `and ${nSongsNotFound.toString()} songs were not found`;
+ }
}
newSongs.push(...convertedSongs);
@@ -140,12 +144,12 @@ export default class implements Command {
await res.stop(`u betcha, **${firstSong.title}** and ${newSongs.length - 1} other songs were added to the queue${extraMsg}`);
}
- if (player.voiceConnection === null) {
- await player.connect(targetVoiceChannel);
- }
-
if (queueOldSize === 0 && !wasPlayingSong) {
// Only auto-play if queue was empty before and nothing was playing
+ if (player.voiceConnection === null) {
+ await player.connect(targetVoiceChannel);
+ }
+
await player.play();
}
}
diff --git a/src/commands/skip.ts b/src/commands/skip.ts
index cc5c1c4..1eb23a0 100644
--- a/src/commands/skip.ts
+++ b/src/commands/skip.ts
@@ -25,19 +25,18 @@ export default class implements Command {
public async execute(msg: Message, _: string []): Promise<void> {
const queue = this.queueManager.get(msg.guild!.id);
+ const player = this.playerManager.get(msg.guild!.id);
try {
queue.forward();
+ player.resetPosition();
if (queue.isEmpty() && !queue.getCurrent()) {
- this.playerManager.get(msg.guild!.id).disconnect();
- } else {
- await this.playerManager.get(msg.guild!.id).play();
+ player.disconnect();
}
await msg.channel.send('keep \'er movin\'');
} catch (_) {
- console.log(_);
await msg.channel.send('no song to skip to');
}
}
diff --git a/src/commands/unskip.ts b/src/commands/unskip.ts
index ff4718a..a48d819 100644
--- a/src/commands/unskip.ts
+++ b/src/commands/unskip.ts
@@ -26,11 +26,11 @@ export default class implements Command {
public async execute(msg: Message, _: string []): Promise<void> {
const queue = this.queueManager.get(msg.guild!.id);
+ const player = this.playerManager.get(msg.guild!.id);
try {
queue.back();
-
- await this.playerManager.get(msg.guild!.id).play();
+ player.resetPosition();
await msg.channel.send('back \'er up\'');
} catch (_) {
diff --git a/src/services/get-songs.ts b/src/services/get-songs.ts
index 08d5e90..ed1d125 100644
--- a/src/services/get-songs.ts
+++ b/src/services/get-songs.ts
@@ -176,7 +176,7 @@ export default class {
private async spotifyToYouTube(track: SpotifyApi.TrackObjectSimplified, playlist: QueuedPlaylist | null): Promise<QueuedSong | null> {
try {
- const {items} = await ytsr(`${track.name} ${track.artists[0].name} offical`, {limit: 5});
+ const {items} = await ytsr(`"${track.name}" "${track.artists[0].name}" offical`, {limit: 5});
const video = items.find((item: { type: string }) => item.type === 'video');
if (!video) {
diff --git a/src/services/player.ts b/src/services/player.ts
index 27c6b33..0fd7227 100644
--- a/src/services/player.ts
+++ b/src/services/player.ts
@@ -140,6 +140,10 @@ export default class {
this.stopTrackingPosition();
}
+ resetPosition(): void {
+ this.positionInSeconds = 0;
+ }
+
private getCachedPath(url: string): string {
return path.join(this.cacheDir, hasha(url));
}
diff --git a/src/utils/loading-message.ts b/src/utils/loading-message.ts
index cf48d95..dd3e9b9 100644
--- a/src/utils/loading-message.ts
+++ b/src/utils/loading-message.ts
@@ -1,11 +1,14 @@
import {TextChannel, Message} from 'discord.js';
import delay from 'delay';
+const INITAL_DELAY = 500;
+const PERIOD = 500;
+
export default class {
+ public isStopped = true;
private readonly channel: TextChannel;
private readonly text: string;
private msg!: Message;
- private isStopped = false;
constructor(channel: TextChannel, text = 'cows! count \'em') {
this.channel = channel;
@@ -15,22 +18,25 @@ export default class {
async start(): Promise<void> {
this.msg = await this.channel.send(this.text);
- const period = 500;
-
const icons = ['🐮', '🐴', '🐄'];
const reactions = [];
let i = 0;
let isRemoving = false;
+
+ this.isStopped = false;
+
(async () => {
+ await delay(INITAL_DELAY);
+
while (!this.isStopped) {
if (reactions.length === icons.length) {
isRemoving = true;
}
// eslint-disable-next-line no-await-in-loop
- await delay(period);
+ await delay(PERIOD);
if (isRemoving) {
const reactionToRemove = reactions.shift();