import discord
from discord import Intents, Message, Client
from discord.ext import commands
import os
from dotenv import load_dotenv
from pathlib import Path
from random import randint
#launchingbetween
dotenv_path = Path('C:/Users/USER/OneDrive/phyton/discordbot/venv/bot/.env')
load_dotenv(dotenv_path=dotenv_path)
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
client = commands.Bot(command_prefix=',', intents=intents)
@client.event
async def on_ready():
print("the bot is here")
client.run(token=TOKEN)
#launchingbetween
@client.event
async def on_message(self, message=discord.Message):
if message.content == "hi":
await message.channel.send("hello")
else:
return
除了最后 6 行之外的所有内容都有效。该消息出现在终端中,机器人上线。然而,机器人不响应消息,它不会给出任何错误,它只是不起作用。这与权限或任何东西无关,该机器人曾经在同一台服务器上工作。
问题在于
client.run(token=TOKEN)
的位置。
已将其放置在代码中的
on_message
事件之前。
在 Discord.py 中,
client.run()
是一个阻塞函数。这意味着,当代码到达这一行时,它将停止在那一点,并且不会执行它之后的任何代码。
为了解决这个问题,只需将
on_message
事件
之前
的
client.run()
行移动到代码的
末尾
。像这样:
import discord
from discord import Intents, Message, Client
from discord.ext import commands
import os
from dotenv import load_dotenv
from pathlib import Path
from random import randint
#launchingbetween
dotenv_path = Path('C:/Users/USER/OneDrive/phyton/discordbot/venv/bot/.env')
load_dotenv(dotenv_path=dotenv_path)
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
client = commands.Bot(command_prefix=',', intents=intents)
@client.event
async def on_ready():
print("the bot is here")
@client.event
async def on_message(self, message=discord.Message):
if message.content == "hi":
await message.channel.send("hello")
else:
return
client.run(token=TOKEN) # 移至末尾
#launchingbetween
通过这种方式,的机器人将首先侦听事件(例如
on_ready
和
on_message
),然后启动机器人并保持其运行以响应事件。