Идентифицировать и сохранять ссылки Spotify в определенном канале с помощью discord.py

#python #discord #discord.py #discord.py-rewrite

#python #Discord #discord.py

Вопрос:

Я пытаюсь запрограммировать бота Discord, который сканирует канал в гильдии на наличие ссылок Spotify, затем сохраняет их в файл, который я затем могу отправить на свой веб-сервер. В идеале последние размещенные ссылки должны быть сверху и спускаться вниз.

С чем у меня возникают проблемы, так это с поиском и сохранением ссылок. Я видел несколько методов определения URL-адресов с помощью регулярных выражений, хотя они, похоже, предназначены для удаления приглашающих ссылок и не будут работать для моих целей.

Возможно ли это сделать с discord.py ?

Комментарии:

1. Можете ли вы предоставить несколько примеров типов URL, которые вы хотите определить? Вероятно, возможен подход с использованием регулярных выражений с помощью чего-то вроде https://[[^/] .] spotify.com..

2.@PatrickHaugh Вот несколько примеров:open.spotify.com/album /… open.spotify.com/album /…

Ответ №1:

Вы можете выполнить итерацию по всему каналу с помощью TextChannel.history и использовать regex или что-то подобное, чтобы найти ссылки и сохранить их в списке:

 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}:(?://)?)(?:[-;:amp;= $,w] @)?[A-Za-z0-9.-] |(?:www.|[-;:amp;= $,w] @)[A-Za-z0-9.-] )((?:/[ ~%/.w-]*)???(?:[- =amp;;%@.w]*)#?(?:[w]*))?)", message).group(0)
            links.append(message)
    saveToFile(links)

client.run(your_bot_token)
  

Регулярное выражение будет работать для любой ссылки, вы можете адаптировать его, чтобы оно работало только для ссылок Spotify, если хотите.