discord.pyを使用して特定のチャネルのSpotifyリンクを特定して保存します

Aug 22 2020

ギルドのチャンネルをスキャンしてSpotifyリンクを探し、それらをファイルに保存してWebサーバーに送信できるDiscordボットをプログラムしようとしています。理想的には、投稿された最新のリンクが上に表示され、下に表示されます。

私が問題を抱えているのは、リンクを見つけて保存することです。正規表現を使用してURLを検出するいくつかの方法を見てきましたが、それらは招待リンクを削除するためのもののようで、私の目的には機能しません。

これはdiscord.pyで行うことは可能ですか?

回答

1 NuKeFluffy Aug 22 2020 at 22:50

TextChannel.history正規表現などを使用してチャネル全体を反復処理し、リンクを見つけてリストに保存できます。

import discord
from discord.ext import commands
import re

client = discord.ext.commands.Bot(command_prefix = "!")

def saveToFile(links):
    with open ("Output.txt", "a") as f:
        for link in links:
            f.write(link + "\n")

@client.command()
async def getLinks(ctx):
    links = []
    channel = client.get_channel(1234567890)
    async for message in channel.history():
        if "https://open.spotify.com/" in message.content:
            message = message.content
            message = re.search("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-]*)?\??(?:[-\+=&;%@.\w]*)#?(?:[\w]*))?)", message).group(0)
            links.append(message)
    saveToFile(links)

client.run(your_bot_token)

正規表現はどのリンクでも機能します。必要に応じて、Spotifyリンクでのみ機能するように調整できます。