Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1 +1 @@
uv 0.8.18
uv 0.10.2
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@ name = "mikubot"
version = "0.1.0"
description = "A Discord bot for VirtualLiveLab"
dependencies = [
"discord-py[voice,speed]>=2.6.3",
"discord-py[voice,speed]>=2.6.4",
"pydantic>=2.11.7",
"aiohttp>=3.12.15",
"ductile-ui==0.3.0",
"typing-extensions>=4.15.0",
"asyncer>=0.0.8",
"result>=0.17.0",
"notion-client>=2.5.0",
"glom>=24.11.0"
"glom>=25.12.0"
]
readme = "README.md"
requires-python = ">= 3.11"

[dependency-groups]
dev = ["mypy>=1.17.1", "python-dotenv>=1.1.1", "ruff>=0.13.2"]
dev = ["mypy>=1.17.1", "python-dotenv>=1.2.1", "ruff>=0.13.2"]

[build-system]
requires = ["hatchling"]
Expand Down
21 changes: 0 additions & 21 deletions src/app/core/chat/embed.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,13 @@
from typing import TYPE_CHECKING

import discord
from discord import Embed

from src.const.enums import Color
from src.utils.time import TimeUtils

if TYPE_CHECKING:
from .cog import OmikujiResult


def user_embed(
user: discord.Member | discord.User,
) -> Embed:
embed = Embed(
title=user.display_name,
color=Color.MIKU,
)
embed.add_field(
name="Created at",
value=TimeUtils.dt_to_str(user.created_at),
)
embed.add_field(
name="ID",
value=user.id,
)
embed.set_thumbnail(url=user.display_avatar.url)
return embed


def omikuji_embed(result: "OmikujiResult", description: str) -> Embed:
return Embed(
title="おみくじ",
Expand Down
148 changes: 0 additions & 148 deletions src/app/core/vote/_cog.py

This file was deleted.

29 changes: 0 additions & 29 deletions src/app/core/vote/embed.py

This file was deleted.

7 changes: 0 additions & 7 deletions src/app/core/vote/type.py

This file was deleted.

8 changes: 0 additions & 8 deletions src/const/discord.py
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
MAX_EMBED_FIELD = 25

MAX_EMBED_DESCRIPTION_LENGTH = 4096

MAX_EMBEDS_PER_MESSAGE = 10

VOTE_FOOTER_MESSAGE = "投票を集計するにはメッセージを右クリックしてください。"

MAX_EMBED_FIELD_VALUE_LENGTH = 1024
13 changes: 0 additions & 13 deletions src/const/literal.py
Original file line number Diff line number Diff line change
@@ -1,14 +1 @@
# not found
CHANNEL_NOT_FOUND = "チャンネルが見つかりませんでした。"
MESSAGE_NOT_FOUND = "メッセージが見つかりませんでした。"
CHANNEL_OR_MESSAGE_NOT_FOUND = "チャンネルまたはメッセージが見つかりませんでした。"
ROLE_NOT_FOUND = "ロールが見つかりませんでした。"
USER_NOT_FOUND = "ユーザーが見つかりませんでした。"

# fail
FAILED_TO_UNARCHIVE = "アーカイブの解除に失敗しました。"
FAILED_TO_SEND_DM = "DMの送信に失敗しました。\n送信対象がDMが受信できない設定に\nしている可能性があります。"

# error
FORBIDDEN = "必要な権限がBotに与えられていません。"
UNKNOWN_ERROR = "不明なエラーが発生しました。"
4 changes: 0 additions & 4 deletions src/utils/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,3 @@ def get_cwd() -> pathlib.Path:

def glob_files(glob_dir: pathlib.Path, file_name: str) -> list[pathlib.Path]:
return list(glob_dir.glob(f"**/{file_name}"))


def convert_to_cog(path: pathlib.Path) -> str:
return path.as_posix().removesuffix(path.suffix).replace("/", ".")
46 changes: 0 additions & 46 deletions src/utils/finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,6 @@ async def find_channel(

return validate(channel, expected_type)

# if isinstance(type, list):
# for t in type:
# if isinstance(channel, t):
# return channel
# else:
# if not isinstance(channel, type):
# self.logger.exception(literal.CHANNEL_NOT_FOUND)
# raise TypeError(f"Channel is not a {type}")
# return channel

async def find_guild(self, guild_id: int) -> discord.Guild:
guild = self.bot.get_guild(guild_id)
if not guild:
Expand All @@ -64,39 +54,3 @@ async def find_guild(self, guild_id: int) -> discord.Guild:
self.logger.exception(literal.CHANNEL_NOT_FOUND, exc_info=e)
raise
return guild

async def find_role(self, guild_id: int, role_id: int) -> discord.Role:
guild = await self.find_guild(guild_id)
role = guild.get_role(role_id)
if not role:
roles = await guild.fetch_roles()
role = next(r for r in roles if r.id == role_id)
if not role:
self.logger.exception(literal.CHANNEL_NOT_FOUND)
raise ValueError
return role

async def find_member(self, guild_id: int, user_id: int) -> discord.Member | None:
member: discord.Member | None = None
guild = await self.find_guild(guild_id)
member = guild.get_member(user_id)
if not member:
try:
member = await guild.fetch_member(user_id)
except Exception as e:
self.logger.exception(literal.USER_NOT_FOUND, exc_info=e)
member = None
return member

async def find_user(self, user_id: int) -> discord.User | None:
user: discord.User | None = None
user = self.bot.get_user(user_id)
if user:
return user

try:
user = await self.bot.fetch_user(user_id)
except Exception as e:
self.logger.exception(literal.USER_NOT_FOUND, exc_info=e)
user = None
return user
11 changes: 0 additions & 11 deletions src/utils/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,3 @@ def read_json(filename: str) -> dict[str, Any]:
path = get_cwd() / filename
with path.open(mode="r") as f:
return json.load(f)


def remove_file_extension(filename: str) -> str:
return filename.removesuffix(Path(filename).suffix)


def write_log(filename: str, data: str, *, append: bool = True) -> None:
m = "a" if append else "w"
with Path(filename).open(mode=m) as f:
f.write(data)
return
Loading