Implement YouTube manager

This commit is contained in:
BreadTube 2025-09-26 20:59:38 +09:00 committed by Corentin
commit b958f4fe55
8 changed files with 253 additions and 38 deletions

View file

@ -14,15 +14,14 @@ import urllib.error
import urllib.request
import traceback
from breadtube_bot.youtube_api import YoutubeManager
from .api import Api, ApiAction, ApiVersion
from .config import Config
from .logger import create_logger
from .objects import (
Attachment, ChannelCategory, ChannelType, FileMime, Message, MessageReference, MessageReferenceType, Overwrite,
OverwriteType, Permissions, Role, TextChannel, User)
HTTPHeaders = dict[str, str]
Attachment, ChannelCategory, ChannelType, FileMime, HTTPHeaders, Message, MessageReference, MessageReferenceType,
Overwrite, OverwriteType, Permissions, Role, TextChannel, User)
class ApiEncoder(json.JSONEncoder):
@ -45,6 +44,12 @@ class DiscordManager:
remaining: int
next_reset: float
@dataclass
class YoutTubeChannel:
name: str
channel_id: str
last_update: float
class Task(Enum):
SCAN_BOT_CHANNEL = 1
DELETE_MESSAGES = 2
@ -56,7 +61,7 @@ class DiscordManager:
raise RuntimeError('Cannot current bot version')
return tomllib.loads(pyproject_path.read_text(encoding='utf-8'))['project']['version']
def __init__(self, bot_token: str, guild_id: int, config: Config | None = None,
def __init__(self, bot_token: str, guild_id: int, yt_api_key: str, config: Config | None = None,
log_level: int = logging.INFO) -> None:
self.config = config or Config()
self.guild_id = guild_id
@ -73,6 +78,7 @@ class DiscordManager:
self.guild_roles: list = self.list_roles()
self.bot_channel: TextChannel | None = None
self.init_message: Message | None = None
for _ in range(self.config.bot_channel_init_retries):
while not self.init_bot_channel():
time.sleep(10)
@ -85,6 +91,8 @@ class DiscordManager:
self._scan_bot_channel()
self.tasks.append((
self.Task.SCAN_BOT_CHANNEL, time.time() + self.config.bot_channel_scan_interval, None))
self.yt_manager = YoutubeManager(api_key=yt_api_key, logger=self.logger)
self.logger.info('Bot initialized')
def _update_rate_limit(self, headers: HTTPHeaders):