質問編集履歴

5

コードを追加しました

2023/03/09 19:17

投稿

Usaka_1
Usaka_1

スコア14

test CHANGED
File without changes
test CHANGED
@@ -6,28 +6,13 @@
6
6
  ・そのメッセージのIDを取得したい
7
7
 
8
8
  ### 前提
9
+
9
10
  はじめたての初心者です。
10
11
  discord.pyでbotを作っています。
11
12
 
12
13
  ・質問内容
13
14
  質問内容は、[実現したいこと]の通りです。
14
15
  以下のソースコードを実行しましたが、28行目が書けず困っています。
15
-
16
- ・検討したこと
17
- ①interaction.channel.last_message_idで直近のメッセージIDを取得し、これを削除する方法
18
-
19
- または
20
-
21
- ➁interaction.channel.history()でメッセージ履歴を取得し、
22
- メッセージが特定の文字列に合致し、
23
- message.author と bot.user とが合致していた場合に、
24
- メッセージIDを取得してこれを削除する方法
25
-
26
- この二つを考えましたが、いずれの場合も、遅延などにより取得するメッセージがズレてしまわないか心配しています。
27
- (後者は異なるユーザーが、同一のメッセージIDを取得するケースを考えました)
28
-
29
- そこで、より確実で簡潔な方法がないか探しています。
30
- 拙い質問ですが、よろしくお願いいたします。
31
16
 
32
17
  ### 該当のソースコード
33
18
 
@@ -68,11 +53,36 @@
68
53
 
69
54
  ```
70
55
 
71
- ### したこと
56
+ ### 検討したこと
72
57
 
58
+ ①interaction.channel.last_message_idで直近のメッセージIDを取得し、これを削除する方法
59
+
60
+ または
61
+
62
+ ➁interaction.channel.history()でメッセージIDを取得してこれを削除する方法
63
+ ```python
64
+ @bot.tree.command(name="ping", description="pongと返します")
65
+ async def ping(interaction: discord.Interaction):
66
+ await interaction.response.send_message('pong\nこのメッセージは5秒後に削除されます')
67
+
68
+ channel = interaction.channel
73
- 公式リファレンスの「Textchannel」から解決策を探そうとしましたが、
69
+ async for mes in channel.history(limit=30):
74
- 上手く見つけることができませんでした。
70
+ if mes.author == bot.user:
75
- https://discordpy.readthedocs.io/ja/latest/api.html#textchannel
71
+ if f'{mes.content}' == 'pong\nこのメッセージは5秒後に削除されます':
72
+ mes_id = mes.id
73
+ break
74
+
75
+ message = await channel.fetch_message(mes_id)
76
+ await asyncio.sleep(5)
77
+ await message.delete()
78
+ ```
79
+
80
+
81
+ この二つを考えましたが、遅延などにより取得するメッセージがズレてしまわないか心配しています。
82
+ (後者は異なるユーザーが、同一のメッセージIDを取得するケースを考えました)
83
+
84
+ そこで、より確実で簡潔な方法がないか探しています。
85
+ 拙い質問ですが、よろしくお願いいたします。
76
86
 
77
87
  ### 補足情報(FW/ツールのバージョンなど)
78
88
 

4

説明を加えました

2023/03/09 19:03

投稿

Usaka_1
Usaka_1

スコア14

test CHANGED
File without changes
test CHANGED
@@ -20,8 +20,8 @@
20
20
 
21
21
  ➁interaction.channel.history()でメッセージ履歴を取得し、
22
22
  メッセージが特定の文字列に合致し、
23
- message.author  bot.user とが合致していた場合に、
23
+ message.author bot.user とが合致していた場合に、
24
- これを削除する方法
24
+ メッセージIDを取得してこれを削除する方法
25
25
 
26
26
  この二つを考えましたが、いずれの場合も、遅延などにより取得するメッセージがズレてしまわないか心配しています。
27
27
  (後者は異なるユーザーが、同一のメッセージIDを取得するケースを考えました)

3

考えられる問題についてより詳細に追記しました

2023/03/09 19:01

投稿

Usaka_1
Usaka_1

スコア14

test CHANGED
File without changes
test CHANGED
@@ -15,18 +15,19 @@
15
15
 
16
16
  ・検討したこと
17
17
  ①interaction.channel.last_message_idで直近のメッセージIDを取得し、これを削除する方法
18
- (遅延などによって、取得するメッセージがズレてしまわないかを心配しています)
19
18
 
20
19
  または
21
20
 
22
- ➁interaction.channel.historyでメッセージ履歴を取得し、
21
+ ➁interaction.channel.history()でメッセージ履歴を取得し、
23
- 特定の文字列合致したメッセージからIDを取得しこれを削除する方法
22
+ メッセージが特定の文字列合致し、
24
- (ユーザー投稿したメッセージがたまたま指定した文字列と合致した場合に、誤って削除しまうことを心配しています)
23
+ message.author と bot.user とが合致していた場合に、
24
+ これを削除する方法
25
25
 
26
+ この二つを考えましたが、いずれの場合も、遅延などにより取得するメッセージがズレてしまわないか心配しています。
27
+ (後者は異なるユーザーが、同一のメッセージIDを取得するケースを考えました)
28
+
26
- の二つを考えましたが、より確実で簡潔な方法がないか悩んでいます。
29
+ 、より確実で簡潔な方法がないか探しています。
27
30
  拙い質問ですが、よろしくお願いいたします。
28
-
29
- 追記:➁の方法で、message.author が  bot.user と合致していた場合にのみ、削除を実行する方法を思いつきました。ほとんど解決していますが、もう少しスマートな方法があるならば、教えていただきたいです。
30
31
 
31
32
  ### 該当のソースコード
32
33
 

2

検討案に追記しました

2023/03/09 17:00

投稿

Usaka_1
Usaka_1

スコア14

test CHANGED
File without changes
test CHANGED
@@ -25,6 +25,8 @@
25
25
 
26
26
  この二つを考えましたが、より確実で簡潔な方法がないか悩んでいます。
27
27
  拙い質問ですが、よろしくお願いいたします。
28
+
29
+ 追記:➁の方法で、message.author が  bot.user と合致していた場合にのみ、削除を実行する方法を思いつきました。ほとんど解決していますが、もう少しスマートな方法があるならば、教えていただきたいです。
28
30
 
29
31
  ### 該当のソースコード
30
32
 

1

誤字を訂正しました

2023/03/09 16:57

投稿

Usaka_1
Usaka_1

スコア14

test CHANGED
File without changes
test CHANGED
@@ -7,7 +7,6 @@
7
7
 
8
8
  ### 前提
9
9
  はじめたての初心者です。
10
- 拙い質問ですが、よろしくお願いいたします。
11
10
  discord.pyでbotを作っています。
12
11
 
13
12
  ・質問内容
@@ -24,7 +23,8 @@
24
23
  特定の文字列と合致したメッセージからIDを取得し、これを削除する方法
25
24
  (ユーザーが投稿したメッセージがたまたま指定した文字列と合致した場合に、誤って削除しまうことを心配しています)
26
25
 
27
- この二つを考えましたが、より確実で簡潔な方法がないか悩んでいます。
26
+ この二つを考えましたが、より確実で簡潔な方法がないか悩んでいます。
27
+ 拙い質問ですが、よろしくお願いいたします。
28
28
 
29
29
  ### 該当のソースコード
30
30