首页 > 解决方案 > 重新定义未使用的“on_message”是什么意思

问题描述

我在 Discord 上制作的这个机器人只是一个刽子手游戏。我已经能够完成机器人的最基本部分,现在正在尝试添加第二个命令。但是第 24 行出现错误,弹出“从第 13 行重新定义未使用的'on_message'”。

一旦有人发送“$start”,第二个命令应该打印一些东西。但是,当我这样做时它不起作用。

这是我当前的代码:

import discord 
import random 
import os

client = discord.Client()

@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

  if message.content.startswith("$help"):
    await message.channel.send("To start your game, type '$start'")


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

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

  if message.content.startswith("$start"):
    await message.channel.send("You will have to guess a month. Have fun :) (The first letter will be always capital)")

这就是问题所在:

@client.event
async def on_message(message): #this is line 24
  if message.author == client.user:
    return

  if message.content.startswith("$start"): 
    await message.channel.send("You will have to guess a month. Have fun :) (The first letter will be always capital)")

 

标签: pythondiscorddiscord.pybots

解决方案


问题
您已经重新定义了on_message函数。这意味着,有 2 个具有相同名称的函数on_message

解决方案:由于您一直在使用一些if语句来决定在哪个命令上执行哪个函数,您可以将所有if语句分组为一个函数,因此您的代码如下所示:

import discord 
import random 
import os

client = discord.Client()

@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

  if message.content.startswith("$help"):
    await message.channel.send("To start your game, type '$start'") 

  if message.content.startswith("$start"):
    await message.channel.send("You will have to guess a month. Have fun :) (The first letter will be always capital)")

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

推荐阅读