Merge pull request #36 from pvanarkel/34-rework-gifcog

rename gif cog to preview.py and add youtube preview functionality
This commit is contained in:
Peter van Arkel
2023-03-24 10:07:22 +01:00
committed by GitHub
4 changed files with 36 additions and 6 deletions

View File

@@ -2,7 +2,9 @@ import discord
from discord.ext import commands from discord.ext import commands
from jeevesbot import functions from jeevesbot import functions
from logging import getLogger from logging import getLogger
import re
import pytube
from pytube.exceptions import RegexMatchError
# setup logging # setup logging
log = getLogger(__name__) log = getLogger(__name__)
@@ -11,11 +13,12 @@ log = getLogger(__name__)
e = discord.Embed() e = discord.Embed()
class Gif(commands.Cog): class Preview(commands.Cog):
""" Ensures that high-risk channels don't display embedded links, but only gifs.""" """ Ensures that high-risk channels don't display embedded links, but only gifs and youtube previews."""
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self.video_id_regex = re.compile(r'(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/|m\.youtube\.com/(?:watch\?v=|embed/|v/))([^"&?/ ]{11})')
@commands.Cog.listener() @commands.Cog.listener()
@@ -55,6 +58,32 @@ class Gif(commands.Cog):
await message.channel.send(embed=embed) await message.channel.send(embed=embed)
logline = (str(message.author) + ' requested a gif: ' + str(gif_url)) logline = (str(message.author) + ' requested a gif: ' + str(gif_url))
log.info(logline) log.info(logline)
if 'https://youtu' or 'https://m.youtu' or 'https://www.youtu' in message.content():
roles = functions.checkrole(message.author.roles)
channel = functions.checkchannel(message.channel.id)
if channel is True:
if roles is not True:
url = message.content
youtube = pytube.YouTube(url)
video_title = youtube.title
video_author = youtube.author
video_id = self.extract_video_id(url)
if video_id:
embed = discord.Embed()
embed.set_image(url=f"https://img.youtube.com/vi/{video_id}/hqdefault.jpg")
embed.set_author(name=f"{video_author}")
embed.add_field(name=f"", value=f"[{video_title}]({url})")
await message.channel.send(embed=embed)
log.info(f'User {message.author} requested preview for {url}')
def extract_video_id(self, url):
try:
match = self.video_id_regex.search(url)
if match:
return match.group(1)
except pytube.exceptions.RegexMatchError as e:
pass
@commands.Cog.listener() @commands.Cog.listener()
@@ -63,4 +92,4 @@ class Gif(commands.Cog):
async def setup(bot): async def setup(bot):
await bot.add_cog(Gif(bot)) await bot.add_cog(Preview(bot))

View File

@@ -2,7 +2,7 @@
TOKEN = 'discord-bot-token-here' TOKEN = 'discord-bot-token-here'
ADMIN_ROLE = 'role-to-exclude-from-gifbot' ADMIN_ROLE = 'role-to-exclude-from-gifbot'
GIFCHANNELS = [add-channel-ids-for-bot-to-work-in] PREVIEWCHANNELS = [add-channel-ids-for-bot-to-work-in]
BOTCHANNEL = [add id of bot channel] BOTCHANNEL = [add id of bot channel]
FLAIRROLES = [add list of role ids to correspond to the emoji] FLAIRROLES = [add list of role ids to correspond to the emoji]
FLAIRROLE = [add id of flair separator role] FLAIRROLE = [add id of flair separator role]

View File

@@ -25,7 +25,7 @@ def checkrole(roles):
# check if the source channel is in the list of channels that are watched by the bot. # check if the source channel is in the list of channels that are watched by the bot.
def checkchannel(channelid): def checkchannel(channelid):
if channelid in env.GIFCHANNELS: if channelid in env.PREVIEWCHANNELS:
return True return True
else: else:
return False return False

View File

@@ -11,6 +11,7 @@ pylint
gspread gspread
oauth2client oauth2client
Pillow Pillow
pytube
# needs this version, otherwise TypeErrors will break stuff # needs this version, otherwise TypeErrors will break stuff
yarl==1.4.2 yarl==1.4.2