在for循环中发送多个消息Discord python bot

时间:2020-09-03 21:38:18

标签: python async-await discord discord.py

我有一个数组,希望与discord.py在for循环中发送少量消息。我正在尝试使用on_ready()命令,但仅发送第一条消息就遇到了问题。我对异步和不一致机器人都相当陌生。这里必须有一个更简单的解决方案...

client = discord.Client()
links = []
for x in y:
    # do some things
    links.append(stuff)

@client.event
async def on_ready():
    channel = client.get_channel(12345678910)
    for link in links:
        await channel.send(link)


client.run(DISCORD_TOKEN)

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

首先,client = discord.Client()绝对不适合定义client。您应该使用{p>定义client

client = commands.Bot(command_prefix='command's prefix here')。然后,如果要使其成为命令,则可以执行以下操作:

@client.command()
async def send_link(ctx):
    for link in links:
        await ctx.send(link)

但这不好,因为它会发送很多消息,所以我宁愿使用嵌入式

async def send_link(ctx):
    embed = discord.Embed()
    for link in links:
        embed.add_field(name=" ", value=link, inline=False)
    await ctx.send(embed=embed)

您不应在on_message中使用它,因为那毫无意义。在代码中,您完成了channel = client.get_channel(1234667890)。这也是一个问题,您必须使用真实的频道ID进行更改。

答案 1 :(得分:0)

除了在on_ready()事件下添加代码外,您还可以创建一个循环,该循环在机器人准备就绪后运行1次,然后停止。要创建循环,请使用discord.ext.tasks

from discord.ext.tasks import loop

@loop(count=1)
async def send_links():
    channel = client.get_channel(730064641857683581)
    links = ['link1', 'link2', 'link3', 'link4']
    for link in links:
        await channel.send(link)


@send_links.before_loop
async def before_send_links():
    await client.wait_until_ready()  # Wait until bot is ready.

@send_links.after_loop
async def after_send_links():
    await client.logout()  # Make the bot log out.


send_links.start()
client.run(DISCORD_TOKEN)