|
@ -6,11 +6,24 @@ from markdownify import markdownify |
|
|
import re |
|
|
import re |
|
|
from bs4 import BeautifulSoup |
|
|
from bs4 import BeautifulSoup |
|
|
|
|
|
|
|
|
from hrochobot.utils.ksp_utils import ksp_feed |
|
|
from hrochobot.utils.ksp_utils import ksp_feed, strip_id, KSP_URL |
|
|
import hrochobot.utils.data as data |
|
|
import hrochobot.utils.data as data |
|
|
|
|
|
|
|
|
NEWS_JSON = "news" |
|
|
NEWS_JSON = "news" |
|
|
|
|
|
|
|
|
|
|
|
async def get_news_ids(): |
|
|
|
|
|
feed = await ksp_feed() |
|
|
|
|
|
return list(map(lambda e: e.id, feed.entries)) |
|
|
|
|
|
|
|
|
|
|
|
async def autocomplete_news_ids(ctx): |
|
|
|
|
|
value = ctx.value.lower() |
|
|
|
|
|
options = [] |
|
|
|
|
|
for id_ in map(strip_id, await get_news_ids()): |
|
|
|
|
|
lid = id_.lower() |
|
|
|
|
|
if lid.startswith(value) or lid.split("_", 1)[1].startswith(value): |
|
|
|
|
|
options.append(id_) |
|
|
|
|
|
return options |
|
|
|
|
|
|
|
|
def guess_color(title): |
|
|
def guess_color(title): |
|
|
""" |
|
|
""" |
|
|
Automagically guess color of given post. |
|
|
Automagically guess color of given post. |
|
@ -43,7 +56,7 @@ def format_entry(entry, author=None): |
|
|
if author: |
|
|
if author: |
|
|
embed.set_author(name=author) |
|
|
embed.set_author(name=author) |
|
|
|
|
|
|
|
|
embed.set_thumbnail(url="https://ksp.mff.cuni.cz/img/hippo_head.png") |
|
|
embed.set_thumbnail(url=f"{KSP_URL}/img/hippo_head.png") |
|
|
|
|
|
|
|
|
date = datetime.fromisoformat(entry.published) |
|
|
date = datetime.fromisoformat(entry.published) |
|
|
embed.set_footer(text=date.strftime("%-d. %-m. %Y")) |
|
|
embed.set_footer(text=date.strftime("%-d. %-m. %Y")) |
|
@ -57,7 +70,7 @@ async def post_news(bot, guild, entry_id): |
|
|
|
|
|
|
|
|
channel = get(guild.channels, id=news_json["news_channel"]) |
|
|
channel = get(guild.channels, id=news_json["news_channel"]) |
|
|
feed = await ksp_feed() |
|
|
feed = await ksp_feed() |
|
|
entries_with_id = list(filter(lambda e: e.id == f"https://ksp.mff.cuni.cz/news_{entry_id}", feed.entries)) |
|
|
entries_with_id = list(filter(lambda e: strip_id(e.id) == entry_id, feed.entries)) |
|
|
if len(entries_with_id) == 0: |
|
|
if len(entries_with_id) == 0: |
|
|
return f"Entry with id ``{entry_id}`` not found." |
|
|
return f"Entry with id ``{entry_id}`` not found." |
|
|
|
|
|
|
|
@ -92,7 +105,7 @@ class News(commands.Cog): |
|
|
return await ctx.respond(f"News channel set to {channel.mention}.", ephemeral=True) |
|
|
return await ctx.respond(f"News channel set to {channel.mention}.", ephemeral=True) |
|
|
|
|
|
|
|
|
@news.command(description="Synchronize news feed.") |
|
|
@news.command(description="Synchronize news feed.") |
|
|
@discord.option("id", str, description="Id of entry to send.") |
|
|
@discord.option("id", str, description="Id of entry to send.", autocomplete=autocomplete_news_ids) |
|
|
async def post_news(self, ctx, id: int): |
|
|
async def post_news(self, ctx, id: int): |
|
|
err = await post_news(self.bot, ctx.guild, id) |
|
|
err = await post_news(self.bot, ctx.guild, id) |
|
|
if err: |
|
|
if err: |
|
|