Python-DM用户不和谐机器人

时间:2018-09-15 08:58:22

标签: python-3.x bots discord discord.py dm

我正在使用Python处理User Discord Bot。如果漫游器所有者键入!DM @user,则漫游器将DM所有者所提及的用户。

@client.event
async def on_message(message):
    if message.content.startswith('!DM'):
        msg = 'This Message is send in DM'
        await client.send_message(message.author, msg)

5 个答案:

答案 0 :(得分:2)

由于向v1.0进行了大量迁移,因此send_message不再存在。
相反,他们在每个端点(成员,行会等)上migrated to .send()

v1.0的示例为:

async def on_message(self, message):
    if message.content == '!verify':
        await message.author.send("Your message goes here")

哪位DM会!verify的发送者。明智的做法是:

for guild in client.guilds:
    for channel in guild.channels:
        channel.send("Hey yall!")

如果您想向所有服务器以及该漫游器所在的所有通道发送“ hi yall”消息。

由于(通过评论判断)可能不是很清楚,所以棘手的部分可能会从客户端/会话中获得用户的身份句柄。如果您需要向尚未发送消息的用户发送消息,并且该事件不在on_message事件之外。您将必须:

  1. 浏览您的频道并根据某些条件抓住手柄
  2. 存储用户句柄/实体,并使用内部标识符访问它们

但是发送给用户的唯一方法是通过客户端身份句柄,该句柄位于on_message中或位于message.author中的频道中。为了更好地理解这一点,我建议阅读how to send a DM?上的官方文档。

答案 1 :(得分:0)

最简单的方法是使用discord.ext.commands扩展名。在这里,我们使用converter获取目标用户,并使用keyword-only argument作为发送给他们的可选消息:

from discord.ext import commands
import discord

bot = commands.Bot(command_prefix='!')

@bot.command(pass_context=True)
async def DM(ctx, user: discord.User, *, message=None):
    message = message or "This Message is sent via DM"
    await bot.send_message(user, message)

bot.run("TOKEN")

答案 2 :(得分:0)

我过去曾经使用过此命令,并且我认为它对我来说最有效:

@bot.command(pass_context=True)
async def mall(ctx, *, message):
  await ctx.message.delete()
  for user in ctx.guild.members:
    try:
      await user.send(message)
      print(f"Successfully DMed users!")
    except:
      print(f"Unsuccessfully DMed users, try again later.")

答案 3 :(得分:0)

@bot.command()
async def dm(ctx, user: discord.User, *, message=None):
    if message == None:
      message = "Hi!"
    embed = make_embed(title=f"Sent by {user}", desc=message)
    await user.send(embed=embed)
    await ctx.send("Message sent!")```

答案 4 :(得分:0)

我注意到我放入代码行中的每个代码都不能完全工作,所以我向它们添加了自己的位,并成功了!将此添加到您的机器人代码时,请不要忘记在此处显示机器人名称的地方添加机器人名称。它只会向发送它的人发送 DM,但您可以每天更改它所说的内容,以便为使用该命令的每个人带来惊喜。它每次都对我有用。

@client.command()
async def botdm(ctx):
  await ctx.message.author.send('hi my name is *bot name here* and i am a bot!')