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リンクでのみ機能するように調整できます。