117 lines
4.8 KiB
Python
117 lines
4.8 KiB
Python
# Polarobot is a discord bot designed mainly to play music
|
|
# Copyright (C) 2022 Louis Lacoste
|
|
|
|
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Also add information on how to contact you by electronic and paper mail.
|
|
|
|
import os
|
|
import sys
|
|
import re
|
|
import random
|
|
import discord
|
|
from discord.ext import commands
|
|
from discord.utils import get
|
|
import youtube_dl
|
|
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
TOKEN = os.getenv('DISCORD_TOKEN')
|
|
|
|
#intents = discord.Intents.default()
|
|
#intents.message_content = True
|
|
#intents.members = True
|
|
|
|
intents = discord.Intents().all()
|
|
client = discord.Client(intents=intents)
|
|
bot = commands.Bot(command_prefix="!p ", intents=intents)
|
|
|
|
# YT related code
|
|
youtubeUrlRegex = "https?:\/\/(www\.)?(youtu|youtube)\.(com|be)"
|
|
def is_a_youtube_url(url: str):
|
|
return bool(re.match(youtubeUrlRegex, url))
|
|
|
|
|
|
def random_playing_gif():
|
|
gifList = ["https://media.tenor.com/Ra6rkhDtYPwAAAAd/anime-dj.gif",
|
|
"https://media.tenor.com/7o_Y0qCQaJQAAAAM/howan-anime.gif",
|
|
"https://media.tenor.com/_OA-44hy1-4AAAAM/anime-music.gif",
|
|
"https://media.tenor.com/rJpCgvQJgsEAAAAj/music.gif",
|
|
"https://media.tenor.com/sEKdNnp9tmoAAAAM/music-dog.gif",
|
|
"https://media.tenor.com/6z00WD2k8foAAAAM/boombox-jamming.gif"]
|
|
return random.choice(gifList)
|
|
|
|
|
|
@bot.event
|
|
async def on_ready():
|
|
print("Starting")
|
|
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name='PolaroBot | !p to call'))
|
|
|
|
|
|
def restart_bot():
|
|
os.execv(sys.executable, ['python'] + sys.argv)
|
|
|
|
|
|
@bot.command(aliases=['reboot'])
|
|
async def restart(ctx):
|
|
"""Reboot bot"""
|
|
bot.current_ctx = ctx
|
|
print("Rebooting...")
|
|
embedDeco = discord.Embed(title="🤖PolaroBot Statut",
|
|
description="PolaroBot redémarre : Patientez quelques secondes.. ", color=0xF1D50E)
|
|
await ctx.send(embed=embedDeco)
|
|
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name='PolaroBot redémarre...'))
|
|
restart_bot()
|
|
|
|
|
|
@bot.command(aliases=['play_music'], pass_context=True)
|
|
async def play(ctx, url: str):
|
|
"""Playing a song"""
|
|
if is_a_youtube_url(url):
|
|
embedPlaying = discord.Embed(
|
|
title="🤖PolaroBot joue", description=f"Je sais pas encore jouer de musique mais tkt frère, vla ton URL mon reuf : {url}")
|
|
embedPlaying.set_image(url=random_playing_gif())
|
|
|
|
else:
|
|
embedPlaying = discord.Embed(title="🤖PolaroBot veut casser ta gueule",
|
|
description=f"FREROT ?! C'EST QUOI {url} ? C'EST DE LA MERDE 💩💩💩 ! ")
|
|
embedPlaying.set_image(
|
|
url="https://media.tenor.com/wQH1Lm24wLwAAAAM/de-la-merde-jean.gif")
|
|
await ctx.send(embed=embedPlaying)
|
|
|
|
|
|
@bot.command(name="join",help="Pour demander au bot de rejoindre le canal vocal")
|
|
async def join(ctx):
|
|
#print(f"Asked to join {channel.id}")
|
|
if not ctx.message.author.voice:
|
|
embedMessage = discord.Embed(
|
|
title="🤖PolaroBot ne peut pas se connecter", description=f"T'es dans canal vocal ?")
|
|
else:
|
|
channel = ctx.author.voice.channel
|
|
await channel.connect()
|
|
embedMessage = discord.Embed(
|
|
title="🤖PolaroBot connecté", description=f"PolaroBot connecté au canal de {ctx.author}")
|
|
await ctx.send(embed=embedMessage)
|
|
|
|
@bot.command(name="leave", help="Pour faire quitter le canal vocal au bot")
|
|
async def leave(ctx):
|
|
voice_client = ctx.message.guild.voice_client
|
|
if voice_client and voice_client.is_connected():
|
|
embedMessage = discord.Embed(title="🤖PolaroBot se barre", description="Salut mon srab, je m'envole vers d'autres cieux")
|
|
await voice_client.disconnect()
|
|
else:
|
|
embedMessage = discord.Embed(title="🤖PolaroBot n'est pas connecté", description="""Ben déso gros mais je suis pas là...
|
|
Faut consulter si tu me vois partout....""")
|
|
await ctx.send(embed=embedMessage)
|
|
|
|
|
|
@bot.event
|
|
async def on_command_error(ctx, error):
|
|
channel = ctx.message.channel
|
|
if isinstance(error, commands.MissingRequiredArgument):
|
|
await ctx.send("Missing required argument: {}".format(error.param))
|
|
elif isinstance(error, commands.BadArgument):
|
|
ctx.send(channel, "Could not parse commands argument.")
|
|
|
|
bot.run(TOKEN)
|