質問編集履歴

6

修正

2023/03/21 05:28

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -37,32 +37,7 @@
37
37
 
38
38
 
39
39
 
40
- @bot.command(name="vlist")
41
- async def show_profile_in_vc_channel(ctx: commands.Context, channel: discord.VoiceChannel = None):
42
- if channel is None or not isinstance(channel, discord.VoiceChannel):
43
- return await ctx.send("ボイスチャンネルのメンションをしてください。\n<#チャンネルID>")
44
40
 
45
- # 指定されてボイスチャンネルのメンバーのリストが返ります。
46
- vc_members = channel.members
47
-
48
- # 登録されているすべてのユーザー情報が返ります。
49
- result = profiles_collection.find()
50
- _list = await result.to_list(None)
51
- _match = []
52
-
53
- for member in vc_members:
54
- for data in _list:
55
-
56
- # もしボイスチャンネルのメンバーと登録されているユーザーIDがあれば、
57
- if member.id == int(data["userid"]):
58
-
59
- # _matchリストにメンション、表示するテキストの入ったタプルが入ります。
60
- # また、Dict.get()では、第2引数でキーがなかった時のデフォルトを設定することができます。
61
- _match.append((member.mention, data.get("text", "該当なし")))
62
-
63
- description = "\n".join(f"{m[0]}: {m[1]}" for m in _match) or "該当なし"
64
- embed = discord.Embed(title="ユーザー情報", description=description)
65
- await ctx.send(embed=embed)
66
41
 
67
42
 
68
43
  @bot.command(name="delete", aliases=["del"])

5

文法の修正

2023/03/14 21:49

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -35,17 +35,7 @@
35
35
 
36
36
 
37
37
 
38
- @bot.command(name="show")
38
+
39
- async def show_profile(ctx, target: discord.User):
40
- profile = await profiles_collection.find_one({
41
- "userid": target.id
42
- }, {
43
- "_id": False
44
- })
45
- if profile is None:
46
- return await ctx.reply("みつからなかったロト~")
47
- embed = discord.Embed(title=f"`{target}`さんのプロフィール", description=profile["text"])
48
- return await ctx.reply(embed=embed)
49
39
 
50
40
  @bot.command(name="vlist")
51
41
  async def show_profile_in_vc_channel(ctx: commands.Context, channel: discord.VoiceChannel = None):

4

書式の改善

2023/03/11 11:58

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -32,26 +32,7 @@
32
32
  print(f"Logged in as {bot.user}")
33
33
 
34
34
 
35
- @bot.command(name="set")
36
- async def set_profile(ctx, *, args):
37
- global users
38
- messages = ctx.channel.history(limit=None)
39
- async for message in messages:
40
- if message.content.startswith(f"{bot.command_prefix} set") \
41
- and ctx.author.id in list(users.keys()):
42
- users[ctx.author.id] = (ctx.channel.id, ctx.message.id)
43
- new_data = {
44
- "userid": ctx.author.id,
45
- "text": args
46
- }
47
- result = await profiles_collection.replace_one({
48
- "userid": ctx.author.id
49
- }, new_data)
50
- if result.matched_count == 0:
51
- await profiles_collection.insert_one(new_data)
52
35
 
53
-
54
- await ctx.reply("設定が完了したロト~。")
55
36
 
56
37
 
57
38
  @bot.command(name="show")

3

書式の改善

2023/03/04 11:23

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
  通話部屋に入っている人全員のプロフィールをp listで一気に表示できるようにしたいです。
9
9
 
10
10
  #該当のソースコード
11
- ```ここに言語を入力
11
+ ```python
12
12
  # main2.py
13
13
 
14
14
  import discord

2

文法の修正

2023/03/04 11:22

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -1,195 +1,138 @@
1
1
  ### 前提・実現したいこと
2
+
3
+
4
+ discord.pyでプロフィールを表示したいのですが、
5
+ 一件ずつなら表示できるのですが、
6
+ 複数メンションで表示したり、
7
+ 今のところp show メンションで個別に表示はできます。
8
+ 通話部屋に入っている人全員のプロフィールをp listで一気に表示できるようにしたいです。
9
+
10
+ #該当のソースコード
11
+ ```ここに言語を入力
12
+ # main2.py
13
+
14
+ import discord
15
+ import discord as discord
16
+ from discord.ext import commands
17
+ from motor import motor_asyncio as motor
18
+ intents=discord.Intents.all()
19
+ # intents = discord.Intents.default()
20
+ intents.members = True
21
+ users: [int, int] = {}
22
+ allowed_mentions = discord.AllowedMentions(replied_user=False)
23
+
24
+ bot = commands.Bot(command_prefix="p ", intents=intents, allowed_mentions=allowed_mentions)
25
+ dbclient = motor.AsyncIOMotorClient("データベースの情報色々")
26
+ db = dbclient["ProfileBot"]
27
+ profiles_collection = db.profiles
28
+
29
+
30
+ @bot.event
31
+ async def on_ready():
32
+ print(f"Logged in as {bot.user}")
33
+
34
+
35
+ @bot.command(name="set")
36
+ async def set_profile(ctx, *, args):
37
+ global users
38
+ messages = ctx.channel.history(limit=None)
39
+ async for message in messages:
40
+ if message.content.startswith(f"{bot.command_prefix} set") \
41
+ and ctx.author.id in list(users.keys()):
42
+ users[ctx.author.id] = (ctx.channel.id, ctx.message.id)
43
+ new_data = {
44
+ "userid": ctx.author.id,
45
+ "text": args
46
+ }
47
+ result = await profiles_collection.replace_one({
48
+ "userid": ctx.author.id
49
+ }, new_data)
50
+ if result.matched_count == 0:
51
+ await profiles_collection.insert_one(new_data)
52
+
53
+
54
+ await ctx.reply("設定が完了したロト~。")
55
+
56
+
57
+ @bot.command(name="show")
58
+ async def show_profile(ctx, target: discord.User):
59
+ profile = await profiles_collection.find_one({
60
+ "userid": target.id
61
+ }, {
62
+ "_id": False
63
+ })
64
+ if profile is None:
65
+ return await ctx.reply("みつからなかったロト~")
66
+ embed = discord.Embed(title=f"`{target}`さんのプロフィール", description=profile["text"])
67
+ return await ctx.reply(embed=embed)
68
+
69
+ @bot.command(name="vlist")
70
+ async def show_profile_in_vc_channel(ctx: commands.Context, channel: discord.VoiceChannel = None):
71
+ if channel is None or not isinstance(channel, discord.VoiceChannel):
72
+ return await ctx.send("ボイスチャンネルのメンションをしてください。\n<#チャンネルID>")
73
+
74
+ # 指定されてボイスチャンネルのメンバーのリストが返ります。
75
+ vc_members = channel.members
76
+
77
+ # 登録されているすべてのユーザー情報が返ります。
78
+ result = profiles_collection.find()
79
+ _list = await result.to_list(None)
80
+ _match = []
81
+
82
+ for member in vc_members:
83
+ for data in _list:
84
+
85
+ # もしボイスチャンネルのメンバーと登録されているユーザーIDがあれば、
86
+ if member.id == int(data["userid"]):
87
+
88
+ # _matchリストにメンション、表示するテキストの入ったタプルが入ります。
89
+ # また、Dict.get()では、第2引数でキーがなかった時のデフォルトを設定することができます。
90
+ _match.append((member.mention, data.get("text", "該当なし")))
91
+
92
+ description = "\n".join(f"{m[0]}: {m[1]}" for m in _match) or "該当なし"
93
+ embed = discord.Embed(title="ユーザー情報", description=description)
94
+ await ctx.send(embed=embed)
95
+
96
+
97
+ @bot.command(name="delete", aliases=["del"])
98
+ async def delete_profile(ctx):
99
+ result = await profiles_collection.delete_one({
100
+ "userid": ctx.author.id
101
+ })
102
+ if result.deleted_count == 0:
103
+ return await ctx.reply("みつからなかったロト~")
104
+ return await ctx.reply("けしたロト~")
105
+
106
+ @bot.event
107
+ async def on_member_remove(member: discord.Member):
108
+ result = await profiles_collection.delete_one({
109
+ "userid": member.id
110
+ })
111
+ # メッセージを送りたいチャンネルを指定してください。
112
+ channel = 675304479976980501
113
+ if result.deleted_count == 0:
114
+ return await channel.send("見つかりませんでした。")
115
+ await channel.send("削除しました。")
2
116
 
3
117
 
4
118
 
5
119
 
6
-
7
- discord.pyでプロフィールを表示したいのですが、
8
-
9
- 一件ずつなら表示できるのですが、
10
-
11
- 複数メンションで表示したり、
12
-
13
- 今のところp show メンションで個別に表示はできます。
14
-
15
- 通話部屋に入っている人全員のプロフィールをp listで一気に表示できるようにしたいです。
16
-
17
-
18
-
19
- #該当のソースコード
20
-
21
- ```ここに言語を入力
22
-
23
- # main2.py
24
-
25
-
26
-
27
- import discord
28
-
29
- from discord.ext import commands
30
-
31
- from motor import motor_asyncio as motor
32
-
33
-
34
-
35
- intents = discord.Intents.default()
36
-
37
- intents.members = True
38
-
39
-
40
-
41
- allowed_mentions = discord.AllowedMentions(replied_user=False)
42
-
43
-
44
-
45
- bot = commands.Bot(command_prefix="p ", intents=intents, allowed_mentions=allowed_mentions)
46
-
47
- dbclient = motor.AsyncIOMotorClient("データベース名やら色々")
48
-
49
- db = dbclient["ProfileBot"]
120
+ bot.run("トークン")
50
-
51
- profiles_collection = db.profiles
121
+ ```
52
-
53
-
54
-
55
-
56
-
57
- @bot.event
122
+ ### 試したこと
58
-
59
- async def on_ready():
60
-
61
- print(f"Logged in as {bot.user}")
62
-
63
-
64
-
65
-
66
-
67
- @bot.command(name="set")
123
+ @bot.command(name="list")
68
-
69
- async def set_profile(ctx, *, text):
124
+ async def show_profile(ctx: discord.User):
70
-
71
- new_data = {
125
+ profile = await profiles_collection.find({
72
-
73
- "userid": ctx.author.id,
126
+ "userid": {
74
-
75
- "text": text
127
+ "$in": ????
76
-
77
- }
128
+ }
78
-
79
- result = await profiles_collection.replace_one({
80
-
81
- "userid": ctx.author.id
82
-
83
- }, new_data)
84
-
85
- if result.matched_count == 0:
86
-
87
- await profiles_collection.insert_one(new_data)
88
-
89
- await ctx.reply("設定が完了しました。")
90
-
91
-
92
-
93
-
94
-
95
- @bot.command(name="show")
96
-
97
- async def show_profile(ctx, target: discord.User):
98
-
99
- profile = await profiles_collection.find_one({
100
-
101
- "userid": target.id
102
-
103
- }, {
129
+ }, {
104
-
105
- "_id": False
130
+ "_id": False
106
-
107
- })
108
-
109
- if profile is None:
131
+ }).to_list(None)
110
-
111
- return await ctx.reply("みつかりませんでした")
112
-
113
- embed = discord.Embed(title=f"`{target}`のプロフィール", description=profile["text"])
132
+ embed = discord.Embed(title=f"みんなのプロフィール", description=profile["text"])
114
-
115
133
  return await ctx.reply(embed=embed)
116
-
117
-
118
-
119
- @bot.command(name="list")
120
-
121
- async def show_profile(ctx: discord.User):
122
-
123
- profile = await profiles_collection.find({
124
-
125
- "userid": {
126
-
127
- "$in": ????
128
-
129
- }
130
-
131
- }, {
132
-
133
- "_id": False
134
-
135
- }).to_list(None)
136
-
137
- embed = discord.Embed(title=f"みんなのプロフィール", description=profile["text"])
138
-
139
- return await ctx.reply(embed=embed)
140
-
141
-
142
-
143
- @bot.command(name="delete", aliases=["del"])
144
-
145
- async def delete_profile(ctx):
146
-
147
- result = await profiles_collection.delete_one({
148
-
149
- "userid": ctx.author.id
150
-
151
- })
152
-
153
- if result.deleted_count == 0:
154
-
155
- return await ctx.reply("みつかりませんでした")
156
-
157
- return await ctx.reply("けしました")
158
-
159
- bot.run("トークン")
160
-
161
- ```
162
-
163
- ### 試したこと
164
-
165
- @bot.command(name="list")
166
-
167
- async def show_profile(ctx: discord.User):
168
-
169
- profile = await profiles_collection.find({
170
-
171
- "userid": {
172
-
173
- "$in": ????
174
-
175
- }
176
-
177
- }, {
178
-
179
- "_id": False
180
-
181
- }).to_list(None)
182
-
183
- embed = discord.Embed(title=f"みんなのプロフィール", description=profile["text"])
184
-
185
- return await ctx.reply(embed=embed)
186
-
187
134
  にしたらできるかと思いましたが、よくわからなくなってしまいました。
188
-
189
135
  教えてくださる方いましたらご教授お願いいたします!!
190
136
 
191
-
192
-
193
137
  ### 補足情報(FW/ツールのバージョンなど)
194
-
195
138
  python 3.8.10

1

文法の修正

2021/11/28 04:04

投稿

poketatsu
poketatsu

スコア19

test CHANGED
File without changes
test CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  複数メンションで表示したり、
12
12
 
13
- 今のところp show メンションで表示はできます。
13
+ 今のところp show メンションで個別に表示はできます。
14
14
 
15
- 通話部屋に入っている人全員のプロフィールを一気に表示できるようにしたいです。
15
+ 通話部屋に入っている人全員のプロフィールをp listで一気に表示できるようにしたいです。
16
16
 
17
17
 
18
18
 
@@ -186,7 +186,7 @@
186
186
 
187
187
  にしたらできるかと思いましたが、よくわからなくなってしまいました。
188
188
 
189
- 教えてくださる方いましたらお願いいたします!!
189
+ 教えてくださる方いましたらご教授お願いいたします!!
190
190
 
191
191
 
192
192