Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: cp1251 -*-
- from matrix_bot_api.matrix_bot_api import MatrixBotAPI
- from matrix_bot_api.mregex_handler import MRegexHandler
- from matrix_bot_api.mcommand_handler import MCommandHandler
- import random
- import re
- from functools import partial
- import logging
- import sys
- logging.basicConfig(
- filename='reduplicator.log',
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- level=logging.INFO
- )
- logger = logging.getLogger('matrix_client.client')
- # Global variables
- NAME = "Chirno"
- USERNAME = "bot" # Bot's username
- PASSWORD = "" # Bot's password
- SERVER = "" # Matrix server URL
- def hi_callback(room, event):
- # Somebody said hi, let's say Hi back
- room.send_text("Привет, " + event['sender'])
- def echo_callback(room, event):
- args = event['content']['body'].split()
- args.pop(0)
- # Echo what they said back
- room.send_text(' '.join(args))
- def reduplic_callback(room, event):
- args = event['content']['body'].split()
- args.pop(0)
- out = ' '.join(args).encode('windows-1251')
- print 'reduplicate', room, args, event, out
- regex = re.compile('[а-яА-Я]*')
- replacer = partial(reduplicate_word)
- message = regex.sub(replacer, out)
- #if message == args[0]:
- # raise ReduplicatorException
- message = re.sub('^@{} '.format(event['sender']), '', message, flags=re.I)
- print message
- room.send_text((event['sender']+': '+message.decode('windows-1251')).encode('utf-8'))
- #def reduplicate(room, update, event):
- #try:
- #except ReduplicatorException:
- # choices = ['Соси писос', 'Хуя']
- # room.send_text(random.choice(choices))
- def reduplicate_word(match_object, repeat=True):
- vowels = 'аеёиоуыэюя'
- vowel_map = {
- 'а': 'я',
- 'о': 'й',
- 'у': 'ю',
- 'э': 'е',
- 'ы': 'и'
- }
- word = match_object.group(0)
- def replacer(inner_match_object):
- if not inner_match_object.end(0) == len(word):
- letter = inner_match_object.group(0)[-1].lower()
- replaced = 'ху{}'.format(vowel_map.get(letter, letter))
- if inner_match_object.group(0)[0].isupper():
- replaced = replaced.capitalize()
- if repeat:
- replaced = '{}-{}'.format(word, replaced)
- return replaced
- regex = re.compile('[^{}]*([{}])'.format(vowels, vowels), flags=re.I)
- return regex.sub(replacer, word, 1) or word
- def main():
- # Create an instance of the MatrixBotAPI
- bot = MatrixBotAPI(USERNAME, PASSWORD, SERVER)
- # Add a regex handler waiting for the word Hi
- hi_handler = MRegexHandler(NAME, reduplic_callback)
- bot.add_handler(hi_handler)
- reduplic_handler = MCommandHandler("b", reduplic_callback)
- bot.add_handler(reduplic_handler)
- # Start polling
- bot.start_polling()
- # Infinitely read stdin to stall main thread while the bot runs in other threads
- while True:
- input()
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment