Skip to content

Commit 14e3c0e

Browse files
committed
feat: Implement DMChannel model and enhance DM handling
1 parent 69a8718 commit 14e3c0e

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

hoyo_buddy/bot/bot.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,13 @@ async def dm_user(
288288
logger.debug(f"DMing user {user_id}")
289289

290290
try:
291-
user = self.get_user(user_id) or await self.fetch_user(user_id)
292-
message = await user.send(content, **kwargs)
293-
except (discord.Forbidden) as e:
291+
channel = await models.DMChannel.get_or_none(user_id=user_id)
292+
if channel is None:
293+
user = self.get_user(user_id) or await self.fetch_user(user_id)
294+
dm_channel = user.dm_channel or await user.create_dm()
295+
channel = await models.DMChannel.create(user_id=user_id, id=dm_channel.id)
296+
message = await self.get_partial_messageable(channel.id).send(content, **kwargs)
297+
except discord.HTTPException as e:
294298
logger.debug(f"Failed to DM user {user_id}: {e}")
295299
except Exception as e:
296300
self.capture_exception(e)

hoyo_buddy/db/models.py

+5
Original file line numberDiff line numberDiff line change
@@ -610,3 +610,8 @@ async def create(
610610
task_type=task_type,
611611
type="default" if isinstance(embed, DefaultEmbed) else "error",
612612
)
613+
614+
615+
class DMChannel(BaseModel):
616+
id = fields.BigIntField(pk=True, generated=False)
617+
user_id = fields.BigIntField()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from tortoise import BaseDBAsyncClient
2+
3+
4+
async def upgrade(db: BaseDBAsyncClient) -> str:
5+
return """
6+
CREATE TABLE IF NOT EXISTS "dmchannel" (
7+
"id" BIGINT NOT NULL PRIMARY KEY,
8+
"user_id" BIGINT NOT NULL
9+
);"""
10+
11+
12+
async def downgrade(db: BaseDBAsyncClient) -> str:
13+
return """
14+
DROP TABLE IF EXISTS "dmchannel";"""

0 commit comments

Comments
 (0)