如何正确避免在自定义字符串中使用分隔符?

2024-05-19 01:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在开发一个Discord机器人,它通过rcon与我的游戏服务器交互,遇到了一个问题

我有两个功能。这是为了让机器人识别命令(例如,say Hello World)

@bot.command(pass_context=True, aliases=[])
@asyncio.coroutine
def say(context, *, msg):
yield from bot.say("```{0}```".format(rcon.rcon_say(msg)))

第二个函数将其发送到我的游戏服务器。在这种情况下,“say Hello World”将使服务器在聊天中说“Hello World”

def rcon_say(_msg : str):
with RCON(SERVER_ADDRESS, PASSWORD) as rcon:
    return rcon("say {0}".format(_msg))

问题是:。说“测试;kick user1“将向服务器发送两个命令:

 say test
 kick user1

所以它可以和其他rcon命令一起使用。那么如何避免这一点被滥用呢

我所做的是避免滥用:

我添加了以下功能:

def checkMsg(checkThis : str):
if ";" in checkThis:
    raise errors.SemicolonError()
    return
else:
    return checkThis

并补充道

 _msg = checkMsg(_msg)

因此,这将删除任何分号从用户的输入,但我不知何故不觉得这是正确的方法。是否仍可以发送分号(可能已解码/使用unicode等)

我是安全的还是有办法滥用它


Tags: 命令功能服务器游戏helloworldreturndef

热门问题