Çözüldü Discord.py ile YouTube kanalını bağlamak

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Panconn

Nanopat
Katılım
15 Ağustos 2023
Mesajlar
728
Çözümler
14
Daha fazla  
Cinsiyet
Erkek
Discord.py ile yaptığım Discord botuna bir fonksiyon ekleyip YouTube kanalı ile bağlamak istiyorum. Bir YouTube kanalı video attığı zaman belirlediğimiz kanala video linkini göndermesi gerekiyor. Bunu nasıl yaparım?
 
Çözüm
Flask kullanarak bir API yazıp, NGROK ile web'e açacaksın. Webhook ile istediğin şeyi yapabilirsin.


Biraz programlama bilgisi gerektiriyor tabii. Etiketlersen yardımcı olurum.

Aşağıda kendi yazdığım bu işi yapan bir Flask app var ancak makyajlı değil tabii. Test için yazmıştım. Arada TODO mesajları falan da var.

Python:
import requests
import redis
from discord import SyncWebhook
from tivtech.WebhookConfig import CONFIG as config
from flask import Flask, request
import xmltodict

app = Flask(__name__)
r = redis.Redis()


@app.route("/feed", methods=["GET", "POST"])
def feed():
    challenge = request.args.get("hub.challenge")

    if challenge:
        return challenge

    data = xmltodict.parse(request.data)

    try:
        video_link = data["feed"]["entry"]["link"]["@href"]
        video_id: str = data["feed"]["entry"]["id"]
        video_id = video_id.split(":")[2]
        head = requests.head(url=f"https://www.youtube.com/shorts/{video_id}")

    except:
        video_link = False
        pass

    if (
        video_link
        and not r.sismember("youtube_list", video_id)
        and head.status_code == 303
    ):
        r.sadd("youtube_list", video_id)
        webhook = SyncWebhook.from_url(url=config.webhook_url)
        webhook.send(
            content=f"{config.new_video_msg}\n{video_link}",
            username=config.webhook_bot_name,
            avatar_url=config.logo,
        )

    elif head.status_code == 200:
        print("Shorts bu hacı")
        # TODO: Log kanalı muhabbeti

    else:
        print(f"{config.not_entry_msg}")  # TODO: Bot Log kanalına atılacak bildirim.
        pass

    return "", 204


app.run(host="0.0.0.0", port=5000)
Flask kullanarak bir API yazıp, NGROK ile web'e açacaksın. Webhook ile istediğin şeyi yapabilirsin.


Biraz programlama bilgisi gerektiriyor tabii. Etiketlersen yardımcı olurum.

Aşağıda kendi yazdığım bu işi yapan bir Flask app var ancak makyajlı değil tabii. Test için yazmıştım. Arada TODO mesajları falan da var.

Python:
import requests
import redis
from discord import SyncWebhook
from tivtech.WebhookConfig import CONFIG as config
from flask import Flask, request
import xmltodict

app = Flask(__name__)
r = redis.Redis()


@app.route("/feed", methods=["GET", "POST"])
def feed():
    challenge = request.args.get("hub.challenge")

    if challenge:
        return challenge

    data = xmltodict.parse(request.data)

    try:
        video_link = data["feed"]["entry"]["link"]["@href"]
        video_id: str = data["feed"]["entry"]["id"]
        video_id = video_id.split(":")[2]
        head = requests.head(url=f"https://www.youtube.com/shorts/{video_id}")

    except:
        video_link = False
        pass

    if (
        video_link
        and not r.sismember("youtube_list", video_id)
        and head.status_code == 303
    ):
        r.sadd("youtube_list", video_id)
        webhook = SyncWebhook.from_url(url=config.webhook_url)
        webhook.send(
            content=f"{config.new_video_msg}\n{video_link}",
            username=config.webhook_bot_name,
            avatar_url=config.logo,
        )

    elif head.status_code == 200:
        print("Shorts bu hacı")
        # TODO: Log kanalı muhabbeti

    else:
        print(f"{config.not_entry_msg}")  # TODO: Bot Log kanalına atılacak bildirim.
        pass

    return "", 204


app.run(host="0.0.0.0", port=5000)
 
Çözüm

Geri
Yukarı