An IRC bot built for tubes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 line
1.1KB

  1. '''Core functionality of seddy.'''
  2. import re
  3. def replacer(find, replace, message, flags, count=1):
  4. try:
  5. if message[:7] == '\x01ACTION':
  6. tmp = re.sub(find, replace, message[8:], flags=flags,
  7. count=count)
  8. replaced = '\x01ACTION {}'.format(tmp)
  9. else:
  10. replaced = re.sub(find, replace, message, flags=flags, count=count, )
  11. except:
  12. return False
  13. if '\0' in message:
  14. whole_match = re.search(find, message, flags).group(0)
  15. replaced = replaced.replace('\0', whole_match)
  16. return replaced
  17. def seddy(sed, history, parser):
  18. f = 0
  19. regex = parser.split(sed)
  20. if len(regex) < 4:
  21. return False
  22. find = regex[1]
  23. replace = regex[2]
  24. flags = regex[3]
  25. if 'i' in flags:
  26. f |= re.I
  27. try:
  28. message = history.find(find, f)
  29. except:
  30. return False
  31. if 'g' in flags:
  32. replaced = replacer(find, replace, message, f, count=0)
  33. else:
  34. replaced = replacer(find, replace, message, f)
  35. return replaced