这是我的代码-
@client.command()
@commands.is_owner()
async def sendall(ctx, *, message):
for m in client.get_all_members():
try:
await m.send(message)
except:
pass
await ctx.send(f"sent the message -\n```{message}``` to {ctx.guild.member_count} users.")
到目前为止,它仅显示服务器的成员数,我需要它显示实际向其发送消息和未向其发送消息的成员数。 范例- 已将消息发送给[成功发送]用户。无法将其发送给[错误]用户,因为他们已关闭dms。
有人知道我该怎么做吗?
答案 0 :(得分:0)
制作一个“计数器”变量,并在每条成功发送的消息上增加它。
@client.command()
@commands.is_owner()
async def sendall(ctx, *, message):
success, errors = 0, 0
for m in client.get_all_members():
try:
await m.send(message)
success += 1
except:
errors += 1
await ctx.send(f"sent the message -\n```{message}``` to {success} users.\nUnable to send {errors} messages")
您还可以使用内置Counter
库中的collections
对象。
如果您想要例如,那将很有用。也知道每个错误发生了多少。
from collections import Counter
...
@client.command()
@commands.is_owner()
async def sendall(ctx, *, message):
c = Counter()
for m in client.get_all_members():
try:
await m.send(message)
c["Success"] += 1
except Exception as e:
c[e] += 1
await ctx.send(f"sent the message -\n```{message}``` to {c['Success']} users.\nUnable to send to {c[discord.Forbidden]} users: Missing Permissions")
此外,请注意,您使用的是get_all_members
方法。它将向所有成员实例发送消息。成员是公会中用户的实例,因此,例如,如果用户与一个机器人位于两个共享服务器中,则他将获得两次消息。如果要将消息发送给所有用户(机器人可以看到的唯一用户),请使用Client
users
属性