前提・実現したいこと
discord.pyでプロフィールを表示したいのですが、
一件ずつなら表示できるのですが、
複数メンションで表示したり、
今のところp show メンションで個別に表示はできます。
通話部屋に入っている人全員のプロフィールをp listで一気に表示できるようにしたいです。
#該当のソースコード
python
1# main2.py 2 3import discord 4import discord as discord 5from discord.ext import commands 6from motor import motor_asyncio as motor 7intents=discord.Intents.all() 8# intents = discord.Intents.default() 9intents.members = True 10users: [int, int] = {} 11allowed_mentions = discord.AllowedMentions(replied_user=False) 12 13bot = commands.Bot(command_prefix="p ", intents=intents, allowed_mentions=allowed_mentions) 14dbclient = motor.AsyncIOMotorClient("データベースの情報色々") 15db = dbclient["ProfileBot"] 16profiles_collection = db.profiles 17 18 19@bot.event 20async def on_ready(): 21 print(f"Logged in as {bot.user}") 22 23 24 25 26 27 28 29 30 31 32@bot.command(name="delete", aliases=["del"]) 33async def delete_profile(ctx): 34 result = await profiles_collection.delete_one({ 35 "userid": ctx.author.id 36 }) 37 if result.deleted_count == 0: 38 return await ctx.reply("みつからなかったロト~") 39 return await ctx.reply("けしたロト~") 40 41@bot.event 42async def on_member_remove(member: discord.Member): 43 result = await profiles_collection.delete_one({ 44 "userid": member.id 45 }) 46 # メッセージを送りたいチャンネルを指定してください。 47 channel = 675304479976980501 48 if result.deleted_count == 0: 49 return await channel.send("見つかりませんでした。") 50 await channel.send("削除しました。") 51 52 53 54 55bot.run("トークン")
試したこと
@bot.command(name="list")
async def show_profile(ctx: discord.User):
profile = await profiles_collection.find({
"userid": {
"$in": ????
}
}, {
"_id": False
}).to_list(None)
embed = discord.Embed(title=f"みんなのプロフィール", description=profile["text"])
return await ctx.reply(embed=embed)
にしたらできるかと思いましたが、よくわからなくなってしまいました。
教えてくださる方いましたらご教授お願いいたします!!
補足情報(FW/ツールのバージョンなど)
python 3.8.10
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/04 08:23
回答1件
0
ベストアンサー
vlist チャンネルメンション
で発火します。
変えたい場合は関数の中でchannelがVCチャンネル型になるようにしてください。(そうしないとチャンネルのIDが取得できません。)
(もしチャンネルIDから取得したい場合は channel = await bot.get_channel(int(channel))
をしてください。名前からとることもできますが省略。)
以下サンプルコード。
py
1@bot.command(name="vlist") 2async def show_profile_in_vc_channel(ctx: commands.Context, channel: discord.VoiceChannel = None): 3 if channel is None or not isinstance(channel, discord.VoiceChannel): 4 return await ctx.send("ボイスチャンネルのメンションをしてください。\n<#チャンネルID>") 5 6 # 指定されてボイスチャンネルのメンバーのリストが返ります。 7 vc_members = channel.members 8 9 # 登録されているすべてのユーザー情報が返ります。 10 result = profiles_collection.find() 11 _list = await result.to_list(None) 12 _match = [] 13 14 for member in vc_members: 15 for data in _list: 16 17 # もしボイスチャンネルのメンバーと登録されているユーザーIDがあれば、 18 if member.id == int(data["userid"]): 19 20 # _matchリストにメンション、表示するテキストの入ったタプルが入ります。 21 # また、Dict.get()では、第2引数でキーがなかった時のデフォルトを設定することができます。 22 _match.append((member.mention, data.get("text", "該当なし"))) 23 24 description = "\n".join(f"{m[0]}: {m[1]}" for m in _match) or "該当なし" 25 embed = discord.Embed(title="ユーザー情報", description=description) 26 await ctx.send(embed=embed)
メンバーが離れた時のアクション。
py
1@bot.event 2async def on_member_remove(member: discord.Member): 3 result = await profiles_collection.delete_one({ 4 "userid": member.id 5 }) 6 # メッセージを送りたいチャンネルを指定してください。 7 channel = ... 8 if result.deleted_count == 0: 9 return await channel.send("見つかりませんでした。") 10 await channel.send("削除しました。")
投稿2022/09/02 06:12
編集2022/09/04 09:34総合スコア411
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/04 21:45 編集
2022/09/04 21:46 編集
2022/09/04 23:18
2022/09/04 23:25
2022/10/01 09:44
2022/10/04 04:13 編集
2023/03/02 23:49
2023/03/04 08:02 編集
2023/03/04 08:18
2023/03/04 08:32
2023/03/04 11:28 編集
2023/03/04 11:44
2023/03/04 12:18
2023/03/04 13:31
2023/03/05 23:16 編集
2023/03/05 11:20
2023/03/05 23:49 編集
2023/03/06 23:40 編集
2023/03/06 19:09
2023/03/07 11:46 編集
2023/03/07 22:08
2023/03/08 09:38
2023/03/08 11:50
2023/03/08 13:33 編集
2023/03/08 15:21
2023/03/08 21:38
2023/03/08 23:09
2023/03/08 23:54
2023/03/09 02:23
2023/03/09 04:26
2023/03/09 11:23
2023/03/09 12:47 編集
2023/03/10 02:49
2023/03/10 04:24
2023/03/11 00:13 編集
2023/03/12 23:12
2023/03/13 04:27
2023/03/14 12:58
2023/03/14 18:55
2023/03/14 22:18 編集
2023/03/14 22:28 編集
2023/03/15 01:00 編集
2023/03/15 12:08 編集
2023/03/15 12:52
2023/03/15 23:51
2023/03/16 10:56
2023/03/16 11:34 編集
2023/03/17 03:45 編集
2023/03/17 22:46 編集
2023/03/18 03:51
2023/03/18 07:14 編集
2023/03/18 07:35
2023/03/18 09:33 編集
2023/03/18 10:50
2023/03/19 04:52 編集
2023/03/18 12:39
2023/03/19 04:52 編集
2023/03/19 05:00
2023/03/19 06:59
2023/03/21 02:15
2023/03/21 05:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。