database and articleview changes
This commit is contained in:
parent
7b86ae0434
commit
27d3077f14
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,6 +1,10 @@
|
|||||||
# Stores the Bot token
|
# Stores the Bot token
|
||||||
TOKEN
|
TOKEN
|
||||||
|
|
||||||
|
# Databases
|
||||||
|
*.sqlite
|
||||||
|
*.db
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
42
db/build.sql
42
db/build.sql
@ -1,42 +0,0 @@
|
|||||||
|
|
||||||
/*
|
|
||||||
Server Channels
|
|
||||||
*/
|
|
||||||
CREATE TABLE IF NOT EXISTS 'server_channels' (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
channel_id INTEGER NOT NULL,
|
|
||||||
news_category_id INTEGER NOT NULL,
|
|
||||||
active INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY (news_category_id) REFERENCES 'news_categories' (id)
|
|
||||||
ON DELETE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
News Articles
|
|
||||||
*/
|
|
||||||
CREATE TABLE IF NOT EXISTS 'news_articles' (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
url TEXT NOT NULL,
|
|
||||||
server_channel_id INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY (server_channel_id) REFERENCES 'server_channels' (id)
|
|
||||||
ON DELETE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
News Categories
|
|
||||||
*/
|
|
||||||
CREATE TABLE IF NOT EXISTS 'news_categories' (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT UNIQUE NOT NULL
|
|
||||||
);
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('all');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('world');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('uk');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('north_america');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('entertainment');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('business');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('tech');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('science');
|
|
||||||
INSERT OR IGNORE INTO 'news_categories' (name) VALUES ('top_stories');
|
|
BIN
db/db.sqlite
BIN
db/db.sqlite
Binary file not shown.
@ -7,10 +7,9 @@ import logging
|
|||||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
DB_PATH = "db/db.sqlite"
|
DB_PATH = "sqlite.db"
|
||||||
BUILD_PATH = "db/build.sql"
|
DATABASE_URL = "sqlite:///sqlite.db"
|
||||||
DATABASE_URL = "sqlite:///db/db.sqlite"
|
DATABASE_ASYNC_URL = "sqlite+aiosqlite:///sqlite.db"
|
||||||
DATABASE_ASYNC_URL = "sqlite+aiosqlite:///db/db.sqlite"
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -43,6 +43,27 @@ class NewsStoryType:
|
|||||||
published_parsed: datetime
|
published_parsed: datetime
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleView(discord.ui.View):
|
||||||
|
|
||||||
|
def __init__(self, story: NewsStoryType):
|
||||||
|
super().__init__(timeout=None)
|
||||||
|
|
||||||
|
self.story = story
|
||||||
|
self.add_item(discord.ui.Button(
|
||||||
|
label="Visit Article",
|
||||||
|
url=story.link,
|
||||||
|
style=discord.ButtonStyle.url
|
||||||
|
))
|
||||||
|
|
||||||
|
# @discord.ui.button(label="Read More")
|
||||||
|
async def read_more(self, inter: Interaction, button: discord.Button):
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
await inter.response.send_message(self.story.summary_detail)
|
||||||
|
|
||||||
|
|
||||||
class NewsCog(commands.Cog):
|
class NewsCog(commands.Cog):
|
||||||
"""
|
"""
|
||||||
News cog.
|
News cog.
|
||||||
@ -149,7 +170,8 @@ class NewsCog(commands.Cog):
|
|||||||
|
|
||||||
for story in stories:
|
for story in stories:
|
||||||
embed = await self.story_to_embed(story, category.name)
|
embed = await self.story_to_embed(story, category.name)
|
||||||
await inter.followup.send(embed=embed)
|
view = ArticleView(story)
|
||||||
|
await inter.followup.send(embed=embed, view=view)
|
||||||
|
|
||||||
async def _get_or_fetch_channel(self, channel_id: int) -> discord.TextChannel:
|
async def _get_or_fetch_channel(self, channel_id: int) -> discord.TextChannel:
|
||||||
"""
|
"""
|
||||||
@ -229,10 +251,11 @@ class NewsCog(commands.Cog):
|
|||||||
return
|
return
|
||||||
|
|
||||||
story_embed = await self.story_to_embed(story, category.name)
|
story_embed = await self.story_to_embed(story, category.name)
|
||||||
|
story_view = ArticleView(story)
|
||||||
for channel in server_channels:
|
for channel in server_channels:
|
||||||
await send_or_ignore(channel.channel_id, story_embed, story.link)
|
await send_or_ignore(channel.channel_id, story_embed, story_view, story.link)
|
||||||
|
|
||||||
async def send_or_ignore(channel_id: int, story_embed: discord.Embed, story_link: str):
|
async def send_or_ignore(channel_id: int, story_embed: discord.Embed, story_view: ArticleView, story_link: str):
|
||||||
"""
|
"""
|
||||||
Send (or don't) the given `story_embed` to a discord channel with the matching `channel_id`.
|
Send (or don't) the given `story_embed` to a discord channel with the matching `channel_id`.
|
||||||
The embed will be sent if a matching `story_link` has not already been sent to the channel.
|
The embed will be sent if a matching `story_link` has not already been sent to the channel.
|
||||||
@ -246,7 +269,7 @@ class NewsCog(commands.Cog):
|
|||||||
await flag_url_as_sent(channel_id, story_link)
|
await flag_url_as_sent(channel_id, story_link)
|
||||||
|
|
||||||
channel = await self._get_or_fetch_channel(channel_id)
|
channel = await self._get_or_fetch_channel(channel_id)
|
||||||
await channel.send(embed=story_embed)
|
await channel.send(embed=story_embed, view=story_view)
|
||||||
|
|
||||||
async def flag_url_as_sent(channel_id: int, story_link: str):
|
async def flag_url_as_sent(channel_id: int, story_link: str):
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user