forked from jojara/JellyfinDiscordBot
made some changes to certain functions
This commit is contained in:
parent
80b47c6d68
commit
d55f473c69
71
bot.py
71
bot.py
@ -1,9 +1,10 @@
|
||||
# Imports
|
||||
import os
|
||||
from discord.webhook.async_ import interaction_message_response_params
|
||||
import requests
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from discord import DiscordException, NotFound, app_commands, guild, voice_client
|
||||
from discord import DiscordException, NotFound, app_commands, guild, user, voice_client
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
@ -99,7 +100,7 @@ async def playTrack(interaction: discord.Interaction):
|
||||
# on the play command, we add that song to the list
|
||||
headers_str = f"-headers \"X-Emby-Token: {JELLYFIN_API_KEY}\""
|
||||
try:
|
||||
while guild_queue_dict[interaction.guild_id].count() > 0:
|
||||
while len(guild_queue_dict[interaction.guild_id]) > 0:
|
||||
|
||||
# Get song information
|
||||
song = guild_queue_dict[interaction.guild_id][0]
|
||||
@ -158,6 +159,27 @@ async def connect(interaction: discord.Interaction):
|
||||
# Makes the reaction visible to everyone
|
||||
await interaction.response.defer()
|
||||
|
||||
try:
|
||||
voice_status = await interaction.user.fetch_voice()
|
||||
user_channel = voice_status.channel
|
||||
voice_client = interaction.guild.voice_client
|
||||
if voice_client is None:
|
||||
voice_client = await user_channel.connect()
|
||||
elif voice_client.channel != user_channel:
|
||||
await voice_client.disconnect()
|
||||
voice_client = await user_channel.connect()
|
||||
|
||||
except discord.errors.NotFound as e:
|
||||
print(f"Error: {e}")
|
||||
await interaction.followup.send("You are not in a voice channel!")
|
||||
return
|
||||
except discord.errors.Forbidden as e:
|
||||
print(f"Error: {e}")
|
||||
await interaction.followup.send(f"I am not allowed in that voice channel!")
|
||||
return
|
||||
|
||||
|
||||
await interaction.followup.send(f"Connected!")
|
||||
return
|
||||
|
||||
|
||||
@ -198,6 +220,9 @@ async def play(interaction: discord.Interaction):
|
||||
# Makes the reaction visible to everyone
|
||||
await interaction.response.defer()
|
||||
|
||||
if guild_queue_dict.get(interaction.guild_id) == None:
|
||||
guild_queue_dict[interaction.guild_id] = []
|
||||
|
||||
# Some basic checks
|
||||
try:
|
||||
# Check if the bot is connected to a channel
|
||||
@ -205,19 +230,17 @@ async def play(interaction: discord.Interaction):
|
||||
await interaction.followup.send(f"Not connected to your voice channel!")
|
||||
return # After this point, we know that it is in a channel
|
||||
|
||||
|
||||
# Check if the queue is empty
|
||||
if guild_queue_dict[interaction.guild_id].count() == 0:
|
||||
if len(guild_queue_dict[interaction.guild_id]) == 0:
|
||||
await interaction.followup.send(f"Queue is empty!")
|
||||
return # After this point, we know the queue has something in it
|
||||
except:
|
||||
except discord.errors.NotFound:
|
||||
await interaction.followup.send(f"You're not connected to a voice channel!")
|
||||
|
||||
|
||||
return
|
||||
|
||||
# Play all items in the queue
|
||||
playTrack(interaction)
|
||||
|
||||
|
||||
await playTrack(interaction)
|
||||
|
||||
return
|
||||
|
||||
@ -267,13 +290,16 @@ async def search(interaction: discord.Interaction, title: str):
|
||||
if not data:
|
||||
await interaction.followup.send(f"No song found matching `{title}`.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
result_list = []
|
||||
for song in data:
|
||||
result_list.append(f"**{song.get("Name")}** by *{song.get("AlbumArtist", ["Unknown Artist"])}*")
|
||||
|
||||
await interaction.followup.send("\n".join(result_list))
|
||||
# end search -----
|
||||
return
|
||||
|
||||
|
||||
|
||||
# Skip
|
||||
@ -368,13 +394,23 @@ async def add(interaction: discord.Interaction, title: str):
|
||||
# query the item
|
||||
data = await make_request(title, interaction)
|
||||
|
||||
# Check if data is bogus
|
||||
if not data:
|
||||
await interaction.followup.send(f"Couldn't find a song matching {title}")
|
||||
return
|
||||
|
||||
|
||||
# Gets song information
|
||||
query_song = data[0]
|
||||
query_song_id = query_song.get('Id')
|
||||
query_song_title = query_song.get('Name')
|
||||
query_song_artist = query_song.get('AlbumArtist', ['Unknown Artist'])
|
||||
|
||||
print(f"Found: {query_song_id}, with the title {query_song_title} and artist {query_song_artist}")
|
||||
|
||||
# Add song information as a tuple
|
||||
if guild_queue_dict.get(interaction.guild_id) == None:
|
||||
guild_queue_dict[interaction.guild_id] = []
|
||||
guild_queue_dict[interaction.guild_id].append((query_song_id, query_song_title, query_song_artist))
|
||||
|
||||
|
||||
@ -382,11 +418,11 @@ async def add(interaction: discord.Interaction, title: str):
|
||||
|
||||
# Sends informational message
|
||||
await interaction.followup.send(f"Added **{query_song_title}** by *{query_song_artist}*!")
|
||||
tracks_queued = guild_queue_dict[interaction.guild_id].count()
|
||||
tracks_queued = len(guild_queue_dict[interaction.guild_id])
|
||||
|
||||
# Helpfully tells the user how many tracks until their track is played
|
||||
if tracks_queued > 0:
|
||||
await interaction.followup.send(f"Plays after {tracks_queued} more tracks.")
|
||||
if tracks_queued > 1:
|
||||
await interaction.followup.send(f"Plays after **{tracks_queued}** more tracks.")
|
||||
return
|
||||
|
||||
|
||||
@ -411,7 +447,16 @@ async def queue(interaction: discord.Interaction):
|
||||
# Makes the reaction visible to everyone
|
||||
await interaction.response.defer()
|
||||
|
||||
# Check if queue is uninitialized
|
||||
if guild_queue_dict.get(interaction.guild_id) == None:
|
||||
guild_queue_dict[interaction.guild_id] = []
|
||||
|
||||
# Add all the items in a queue to a list
|
||||
if len(guild_queue_dict[interaction.guild_id]) == 0:
|
||||
await interaction.followup.send(f"The queue is empty!")
|
||||
return
|
||||
|
||||
# The queue has something in it
|
||||
result_list = []
|
||||
for song in guild_queue_dict[interaction.guild_id]:
|
||||
result_list.append(f"**{song[1]}** by *{song[2]}*")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user