1
0
Fork 0
mirror of https://gitlab.jonasled.de/jonasled/discordbot synced 2024-11-16 06:52:17 +01:00

added musicbot

This commit is contained in:
Jonas Leder 2020-04-10 16:39:32 +02:00
parent fdb28e30de
commit 26ca6cd0fa

108
bot.py
View file

@ -1,14 +1,27 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import discord import discord
from discord.ext import commands from discord.ext import commands, tasks
from discord.utils import get from discord.utils import get
from discord import FFmpegPCMAudio from discord import FFmpegPCMAudio
from sqlite3 import connect from sqlite3 import connect
from time import sleep, time
from datetime import datetime, timedelta from datetime import datetime, timedelta
from config import * from config import *
from requests import get
from json import loads
from os.path import isfile
from os import rename, remove
from youtube_dl import YoutubeDL
from time import time
import asyncio
polls = {} polls = {}
player = None #the Player for the music Bot
playerServer = None #The Server the player is active at the moment
downloadQue = []
playerQue = []
titleQue = []
fileIndex = 0
playing = False
bot = commands.Bot(command_prefix=prefix) bot = commands.Bot(command_prefix=prefix)
@ -361,7 +374,96 @@ async def result(ctx, id):#this function prints the result of a poll
dbcursor.execute("DELETE FROM poll where pollID = ?", [id])#delete the entries from the poll in the database dbcursor.execute("DELETE FROM poll where pollID = ?", [id])#delete the entries from the poll in the database
dbconnection.commit()#write the database to disk dbconnection.commit()#write the database to disk
# ___ ___ _ ______ _
# | \/ | (_) | ___ \ | |
# | . . | _ _ ___ _ ___ | |_/ / ___ | |_
# | |\/| || | | |/ __|| | / __|| ___ \ / _ \ | __|
# | | | || |_| |\__ \| || (__ | |_/ /| (_) || |_
# \_| |_/ \__,_||___/|_| \___|\____/ \___/ \__|
#
#
@bot.command(brief="adds a song to the playlist")
async def play(ctx, songURL : str):
global player
global playerServer
global downloadQue
try:
channel = ctx.author.voice.channel#get the current voicechat the user is in
except:
await ctx.message.channel.send("To use the music bot you have to be in a voice chat")
return
if(player == None):
await channel.connect()#connect to this chat
player = ctx.voice_client #save the voice client for later use
playerServer = ctx.message.guild.id#save the music bot server id to variable
if(playerServer != ctx.message.guild.id):#check if the music bot is at the moment on this server
await ctx.message.channel.send("The Bot is currently connected to a different channel, please wait until he is finished there")
return
r = get("https://www.youtube.com/oembed?format=json&url=" + songURL)
if(r.status_code != 200):
await ctx.message.channel.send("Can't find the song")
return
await ctx.message.channel.send("Adding `" + loads(r.text)["title"] + "` to que.")
downloadQue.append(songURL)
@bot.command(brief="skipps the current song in playlist")
async def skip(ctx):
global player
player.stop()
ctx.message.channel.send("Skipped to next song")
async def checkForNextSong():
global player
global playerQue
global playerServer
global playing
while True:
if(player != None) and not player.is_playing() and (len(playerQue) > 0):
if(playing):
remove(playerQue[0])
playerQue.remove(playerQue[0])
playing = False
if(len(playerQue) == 0):
print("que is empty")
player.disconnect()
player = None
playerServer = None
else:
playing = True
print("playing next song")
player.play(discord.FFmpegPCMAudio(playerQue[0]))
else:
await asyncio.sleep(1)
async def downloadAudioFiles():
global downloadQue
global fileIndex
while True:
if(len(downloadQue) > 0):
ydl_opts = { #youtube-dl arguments
'format': 'worstaudio/worst',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': str(fileIndex) +'.%(ext)s',
}
with YoutubeDL(ydl_opts) as ydl:
ydl.download([downloadQue[0]])
downloadQue.remove(downloadQue[0])
playerQue.append(str(fileIndex) + ".mp3")
fileIndex = fileIndex + 1
else:
await asyncio.sleep(1)
bot.loop.create_task(checkForNextSong())
bot.loop.create_task(downloadAudioFiles())
bot.run(token, bot=botAccount)#start the bot with the options in config.py bot.run(token, bot=botAccount)#start the bot with the options in config.py