Discord BOT,我想给每个人发送一个随机报价,除了一个用户

Posted

技术标签:

【中文标题】Discord BOT,我想给每个人发送一个随机报价,除了一个用户【英文标题】:Discord BOT, I want to send everyone a random quote except to ONE user 【发布时间】:2021-09-26 16:29:24 【问题描述】:

我不是开发人员,过去我曾经学习过 html 和 CSS,但无论如何,我只是想在 Discord 服务器上为几个朋友制作一个有趣的 BOT,但我实际上找不到解决方案问题。

基本上,我的机器人会发送随机报价,到目前为止一切正常,但我希望这个 ONE 用户不要收到报价,而是收到一条非常刻薄的消息。到目前为止一切顺利,他确实收到了消息,但 BOT 还向他发送了一个随机报价,我不希望这样。

这是我的代码,可能很混乱,但希望它有助于理解到目前为止 BOT 所做的事情,以及您是否可以帮助我,让我知道我可以做些什么来解决这个问题。当然,复制并粘贴您的解决方案会很棒,但如果您能向我解释为什么以及何时以及如何使用此代码以及等等等等,我很高兴,我想学习。

非常感谢大家! :)

P.S 我知道 str(message.author) == Username#### 不是最好的方法,但我还没有弄清楚如何使它与 UserID 一起工作

import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get ("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as 0.user  '.format(client))

  @client.event
  async def on_message(message):
    if message.author == client.user:
      return
  
  @client.event
  async def on_message(message):
    if str(message.author) == "Hakuna#1721":
      await message.channel.send('Nic, tu pues, vas te laver !')
 
    if message.content.startswith('&inspireme'):
      quote = get_quote()
      await message.channel.send(quote)


client.run(os.getenv('TOKEN'))

【问题讨论】:

【参考方案1】:

您的代码现在的编写方式,如果作者的名字是"Hakuna#1721",您将向他们发送一条卑鄙的消息,但是您只需继续下一个 if 语句。你想做一个或另一个,但不是两者兼而有之。我认为缺少的只是第一个 if 语句中的 return 语句。所以,这个:

@client.event
  async def on_message(message):
    if str(message.author) == "Hakuna#1721":
      await message.channel.send('Nic, tu pues, vas te laver !')
 
    if message.content.startswith('&inspireme'):
      quote = get_quote()
      await message.channel.send(quote)

会变成:

@client.event
  async def on_message(message):
    if str(message.author) == "Hakuna#1721":
      await message.channel.send('Nic, tu pues, vas te laver !')
      return
 
    if message.content.startswith('&inspireme'):
      quote = get_quote()
      await message.channel.send(quote)

现在,如果您向您的特定用户发送一条中庸的消息,您将在此时终止该功能。你也可以写:

@client.event
  async def on_message(message):
    if str(message.author) == "Hakuna#1721":
      await message.channel.send('Nic, tu pues, vas te laver !')
 
    elif message.content.startswith('&inspireme'):
      quote = get_quote()
      await message.channel.send(quote)

注意将if 更改为elif 以使这两个选项互斥。

【讨论】:

谢谢保罗,就是这么简单,我看得太远了。现在我更好地理解了“return”命令。祝你好运!

以上是关于Discord BOT,我想给每个人发送一个随机报价,除了一个用户的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 从用户消息中获取照片

Discord Bot 可以在频道上向所有人发送消息吗

从数组中获取项目并将其删除,直到 Discord JS bot 的数组为空

我的 Discord Bot 在触发时不断发送相同的图像

Python Discord bot 在异常时发送文本

Discord Bot 使用 python 向一个命令发送多个响应