首页 > 解决方案 > 结合命令和事件

问题描述

我正在构建一个我希望能够与命令和表情符号交互的不和谐机器人。这是到目前为止的代码:

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.py

解决方案


要进一步发展这一点,您需要充分了解您所做的事情并为您想做的事情制定计划。我将首先将您引导至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)

推荐阅读