Guest User

Untitled

a guest
Jan 26th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. # -*- coding: cp1251 -*-
  2.  
  3. from matrix_bot_api.matrix_bot_api import MatrixBotAPI
  4. from matrix_bot_api.mregex_handler import MRegexHandler
  5. from matrix_bot_api.mcommand_handler import MCommandHandler
  6.  
  7. import random
  8. import re
  9. from functools import partial
  10. import logging
  11. import sys
  12.  
  13. logging.basicConfig(
  14. filename='reduplicator.log',
  15. format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  16. level=logging.INFO
  17. )
  18. logger = logging.getLogger('matrix_client.client')
  19.  
  20. # Global variables
  21. NAME = "Chirno"
  22. USERNAME = "bot" # Bot's username
  23. PASSWORD = "" # Bot's password
  24. SERVER = "" # Matrix server URL
  25.  
  26.  
  27. def hi_callback(room, event):
  28. # Somebody said hi, let's say Hi back
  29. room.send_text("Привет, " + event['sender'])
  30.  
  31.  
  32. def echo_callback(room, event):
  33. args = event['content']['body'].split()
  34. args.pop(0)
  35.  
  36. # Echo what they said back
  37. room.send_text(' '.join(args))
  38.  
  39. def reduplic_callback(room, event):
  40. args = event['content']['body'].split()
  41. args.pop(0)
  42. out = ' '.join(args).encode('windows-1251')
  43. print 'reduplicate', room, args, event, out
  44. regex = re.compile('[а-яА-Я]*')
  45. replacer = partial(reduplicate_word)
  46. message = regex.sub(replacer, out)
  47.  
  48. #if message == args[0]:
  49. # raise ReduplicatorException
  50.  
  51. message = re.sub('^@{} '.format(event['sender']), '', message, flags=re.I)
  52. print message
  53. room.send_text((event['sender']+': '+message.decode('windows-1251')).encode('utf-8'))
  54.  
  55. #def reduplicate(room, update, event):
  56. #try:
  57.  
  58.  
  59. #except ReduplicatorException:
  60. # choices = ['Соси писос', 'Хуя']
  61. # room.send_text(random.choice(choices))
  62.  
  63. def reduplicate_word(match_object, repeat=True):
  64. vowels = 'аеёиоуыэюя'
  65. vowel_map = {
  66. 'а': 'я',
  67. 'о': 'й',
  68. 'у': 'ю',
  69. 'э': 'е',
  70. 'ы': 'и'
  71. }
  72.  
  73. word = match_object.group(0)
  74.  
  75. def replacer(inner_match_object):
  76. if not inner_match_object.end(0) == len(word):
  77. letter = inner_match_object.group(0)[-1].lower()
  78. replaced = 'ху{}'.format(vowel_map.get(letter, letter))
  79.  
  80. if inner_match_object.group(0)[0].isupper():
  81. replaced = replaced.capitalize()
  82.  
  83. if repeat:
  84. replaced = '{}-{}'.format(word, replaced)
  85.  
  86. return replaced
  87.  
  88. regex = re.compile('[^{}]*([{}])'.format(vowels, vowels), flags=re.I)
  89. return regex.sub(replacer, word, 1) or word
  90.  
  91. def main():
  92. # Create an instance of the MatrixBotAPI
  93. bot = MatrixBotAPI(USERNAME, PASSWORD, SERVER)
  94.  
  95. # Add a regex handler waiting for the word Hi
  96. hi_handler = MRegexHandler(NAME, reduplic_callback)
  97. bot.add_handler(hi_handler)
  98.  
  99. reduplic_handler = MCommandHandler("b", reduplic_callback)
  100. bot.add_handler(reduplic_handler)
  101.  
  102. # Start polling
  103. bot.start_polling()
  104.  
  105. # Infinitely read stdin to stall main thread while the bot runs in other threads
  106. while True:
  107. input()
  108.  
  109.  
  110. if __name__ == "__main__":
  111. main()
Add Comment
Please, Sign In to add comment