我该如何仅转换命令而不转换参数或url?
因为如果我执行>play UrL
,则会将网址转换为小写的>play url
。我只希望它转换命令而不是url / arguments例如>say Hi
:我不想将其转换为>say hi
,我只想将命令:>SaY Hi
转换为>say Hi
。
代码:
message.content = message.content.lower().replace(' ', '')
await client.process_commands(message)
整个代码
@client.event
async def on_message(message):
author = message.author
if message.author.nick is None:
author = message.author.display_name
content = message.content
channel = message.channel
print('{}: {}'.format(author, content))
print('Channel: {}'.format(channel))
print(' ')
message.content = message.content.lower().replace(' ', ' ')
await client.process_commands(message)
else:
author = message.author.nick
content = message.content
channel = message.channel
print('{}: {}'.format(author, content))
print('Channel: {}'.format(channel))
print(' ')
message.content = message.content.lower().replace(' ', ' ')
await client.process_commands(message)
答案 0 :(得分:0)
通常,您会看到程序具有特定的字符,该字符指示命令,例如和感叹号等。我会推荐这个。因此,您可以像这样对“ say”进行命令。
!say Hi
然后,在查看命令时,执行以下操作:
input = message.content
if input[0] == '!':
input = input.split(' ')
cmd = input[0].lower()[1:]
params = input[1:]
else:
cmd = None
params = input
if cmd == 'say':
content = ' '.join(params)
类似的事情,如果您有任何其他问题,请随时提出。
编辑:
因此,您需要输入一些信息,例如 “>问好” 然后变成 “>问好”
让我们这样处理:
content = message.content
if (content[0] == '>'):
vals = content.split(' ')
vals[0] = vals[0].lower()
content = ' '.join(vals)
所需的值存储在变量“内容”中
答案 1 :(得分:0)
我会设置一个不想转换为小写字母的命令白名单。沿空格分割消息。然后,您可以使用嵌套的for循环对照白名单检查每个单词。如果有匹配项,请将单词转换为小写,否则保持不变。最后将单词列表合并成一个句子。
whitelist = 'say', 'play'
text = 'SaY hello'
words = text.split(' ')
for i in range(len(words)):
for cmd in whitelist:
if words[i].lower() == cmd:
words[i] = words[i].lower()
finaltext = ' '.join(words)
print(text)
print(finaltext)
输出将是:
SaY hello
say hello