【问题标题】:How to get discord bot to handle separate processes/ link to another bot如何让不和谐机器人处理单独的进程/链接到另一个机器人
【发布时间】:2021-09-20 05:41:21
【问题描述】:

我正在尝试创建一些应用程序机器人。我需要在通用渠道中触发机器人,然后在与申请人的私人 DM 渠道中继续申请流程。

我的问题是:机器人只能定义一个 on_message 函数。我发现每次检查 on_message 是否由来自 DM 通道和通用通道的消息触发非常复杂(且效率低下)。此外,很难跟踪申请人的答案。我想检查以下是否可行:让机器人像往常一样响应来自通用频道的消息。如果收到申请提示,则启动一个新的子进程(或机器人?),分别处理与申请人的 DM。

以上可能吗?如果没有,是否有更好的方法来处理这个问题?

@client.event
async def on_message(message):
    if message.author == client.user:
        return


    if message.channel.type==discord.ChannelType.private:

        await dm_channel.send("Whats your age?") ## Question 2


    elif message.channel.type == discord.ChannelType.text:
    
        if message.content.startswith('$h'):

            member = message.author

            if "apply" in message.content:
                await startApply(member)
            else:
                await message.channel.send('Hello!')
            # await message.reply('Hello!', mention_author=True)


async def startApply(member):

    dm_channel = await member.create_dm()
    await dm_channel.send("Whats your name?") ## Question 1 

我现在有上面的代码。我希望 startApply 函数触发一个新的机器人/子进程来处理与申请人的 DM。

【问题讨论】:

  • 你应该考虑使用wait_for

标签: asynchronous discord discord.py


【解决方案1】:

选项 1

相对而言,像这样的单个 if 检查并没有太多开销,但有几种不同的解决方案。首先,您可以尝试使用斜杠命令。 This 是作为用于斜线命令的 discord.py 库的扩展而构建的库。你可以制作一个只在 DM 中工作的,然后用连续的斜杠命令让它从那里运行。

选项 2

使用 webhook 启动新机器人。这很可能更复杂,因为您必须获得一个域或找到某种免费服务来捕获 webhook。不过,您可以使用这样的 webhook 来“唤醒”机器人并让它与 dm 中的用户聊天。

选项 3(推荐)

根据频道创建处理文本的函数,并将if - elif 保留在其中。正如我所说,如果不是那么糟糕。如果您的代码中调用了处理所有事情的函数,那么实际上应该很容易处理:

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.channel.type==discord.ChannelType.private:
        respondToPrivate(message)

    elif message.channel.type == discord.ChannelType.text:
        repondToText(message)

在跟踪数据方面,如果这是一个较小的个人项目,MySQL 非常棒且易于学习。您可以让每个函数存储数据库所需的任何数据,以便在机器人崩溃的情况下将其存储以供查看/安全,然后它也会内存不足。

【讨论】:

  • 我猜Third Way 与他的代码中已有的相同,但并没有真正解决他的问题 ig
  • 我强调这种方式是可以的,比将整个代码库放在两个 if else 语句中更好。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2020-12-30
  • 2021-10-21
  • 2021-09-09
  • 2020-10-29
  • 1970-01-01
  • 2021-09-17
  • 2018-11-06
相关资源
最近更新 更多