TwitchIO
TwitchIO copied to clipboard
Tokenising multiple words to multiple arguments
Discussed in https://github.com/PythonistaGuild/TwitchIO/discussions/449
Originally posted by DennisMinn May 13, 2024 I want to pass multiple arguments enclosed in either ' or ", but on the first argument is properly formatted, while the second argument is cut off. Is there a way to modify how the arguments is parsed?
class Bot(commands.Bot):
def __init__(self):
super().__init__(token='<access token>', prefix='!', initial_channels = ['<initial channel>'])
@commands.command(name='addQA')
async def add_qa(self, context: commands.Context, question: str, answer: str):
print(question, answer)
Input from <initial channel>
chatroom
!addQA "this is a question" "this is the answer"
Current Output
this is a question "this
Desired Output
this is a question this is the answer
Potential fix that needs to be tested - ext.commands.stringparser.py
def process_string(self, msg: str) -> Dict[int, str]:
while self.count < len(msg):
loc = msg[self.count]
if loc == '"' and not self.ignore:
self.ignore = True
self.start = self.count + 1
elif loc == '"' and self.ignore:
self.words[self.index] = msg[self.start:self.count]
self.index += 1
self.ignore = False
self.start = self.count + 1
elif loc.isspace() and not self.ignore:
if self.start != self.count:
self.words[self.index] = msg[self.start:self.count]
self.index += 1
self.start = self.count + 1
self.count += 1
if self.start < len(msg) and not self.ignore:
self.words[self.index] = msg[self.start:len(msg)].strip()
return self.words