比如说我有这个:
import discord, asyncio, time
client = discord.Client()
@client.event
async def on_message(message):
if message.content.lower().startswith("!test"):
await client.send_message(message.channel,'test')
client.run('clienttokenhere')
我希望能够做两件事:
1)设置为当且仅当用户输入完全 !test
而没有其他内容时,它将在频道中打印出test
2)如果用户首先键入!test
后跟空格和至少一个其他字符串字符,那么它将打印出来
test
- 所以对于示例:a)!test
不打印任何内容,b)!test
(
!test
后跟单个空格)不会打印任何内容,c){{1不会打印任何内容,d)!test1
不打印任何内容,但e)!testabc
将打印出!test 1
,f)test
将打印出来{{} 1}},g)!test 123abc
将打印出test
,而h)!test a
将打印出test
等。
我只知道!test ?!abc123
和test
,就我的研究所说,没有startswith
这样的东西,我不知道如何制作它以便它需要endswith
答案 0 :(得分:0)
使用==
运算符。
1)当收到的字符串中只有!test
时进行打印测试
if message.content.lower() == '!test':
await client.send_message(message.channel,'test')
2)打印test
后跟字符串,后跟字符串
# If it starts with !test and a space, and the length of a list
# separated by a space containing only non-empty strings is larger than 1,
# print the string without the first word (which is !test)
if message.content.lower().startswith("!test ")
and len([x for x in message.content.lower().split(' ') if x]) > 1:
await client.send_message(message.channel, 'test ' + ' '.join(message.content.split(' ')[1:]))
答案 1 :(得分:0)
看起来你需要一个正则表达式而不是startswith()
。而且您似乎有两个相互矛盾的要求:
1)使其成为当且仅当用户输入!test
而不是其他内容时,它才会在频道中打印出test
2a)!test
不打印任何内容
包括1并排除2a:
import re
test_re = re.compile(r"!test( \S+)?$")
# This says: look for
# !test (optionally followed by one space followed by one or more nonspace chars) followed by EOL
#
@client.event
async def on_message(message):
if test_re.match(message.content.lower()):
await client.send_message(message.channel,'test')
包括2a和排除1,替换此行(!test
之后的空格和内容不再是可选的):
test_re = re.compile(r"!test \S+$")