File tree 3 files changed +26
-3
lines changed
3 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -288,9 +288,13 @@ async def dm_user(
288
288
logger .debug (f"DMing user { user_id } " )
289
289
290
290
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 :
294
298
logger .debug (f"Failed to DM user { user_id } : { e } " )
295
299
except Exception as e :
296
300
self .capture_exception (e )
Original file line number Diff line number Diff line change @@ -610,3 +610,8 @@ async def create(
610
610
task_type = task_type ,
611
611
type = "default" if isinstance (embed , DefaultEmbed ) else "error" ,
612
612
)
613
+
614
+
615
+ class DMChannel (BaseModel ):
616
+ id = fields .BigIntField (pk = True , generated = False )
617
+ user_id = fields .BigIntField ()
Original file line number Diff line number Diff line change
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";"""
You can’t perform that action at this time.
0 commit comments