Невозможно сопоставить регулярное выражение с re.search на Twisted Framework ircbot
Я начну с "Я не знаком с Python". Я пытаюсь изменить сценарий ircbot по умолчанию с витой для моего канала, но я не могу получить re.match
или же re.search
за работой.
Например, это работает:
prompt = ("%s" % self.nickname)
prompt1 = ("%s:" % self.nickname)
prompt2 = ("%s," % self.nickname)
if msg == (prompt1 + " whoareyou?") or msg == (prompt2 + " who are you?") or msg == (prompt1 + " whoareyou") or msg == (prompt2 + " who are you"):
И этот
if msg == (prompt1 + " help") or msg == (prompt2 + " help"):
Однако эти два условия не работают на боте (но они работают на локальном скрипте):
if re.search(r'%s[:,] help' % self.nickname, msg):
elif re.search(r'%s[:,] who ?are ?you?' % self.nickname, msg):
Предыдущая версия скрипта, которая не использует re.search
можно найти здесь
1 ответ
Я нашел то, что вызывало проблему. В Twisted включена логика для обработки коллизий псевдонимов для бота. Добавляет ^
в конце названия:
# For fun, override the method that determines how a nickname is changed on
# collisions. The default method appends an underscore.
def alterCollidedNick(self, nickname):
"""
Generate an altered version of a nickname that caused a collision in an
effort to create an unused related name for subsequent registration.
"""
return nickname + '^'
Это приводило к тому, что мой ник для ботов заканчивался nickname^
и потому что я использовал %s
чтобы добавить переменную псевдонима как часть регулярного выражения, он интерпретировал ^
в качестве модификатора.
if re.search(r'%s[:,] help' % self.nickname, msg):
К этому:
if re.search(r'nickname^[:,] help', msg):