discord.py - 结合命令和事件
问题描述
我正在构建一个我希望能够与命令和表情符号交互的不和谐机器人。这是到目前为止的代码:
import os
import discord
from dotenv import load_dotenv
from discord.ext import commands
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
bot = commands.Bot(command_prefix='$')
client = discord.Client()
@bot.command(name='repeat', help='help me to understand bots')
async def test(ctx, *args):
for arg in args:
await ctx.send(arg)
@client.event
async def on_raw_reaction_add(payload):
print("someone reacted to something")
print(payload)
bot.run(TOKEN)
client.run(TOKEN)
我的直觉是最后两行是出错的地方,尽管我不了解 run(TOKEN) 功能来很好地理解为什么会发生这种情况,或者如何解决它。
解决方案
要进一步发展这一点,您需要充分了解您所做的事情并为您想做的事情制定计划。我将首先将您引导至discord python 文档,在那里您可以看到 discord.py 提供的所有内容。当您有问题时,这应该是您的第一站。
我看到你有import discord
并且from discord.ext import commands
...... discord.py 有两种方法可以接近机器人,你有:
client = discord.Client()
来自import discord
,
bot = commands.Bot()
来自import discord.ext
.
您需要选择是否使用discord.Client()
或discord.Bot()
因为用例完全不同。我建议后者,因为它可以让您的机器人以更清洁的方式做更多事情。
您的下一步是将任何 @ 装饰器更改为您选择的任何变量,并在整个代码中保持一致。然后,您需要删除.run(TOKEN)
您不会使用的任何内容。所以,如果我是你,我会阅读我链接到你的文档,这样你就会比 YouTube 教程所教的更了解。
至于对您的代码的修订,它看起来像这样:
import os
import discord
from dotenv import load_dotenv
from discord.ext import commands
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
bot = commands.Bot(command_prefix='$')
@bot.command(name='repeat', help='help me to understand bots')
async def test(ctx, *args):
for arg in args:
await ctx.send(arg)
@bot.event
async def on_raw_reaction_add(payload):
print("someone reacted to something")
print(payload)
bot.run(TOKEN)
推荐阅读
- java - 有什么办法可以输出变量名而不是值?[JAVA]
- html - 将鼠标悬停在标签上时如何更改图标颜色
- reactjs - 打字稿:模块的完全导入找不到类型定义
- javascript - 如何通过在左侧或右侧添加面板来制作响应式数据表?
- c++ - 执行 C++ 二维数组
- android - 安装没有成功。无法安装应用程序。安装失败,原因是:“设备脱机”
- javascript - 我的 useState 有问题吗?我觉得我的 Array ReactNative 中的值并没有正确
- react-native - react-native-keyboard-aware-scroll-view :当我开始输入时页面向下滚动
- java - 使用 EclEmma 在 equals() 方法中获得完整的分支覆盖
- python-3.x - 如何从移动设备访问 Flask Web 服务器?