我有一个数组,希望与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)
谢谢您的帮助!
答案 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)