#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, если хотите.