import asyncio
import xmltodict
from xml.parsers.expat import ExpatError
import aiohttp
from discord import Webhook
from flask import Flask, request
from tivtech.WebhookConfig import CONFIG as config
app = Flask(__name__)
@app.route("/feed", methods=["GET", "POST"])
def feed():
async def send_message(content):
async with aiohttp.ClientSession() as session:
webhook = Webhook.from_url(config.webhook_url, session=session)
await webhook.send(content=content, username="Foo")
challange = request.args.get("hub.challenge")
if challange:
return challange
try:
xml_dict = xmltodict.parse(request.data)
channel_id = xml_dict["feed"]["entry"]["yt:channelId"]
print(channel_id)
if channel_id != config.youtube_channel_id:
return "", 403
video_url = xml_dict["feed"]["entry"]["link"]["@href"]
loop = asyncio.get_event_loop()
response = loop.run_until_complete(send_message(content=video_url))
except (ExpatError, LookupError):
print("Error")
return "", 403
return "", 204
if __name__ == "__main__":
app.run()