Removed unused and commented code
This commit is contained in:
parent
2c83430988
commit
9399919b08
@ -5,35 +5,20 @@ Loading this file via `commands.Bot.load_extension` will add `FeedCog` to the bo
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from dataclasses import asdict
|
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import validators
|
import validators
|
||||||
from feedparser import FeedParserDict, parse
|
from feedparser import FeedParserDict, parse
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from discord import Interaction, Embed, Colour, TextChannel, Permissions
|
from discord import Interaction, TextChannel
|
||||||
from discord.app_commands import Choice, Group, autocomplete, choices, rename, command
|
from discord.app_commands import Choice, Group, autocomplete, rename
|
||||||
from sqlalchemy import insert, select, and_, delete
|
|
||||||
from sqlalchemy.exc import NoResultFound, IntegrityError
|
|
||||||
|
|
||||||
from api import API
|
from api import API
|
||||||
from feed import Source, RSSFeed, Subscription, SubscriptionChannel, TrackedContent
|
from feed import Subscription, SubscriptionChannel, TrackedContent
|
||||||
from errors import IllegalFeed
|
|
||||||
from db import (
|
|
||||||
DatabaseManager,
|
|
||||||
SentArticleModel,
|
|
||||||
RssSourceModel,
|
|
||||||
FeedChannelModel,
|
|
||||||
AuditModel
|
|
||||||
)
|
|
||||||
from utils import (
|
from utils import (
|
||||||
Followup,
|
Followup,
|
||||||
PaginationView,
|
PaginationView,
|
||||||
get_rss_data,
|
get_rss_data,
|
||||||
followup,
|
|
||||||
audit,
|
|
||||||
extract_error_info,
|
|
||||||
get_unparsed_feed
|
|
||||||
)
|
)
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -91,24 +76,6 @@ async def validate_rss_source(nickname: str, url: str) -> Tuple[str | None, Feed
|
|||||||
|
|
||||||
return None, feed
|
return None, feed
|
||||||
|
|
||||||
async def set_all_articles_as_sent(inter, channel: TextChannel, feed_id: int, rss_url: str):
|
|
||||||
unparsed_feed = await get_unparsed_feed(rss_url)
|
|
||||||
source = Source.from_parsed(parse(unparsed_feed))
|
|
||||||
articles = source.get_latest_articles()
|
|
||||||
|
|
||||||
async with DatabaseManager() as database:
|
|
||||||
query = insert(SentArticleModel).values([
|
|
||||||
{
|
|
||||||
"discord_server_id": inter.guild_id,
|
|
||||||
"discord_channel_id": channel.id,
|
|
||||||
"discord_message_id": -1,
|
|
||||||
"article_url": article.url,
|
|
||||||
"feed_channel_id": feed_id
|
|
||||||
}
|
|
||||||
for article in articles
|
|
||||||
])
|
|
||||||
await database.session.execute(query)
|
|
||||||
|
|
||||||
|
|
||||||
class FeedCog(commands.Cog):
|
class FeedCog(commands.Cog):
|
||||||
"""
|
"""
|
||||||
@ -125,27 +92,6 @@ class FeedCog(commands.Cog):
|
|||||||
|
|
||||||
log.info("%s cog is ready", self.__class__.__name__)
|
log.info("%s cog is ready", self.__class__.__name__)
|
||||||
|
|
||||||
# async def autocomplete_channels(self, inter: Interaction, name: str) -> list[Choice]:
|
|
||||||
# """"""
|
|
||||||
|
|
||||||
# log.debug("autocompleting channels '%s'", name)
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# async with aiohttp.ClientSession() as session:
|
|
||||||
# api = API(self.bot.api_token, session)
|
|
||||||
# results, _ = await api.get_channel(server=inter.guild_id)
|
|
||||||
|
|
||||||
# except Exception as exc:
|
|
||||||
# log.error(exc)
|
|
||||||
# return []
|
|
||||||
|
|
||||||
# channels = Channel.from_list(results)
|
|
||||||
|
|
||||||
# return [
|
|
||||||
# Choice(name=channel.get_textchannel(self.bot).name, value=channel.id)
|
|
||||||
# for channel in channels
|
|
||||||
# ]
|
|
||||||
|
|
||||||
async def autocomplete_subscriptions(self, inter: Interaction, name: str) -> list[Choice]:
|
async def autocomplete_subscriptions(self, inter: Interaction, name: str) -> list[Choice]:
|
||||||
""""""
|
""""""
|
||||||
|
|
||||||
@ -192,101 +138,6 @@ class FeedCog(commands.Cog):
|
|||||||
for link in subscription_channels
|
for link in subscription_channels
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
# channel_group = Group(
|
|
||||||
# name="channels",
|
|
||||||
# description="channel commands",
|
|
||||||
# guild_only=True
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @channel_group.command(name="add")
|
|
||||||
# @autocomplete(sub_uuid=autocomplete_subscriptions)
|
|
||||||
# @rename(sub_uuid="subscription", textchannel="channel")
|
|
||||||
# async def new_channel(self, inter: Interaction, sub_uuid: str, textchannel: TextChannel):
|
|
||||||
# """Create a new channel."""
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# async with aiohttp.ClientSession() as session:
|
|
||||||
# api = API(self.bot.api_token, session)
|
|
||||||
# await api.create_channel(textchannel.id)
|
|
||||||
# # sub = await api.get_subscription(sub_uuid)
|
|
||||||
# # sub["channels"].append(textchannel.id)
|
|
||||||
# # await api.put_subscription(sub_uuid, sub)
|
|
||||||
|
|
||||||
# except Exception as exc:
|
|
||||||
# return await (
|
|
||||||
# Followup(exc.__class__.__name__, str(exc))
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# await (
|
|
||||||
# Followup("Channel Assigned!")
|
|
||||||
# .fields(
|
|
||||||
# subscription=sub_uuid,
|
|
||||||
# channel=textchannel.mention
|
|
||||||
# )
|
|
||||||
# .added()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @channel_group.command(name="remove")
|
|
||||||
# @autocomplete(id=autocomplete_channels)
|
|
||||||
# @rename(id="choice")
|
|
||||||
# async def remove_channel(self, inter: Interaction, id: int):
|
|
||||||
# """Remove a channel."""
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# async with aiohttp.ClientSession() as session:
|
|
||||||
# api = API(self.bot.api_token, session)
|
|
||||||
# await api.delete_channel(id)
|
|
||||||
|
|
||||||
# except Exception as exc:
|
|
||||||
# return await (
|
|
||||||
# Followup(exc.__class__.__name__, str(exc))
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# await (
|
|
||||||
# Followup("Channel Removed!", str(id))
|
|
||||||
# .trash()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @channel_group.command(name="list")
|
|
||||||
# async def list_channels(self, inter: Interaction):
|
|
||||||
|
|
||||||
# log.debug("Listing all subscription channels with this server.")
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# page = 1
|
|
||||||
# pagesize = 10
|
|
||||||
|
|
||||||
# def formatdata(index, item):
|
|
||||||
# item = Channel.from_dict(item)
|
|
||||||
# text_channel = item.get_textchannel(self.bot)
|
|
||||||
|
|
||||||
# key = f"{index}. {text_channel.mention}"
|
|
||||||
# value = f"[RSS]({item.rss_url}) · [API]({API.CHANNEL_ENDPOINT}{item.uuid}/)"
|
|
||||||
# return key, value
|
|
||||||
|
|
||||||
# async def getdata(page):
|
|
||||||
# async with aiohttp.ClientSession() as session:
|
|
||||||
# api = API(self.bot.api_token, session)
|
|
||||||
# return await api.get_subscriptions(
|
|
||||||
# server=inter.guild.id, page=page, page_size=pagesize
|
|
||||||
# )
|
|
||||||
|
|
||||||
# embed = Followup(f"Subscriptions in {inter.guild.name}").info()._embed
|
|
||||||
# pagination = PaginationView(self.bot, inter, embed, getdata, formatdata, pagesize, page)
|
|
||||||
# await pagination.send()
|
|
||||||
|
|
||||||
subscription_group = Group(
|
subscription_group = Group(
|
||||||
name="subscriptions",
|
name="subscriptions",
|
||||||
description="subscription commands",
|
description="subscription commands",
|
||||||
@ -494,537 +345,6 @@ class FeedCog(commands.Cog):
|
|||||||
await pagination.send()
|
await pagination.send()
|
||||||
|
|
||||||
|
|
||||||
# # All RSS commands belong to this group.
|
|
||||||
# feed_group = Group(
|
|
||||||
# name="feed",
|
|
||||||
# description="Commands for RSS sources.",
|
|
||||||
# default_permissions=Permissions.elevated(),
|
|
||||||
# guild_only=True # We store guild IDs in the database, so guild only = True
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @feed_group.command(name="new")
|
|
||||||
# async def add_rssfeed(self, inter: Interaction, name: str, url: str):
|
|
||||||
# """Add a new RSS Feed for this server.
|
|
||||||
|
|
||||||
# Args:
|
|
||||||
# inter (Interaction): Represents the discord command interaction.
|
|
||||||
# name (str): A nickname used to refer to this RSS Feed.
|
|
||||||
# url (str): The URL of the RSS Feed.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# rssfeed = await self.bot.functions.create_new_rssfeed(name, url, inter.guild_id)
|
|
||||||
# except Exception as exc:
|
|
||||||
# await (
|
|
||||||
# Followup(exc.__class__.__name__, str(exc))
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
# else:
|
|
||||||
# await (
|
|
||||||
# Followup("New RSS Feed")
|
|
||||||
# .image(rssfeed.image)
|
|
||||||
# .fields(uuid=rssfeed.uuid, name=name, url=url)
|
|
||||||
# .added()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @feed_group.command(name="delete")
|
|
||||||
# @autocomplete(uuid=autocomplete_rssfeed)
|
|
||||||
# @rename(uuid="rssfeed")
|
|
||||||
# async def delete_rssfeed(self, inter: Interaction, uuid: str):
|
|
||||||
# """Delete an existing RSS Feed for this server.
|
|
||||||
|
|
||||||
# Args:
|
|
||||||
# inter (Interaction): Represents the discord command interaction.
|
|
||||||
# uuid (str): The UUID of the
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# rssfeed = await self.bot.functions.delete_rssfeed(uuid)
|
|
||||||
# except NoResultFound:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Feed Not Found Error",
|
|
||||||
# "A Feed with these parameters could not be found."
|
|
||||||
# )
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
# else:
|
|
||||||
# await (
|
|
||||||
# Followup("Feed Deleted")
|
|
||||||
# .image(rssfeed.image)
|
|
||||||
# .fields(uuid=rssfeed.uuid, name=rssfeed.name, url=rssfeed.url)
|
|
||||||
# .trash()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @feed_group.command(name="list")
|
|
||||||
# async def list_rssfeeds(self, inter: Interaction):
|
|
||||||
# """Provides a list of all RSS Feeds
|
|
||||||
|
|
||||||
# Args:
|
|
||||||
# inter (Interaction): Represents the discord command interaction.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# page = 1
|
|
||||||
# pagesize = 10
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# def formatdata(index, item):
|
|
||||||
# key = f"{index}. {item.name}"
|
|
||||||
# value = f"[RSS]({item.url}) · [API]({API.RSS_FEED_ENDPOINT}{item.uuid}/)"
|
|
||||||
# return key, value
|
|
||||||
|
|
||||||
# async def getdata(page):
|
|
||||||
# data, count = await self.bot.functions.get_rssfeeds(inter.guild_id, page, pagesize)
|
|
||||||
# return data, count
|
|
||||||
|
|
||||||
# embed = Followup(f"Available RSS Feeds in {inter.guild.name}").info()._embed
|
|
||||||
# pagination = PaginationView(self.bot, inter, embed, getdata, formatdata, pagesize, 1)
|
|
||||||
# await pagination.send()
|
|
||||||
|
|
||||||
# except Exception as exc:
|
|
||||||
# await (
|
|
||||||
# Followup(exc.__class__.__name__, str(exc))
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# # @feed_group.command(name="fetch")
|
|
||||||
# # @rename(max_="max")
|
|
||||||
# # @autocomplete(rss=source_autocomplete)
|
|
||||||
# async def fetch_rss(self, inter: Interaction, rss: str, max_: int=1):
|
|
||||||
# """Fetch an item from the specified RSS feed.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# rss : str
|
|
||||||
# The RSS feed to fetch from.
|
|
||||||
# max_ : int, optional
|
|
||||||
# Maximum number of items to fetch, by default 1, limits at 5.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# if max_ > 5:
|
|
||||||
# followup(inter, "It looks like you have requested too many articles.\nThe limit is 5")
|
|
||||||
# return
|
|
||||||
|
|
||||||
# invalid_message, feed = await validate_rss_source("", rss)
|
|
||||||
# if invalid_message:
|
|
||||||
# await followup(inter, invalid_message)
|
|
||||||
# return
|
|
||||||
|
|
||||||
# source = Source.from_parsed(feed)
|
|
||||||
# articles = source.get_latest_articles(max_)
|
|
||||||
|
|
||||||
# if not articles:
|
|
||||||
# await followup(inter, "Sorry, I couldn't find any articles from this feed.")
|
|
||||||
# return
|
|
||||||
|
|
||||||
# async with aiohttp.ClientSession() as session:
|
|
||||||
# embeds = [await article.to_embed(session) for article in articles]
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# query = insert(SentArticleModel).values([
|
|
||||||
# {
|
|
||||||
# "discord_server_id": inter.guild_id,
|
|
||||||
# "discord_channel_id": inter.channel_id,
|
|
||||||
# "discord_message_id": inter.id,
|
|
||||||
# "article_url": article.url,
|
|
||||||
# }
|
|
||||||
# for article in articles
|
|
||||||
# ])
|
|
||||||
# await database.session.execute(query)
|
|
||||||
# await audit(self,
|
|
||||||
# f"User is requesting {max_} articles from {source.name}",
|
|
||||||
# inter.user.id, database=database
|
|
||||||
# )
|
|
||||||
|
|
||||||
# await followup(inter, embeds=embeds)
|
|
||||||
|
|
||||||
# # Help ---- ---- ----
|
|
||||||
|
|
||||||
# @feed_group.command(name="help")
|
|
||||||
# async def get_help(self, inter: Interaction):
|
|
||||||
# """Get help on how to use my commands.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# description = (
|
|
||||||
# "`/feed add <nickname> <url>` \n\n"
|
|
||||||
# "Save a new RSS feed to the bot. This can be referred to later, when assigning "
|
|
||||||
# "channels to receive content from these RSS feeds."
|
|
||||||
|
|
||||||
# "\n\n\n`/feed remove <option>` \n\n"
|
|
||||||
# "Remove a previously saved RSS feed. Select the nickname from the shown options "
|
|
||||||
# "if any. You can re-add the RSS feed to the bot using the `/feeds add` command."
|
|
||||||
|
|
||||||
# "\n\n\n`/feed list <sort> <sort_reverse>` \n\n"
|
|
||||||
# "List all saved RSS feeds numerically. Use the `<sort>` option to order "
|
|
||||||
# "the results by either nickname or date & time added. Use the `<sort_reverse>` "
|
|
||||||
# "option to order by ascending or descending in conjunction with the `<sort>` option."
|
|
||||||
|
|
||||||
# "\n\n\n`/feed assign <rss> <textchannel>` \n\n"
|
|
||||||
# "Assign a channel to an RSS feed. Previously saved RSS feeds will be selectable "
|
|
||||||
# "under the `<rss>` option. The channel will be assumed as the current channel, "
|
|
||||||
# "unless specified otherwise using the `<textchannel` option."
|
|
||||||
|
|
||||||
# "\n\n\n`/feed unassign <option>` \n\n"
|
|
||||||
# "Unassigned channel from an RSS feed. Previously assigned channels will be shown "
|
|
||||||
# "as an `<option>`, select one to remove it."
|
|
||||||
|
|
||||||
# "\n\n\n`/feed channels` \n\n"
|
|
||||||
# "List all channels assigned to an RSS feed numerically."
|
|
||||||
# )
|
|
||||||
|
|
||||||
# embed = Embed(
|
|
||||||
# title="Help",
|
|
||||||
# description=description,
|
|
||||||
# colour=Colour.blue(),
|
|
||||||
# )
|
|
||||||
|
|
||||||
# await followup(inter, embed=embed)
|
|
||||||
|
|
||||||
# # Channels ---- ---- ----
|
|
||||||
|
|
||||||
# async def autocomplete_rss_sources(self, inter: Interaction, nickname: str):
|
|
||||||
# """_summary_
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# _description_
|
|
||||||
# nickname : str
|
|
||||||
# _description_
|
|
||||||
|
|
||||||
# Returns
|
|
||||||
# -------
|
|
||||||
# _type_
|
|
||||||
# _description_
|
|
||||||
# """
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# whereclause = and_(
|
|
||||||
# RssSourceModel.discord_server_id == inter.guild_id,
|
|
||||||
# RssSourceModel.nick.ilike(f"%{nickname}%")
|
|
||||||
# )
|
|
||||||
# query = select(RssSourceModel).where(whereclause)
|
|
||||||
# result = await database.session.execute(query)
|
|
||||||
# sources = [
|
|
||||||
# Choice(name=rss.nick, value=rss.rss_url)
|
|
||||||
# for rss in result.scalars().all()
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# log.debug("Autocomplete rss_sources returned %s results", len(sources))
|
|
||||||
|
|
||||||
# return sources
|
|
||||||
|
|
||||||
# async def autocomplete_existing_feeds(self, inter: Interaction, current: str):
|
|
||||||
# """Returns a list of existing RSS + Channel feeds.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# current : str
|
|
||||||
# The current text entered for the autocomplete.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# whereclause = and_(
|
|
||||||
# FeedChannelModel.discord_server_id == inter.guild_id,
|
|
||||||
# FeedChannelModel.search_name.ilike(f"%{current}%"),
|
|
||||||
# RssSourceModel.id == FeedChannelModel.rss_source_id
|
|
||||||
# )
|
|
||||||
# query = (
|
|
||||||
# select(FeedChannelModel, RssSourceModel)
|
|
||||||
# .where(whereclause)
|
|
||||||
# .join(RssSourceModel)
|
|
||||||
# .order_by(FeedChannelModel.discord_channel_id)
|
|
||||||
# )
|
|
||||||
# result = await database.session.execute(query)
|
|
||||||
# feeds = []
|
|
||||||
# for feed in result.scalars().all():
|
|
||||||
# channel = inter.guild.get_channel(feed.discord_channel_id)
|
|
||||||
# feeds.append(Choice(
|
|
||||||
# name=f"# {channel.name} | {feed.rss_source.nick}",
|
|
||||||
# value=feed.id
|
|
||||||
# ))
|
|
||||||
|
|
||||||
# log.debug("Autocomplete existing_feeds returned %s results", len(feeds))
|
|
||||||
|
|
||||||
# return feeds
|
|
||||||
|
|
||||||
# # # All RSS commands belong to this group.
|
|
||||||
# # channel_group = Group(
|
|
||||||
# # name="channels",
|
|
||||||
# # description="Commands for channel assignment.",
|
|
||||||
# # guild_only=True # These commands belong to channels of
|
|
||||||
# # )
|
|
||||||
|
|
||||||
# @feed_group.command(name="assign")
|
|
||||||
# @rename(url="feed")
|
|
||||||
# @autocomplete(url=autocomplete_rss_sources)
|
|
||||||
# async def include_feed(
|
|
||||||
# self, inter: Interaction, url: str, channel: TextChannel = None, prevent_spam: bool = True
|
|
||||||
# ):
|
|
||||||
# """Include a feed within the specified channel.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# url : int
|
|
||||||
# The RSS feed to include.
|
|
||||||
# channel : TextChannel
|
|
||||||
# The channel to include the feed in.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# channel = channel or inter.channel
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# feed_id, source = await self.bot.functions.assign_feed(
|
|
||||||
# url, channel.name, channel.id, inter.guild_id
|
|
||||||
# )
|
|
||||||
# except IntegrityError:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Duplicate Assigned Feed Error",
|
|
||||||
# f"This Feed has already been assigned to {channel.mention}"
|
|
||||||
# )
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
# except NoResultFound:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Feed Not Found Error",
|
|
||||||
# "A Feed with these parameters could not be found."
|
|
||||||
# )
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
# else:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Feed Assigned",
|
|
||||||
# f"I've assigned {channel.mention} to receive content from "
|
|
||||||
# f"[{source.name}]({source.url})."
|
|
||||||
# )
|
|
||||||
# .assign()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# if prevent_spam:
|
|
||||||
# await set_all_articles_as_sent(inter, channel, feed_id, url)
|
|
||||||
|
|
||||||
# @feed_group.command(name="unassign")
|
|
||||||
# @autocomplete(option=autocomplete_existing_feeds)
|
|
||||||
# async def exclude_feed(self, inter: Interaction, option: int):
|
|
||||||
# """Undo command for the `/channel include-feed` command.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# option : str
|
|
||||||
# The RSS feed and channel to exclude.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# try:
|
|
||||||
# await self.bot.functions.unassign_feed(option, inter.guild_id)
|
|
||||||
# except NoResultFound:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Assigned Feed Not Found",
|
|
||||||
# "The assigned Feed doesn't exist."
|
|
||||||
# )
|
|
||||||
# .error()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
# else:
|
|
||||||
# await (
|
|
||||||
# Followup(
|
|
||||||
# "Unassigned Feed",
|
|
||||||
# "Feed has been unassigned."
|
|
||||||
# )
|
|
||||||
# .trash()
|
|
||||||
# .send(inter)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# # async with DatabaseManager() as database:
|
|
||||||
# # query = delete(FeedChannelModel).where(and_(
|
|
||||||
# # FeedChannelModel.id == option,
|
|
||||||
# # FeedChannelModel.discord_server_id == inter.guild_id
|
|
||||||
# # ))
|
|
||||||
|
|
||||||
# # result = await database.session.execute(query)
|
|
||||||
|
|
||||||
# # if not result.rowcount:
|
|
||||||
# # await followup_error(inter,
|
|
||||||
# # title="Assigned Feed Not Found",
|
|
||||||
# # message=f"I couldn't find any assigned feeds for the option: {option}"
|
|
||||||
# # )
|
|
||||||
# # return
|
|
||||||
|
|
||||||
# await followup(inter, "I've removed this item (placeholder response)")
|
|
||||||
|
|
||||||
# @feed_group.command(name="channels")
|
|
||||||
# @choices(sort=channels_list_sort_choices)
|
|
||||||
# async def list_feeds(self, inter: Interaction, sort: Choice[int] = 0, sort_reverse: bool = False):
|
|
||||||
# """List all of the channels and their respective included feeds.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# description = "Sort By "
|
|
||||||
|
|
||||||
# if isinstance(sort, Choice):
|
|
||||||
# match sort.value, sort_reverse:
|
|
||||||
# case 0, False:
|
|
||||||
# order_by = RssSourceModel.nick.asc()
|
|
||||||
# description += "Nickname "
|
|
||||||
# case 0, True:
|
|
||||||
# order_by = RssSourceModel.nick.desc()
|
|
||||||
# description += "Nickname "
|
|
||||||
# case 1, False:
|
|
||||||
# order_by = FeedChannelModel.discord_channel_id.asc()
|
|
||||||
# description += "Channel ID "
|
|
||||||
# case 1, True:
|
|
||||||
# order_by = FeedChannelModel.discord_channel_id.desc()
|
|
||||||
# description += "Channel ID "
|
|
||||||
# case 2, False:
|
|
||||||
# order_by = RssSourceModel.created.desc()
|
|
||||||
# description += "Date Added "
|
|
||||||
# case 2, True:
|
|
||||||
# order_by = RssSourceModel.created.asc()
|
|
||||||
# description += "Date Added "
|
|
||||||
# case _, _:
|
|
||||||
# raise ValueError(f"Unknown sort: {sort}")
|
|
||||||
# else:
|
|
||||||
# order_by = FeedChannelModel.discord_channel_id.asc()
|
|
||||||
# description = ""
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# whereclause = and_(
|
|
||||||
# FeedChannelModel.discord_server_id == inter.guild_id,
|
|
||||||
# RssSourceModel.id == FeedChannelModel.rss_source_id
|
|
||||||
# )
|
|
||||||
# query = (
|
|
||||||
# select(FeedChannelModel, RssSourceModel)
|
|
||||||
# .where(whereclause)
|
|
||||||
# .join(RssSourceModel)
|
|
||||||
# .order_by(order_by)
|
|
||||||
# )
|
|
||||||
# result = await database.session.execute(query)
|
|
||||||
|
|
||||||
# feed_channels = result.scalars().all()
|
|
||||||
# rowcount = len(feed_channels)
|
|
||||||
|
|
||||||
# if not feed_channels:
|
|
||||||
# await followup_error(inter,
|
|
||||||
# title="No Assigned Feeds Found",
|
|
||||||
# message="Assign a channel to receive feed content with `/feed assign`."
|
|
||||||
# )
|
|
||||||
# return
|
|
||||||
|
|
||||||
# output = "\n".join([
|
|
||||||
# f"{i}. <#{feed.discord_channel_id}> · " # TODO: add icon indicating inaccessible channel, if is the case.
|
|
||||||
# f"[{feed.rss_source.nick}]({feed.rss_source.rss_url})"
|
|
||||||
# for i, feed in enumerate(feed_channels)
|
|
||||||
# ])
|
|
||||||
|
|
||||||
# embed = Embed(
|
|
||||||
# title="Saved Feed Channels",
|
|
||||||
# description=f"{description}\n{output}",
|
|
||||||
# colour=Colour.blue()
|
|
||||||
# )
|
|
||||||
# embed.set_footer(text=f"Showing {rowcount} results")
|
|
||||||
|
|
||||||
# await followup(inter, embed=embed)
|
|
||||||
|
|
||||||
# admin_group = Group(
|
|
||||||
# name="admin",
|
|
||||||
# description="Administration tasks",
|
|
||||||
# guild_only=True,
|
|
||||||
# default_permissions=Permissions.elevated()
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @admin_group.command(name="clear-sent-articles")
|
|
||||||
# async def clear_sent_articles(self, inter: Interaction):
|
|
||||||
# """Clear the database of all sent articles.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# query = delete(SentArticleModel).where(and_(
|
|
||||||
# SentArticleModel.discord_server_id == inter.guild_id
|
|
||||||
# ))
|
|
||||||
# result = await database.session.execute(query)
|
|
||||||
|
|
||||||
# await followup(inter,
|
|
||||||
# f"{result.rowcount} sent articles have been cleared from the database. "
|
|
||||||
# "I will no longer recognise these articles as sent, and will send them "
|
|
||||||
# "again if they appear during the next RSS feed scan."
|
|
||||||
# )
|
|
||||||
|
|
||||||
# audit_group = Group(
|
|
||||||
# name="audit",
|
|
||||||
# description="Check audited actions.",
|
|
||||||
# guild_only=True,
|
|
||||||
# default_permissions=Permissions.elevated()
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @audit_group.command(name="check")
|
|
||||||
# async def check_audit_log(self, inter: Interaction):
|
|
||||||
# """Check the audit log.
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
# ----------
|
|
||||||
# inter : Interaction
|
|
||||||
# Represents an app command interaction.
|
|
||||||
# """
|
|
||||||
|
|
||||||
# await inter.response.defer()
|
|
||||||
|
|
||||||
# async with DatabaseManager() as database:
|
|
||||||
# query = select(AuditModel).where(and_(
|
|
||||||
# ))
|
|
||||||
# result = await database.session.execute(query)
|
|
||||||
|
|
||||||
|
|
||||||
async def setup(bot):
|
async def setup(bot):
|
||||||
"""
|
"""
|
||||||
Setup function for this extension.
|
Setup function for this extension.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user