如何在没有命令的情况下使用discord.py发送消息

mau*_*exe 1 python bots discord discord.py

import discord
import asyncio

client = discord.Client()
@client.event
async def on_ready():
    print("I'm ready.")

async def send(message):
    await client.send_message(client.get_channel("412678093006831617"), message)

client.run("token")

loop = asyncio.get_event_loop()
loop.run_until_complete(send("hello"))
Run Code Online (Sandbox Code Playgroud)

嗨,我想制作一个GUI.当有人输入他的名字并按"确定"时,我的不和谐机器人应发送消息.基本上我以为我用它的名字称为异步,不起作用.然后我做了一个事件循环.与打印()工作,但机器人不发送消息,所以我认为这是没有准备好,当我把wait_until_ready()那里执行什么,所以我想我必须把client.run("令牌")在事件循环之前,也没有工作.

你们能帮助我吗?:)

Ben*_*jin 7

你的代码不起作用的原因是因为它client.run是阻塞的,这意味着它之后什么都不会执行.这意味着loop永远无法联系到你.

要解决这个问题,请使用client.loop.create_task.

github discord.py有一个后台任务的例子,在这里找到.您应该可以将此作为参考.目前,该任务每分钟都会向给定频道发布一条消息,但您可以轻松修改该消息以等待特定操作.

import discord
import asyncio

client = discord.Client()

async def my_background_task():
    await client.wait_until_ready()
    counter = 0
    channel = discord.Object(id='channel_id_here')
    while not client.is_closed:
        counter += 1
        await client.send_message(channel, counter)
        await asyncio.sleep(60) # task runs every 60 seconds

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.loop.create_task(my_background_task())
client.run('token')
Run Code Online (Sandbox Code Playgroud)

  • @FM 这已经过时了,因为它使用旧版本的“discord.py”,称为“async”分支。新版本中不存在诸如“client.send_message”之类的内容。您现在需要使用“await channel.send()”。请参阅示例[此处](/sf/ask/4036722301/#57694459)。 (2认同)
  • @alper `send_message` 仅适用于旧版本的 `discord.py`,称为 `async` 分支。在新版本中,您可以使用“await channel.send(counter)” (2认同)