Python return 包含多个单词列表的消息
Python return message with multiple word list
我正在 discord 上制作一个非常简单的机器人,return 如果机器人读取简单的单词,无论发送者是谁,都会收到一条消息。
如果机器人在第二个列表中读到另一个词,我希望它 return 发送第二条消息。
事实上,如果有人输入“WORD 2”,它 return 完美“MESSAGE 2”,但它不适用于“WORD 1”和“MESSAGE 1”,没有任何反应。
我的代码如下:
import discord
from discord.ext import commands
from discord.utils import get
from discord.ext.commands import Bot
client = commands.Bot(command_prefix = ".")
class Myclient(discord.Client):
async def on_ready(self):
print('Logged on as', self.user)
async def on_message(self, message):
word_list = ['WORD 1']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list:
if word in messageContent:
await message.channel.send('MESSAGE 1 @everyone')
async def on_message(self, message):
word_list = ['WORD2']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list:
if word in messageContent:
await message.channel.send('MESSAGE 2 @everyone')
client = Myclient()
client.run('my token here')
你不能有两个这样的 on_message
函数;第二个定义将覆盖第一个。对于这种功能,您必须有一个 on_message
方法来检查消息是什么,然后根据消息内容执行任何您想要的操作。
您可以做的是简单地使用 dict
将匹配的词映射到响应消息:
async def on_message(self, message):
response_map = {'WORD1': 'MESSAGE 1 @everyone', 'WORD2':'MESSAGE 2 @everyone'}
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word, message in response_map:
if word in messageContent:
await message.channel.send(message)
如果这不是一个好的编码方式,我很抱歉,但我是新手,没有经验。
但是,这为我解决了这个问题:
async def on_message(self, message):
word_list1 = ['WORD1']
word_list2 = ['WORD2']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list1:
if word in messageContent:
await message.channel.send('MESSAGE 1 @everyone')
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list2:
if word in messageContent:
await message.channel.send('MESSAGE 2 @everyone')
我正在 discord 上制作一个非常简单的机器人,return 如果机器人读取简单的单词,无论发送者是谁,都会收到一条消息。 如果机器人在第二个列表中读到另一个词,我希望它 return 发送第二条消息。
事实上,如果有人输入“WORD 2”,它 return 完美“MESSAGE 2”,但它不适用于“WORD 1”和“MESSAGE 1”,没有任何反应。
我的代码如下:
import discord
from discord.ext import commands
from discord.utils import get
from discord.ext.commands import Bot
client = commands.Bot(command_prefix = ".")
class Myclient(discord.Client):
async def on_ready(self):
print('Logged on as', self.user)
async def on_message(self, message):
word_list = ['WORD 1']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list:
if word in messageContent:
await message.channel.send('MESSAGE 1 @everyone')
async def on_message(self, message):
word_list = ['WORD2']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list:
if word in messageContent:
await message.channel.send('MESSAGE 2 @everyone')
client = Myclient()
client.run('my token here')
你不能有两个这样的 on_message
函数;第二个定义将覆盖第一个。对于这种功能,您必须有一个 on_message
方法来检查消息是什么,然后根据消息内容执行任何您想要的操作。
您可以做的是简单地使用 dict
将匹配的词映射到响应消息:
async def on_message(self, message):
response_map = {'WORD1': 'MESSAGE 1 @everyone', 'WORD2':'MESSAGE 2 @everyone'}
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word, message in response_map:
if word in messageContent:
await message.channel.send(message)
如果这不是一个好的编码方式,我很抱歉,但我是新手,没有经验。 但是,这为我解决了这个问题:
async def on_message(self, message):
word_list1 = ['WORD1']
word_list2 = ['WORD2']
# don't respond to ourselves
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list1:
if word in messageContent:
await message.channel.send('MESSAGE 1 @everyone')
if message.author == self.user:
return
messageContent = message.content
if len(messageContent) > 0:
for word in word_list2:
if word in messageContent:
await message.channel.send('MESSAGE 2 @everyone')