示例#1
0
def run_tg(token, proxy, agent):
    loop = asyncio.get_event_loop()
    bot = Bot(token=token, loop=loop, proxy=proxy)
    dp = Dispatcher(bot)
    tg_msg_processor = TelegramMessageProcessor(agent.register_msg)

    dp.message_handler()(tg_msg_processor.handle_message)

    executor.start_polling(dp, skip_updates=True)
示例#2
0
class NLPBot(object):
    def __init__(self, token):
        self.bot = Bot(token=token)
        self.dp = Dispatcher(self.bot)
        self.surname_predictor = Predictor(weights_path=WEIGHTS_PATH, k=3)
        self._commands = []
        for member in dir(self):
            member = getattr(self, member)
            if hasattr(member, 'handler'):
                args, kwargs = member.handler

                commands = kwargs.get('commands')
                if commands:
                    self._commands.extend(map(lambda x: '/' + x, commands))

                self.dp.message_handler(*args, **kwargs)(member)

    @message_handler(commands=['start'])
    @log
    async def start(self, message: types.Message):
        await message.reply("Hi!\n"
                            "My commands are: {}".format(", ".join(
                                self._commands)))

    @message_handler(commands=['surname'])
    @log
    async def surname(self, message: types.Message):
        args = message.text.split(' ')
        if len(args) < 2:
            return
        name = message.text.split(' ')[1]
        result = 'Surname origin of {}: \n'.format(name)
        output = self.surname_predictor(name)
        for origin, proba in output:
            result += '{}: {:.3f}%\n'.format(origin, proba)
        print("Answer: ", result)
        await message.reply(result)

    def start_polling(self):
        executor.start_polling(self.dp)
示例#3
0
def run_default():
    services, workers, session, gateway = parse_old_config()

    if CHANNEL == 'cmd_client':
        endpoint = Service('cmd_responder',
                           EventSetOutputConnector('cmd_responder').send,
                           StateManager.save_dialog_dict, 1, ['responder'])
        input_srv = Service('input', None,
                            StateManager.add_human_utterance_simple_dict, 1,
                            ['input'])
        loop = asyncio.get_event_loop()
        loop.set_debug(args.debug)
        register_msg, process = prepare_agent(
            services,
            endpoint,
            input_srv,
            use_response_logger=args.response_logger)
        if gateway:
            gateway.on_channel_callback = register_msg
            gateway.on_service_callback = process
        future = asyncio.ensure_future(run(register_msg))
        for i in workers:
            loop.create_task(i.call_service(process))
        try:
            loop.run_until_complete(future)
        except KeyboardInterrupt:
            pass
        except Exception as e:
            raise e
        finally:
            future.cancel()
            if session:
                loop.run_until_complete(session.close())
            if gateway:
                gateway.disconnect()
            loop.stop()
            loop.close()
            logging.shutdown()
    elif CHANNEL == 'http_client':
        if not session:
            session = ClientSession()
        intermediate_storage = {}
        endpoint = Service(
            'http_responder',
            HttpOutputConnector(intermediate_storage, 'http_responder').send,
            StateManager.save_dialog_dict, 1, ['responder'])
        input_srv = Service('input', None,
                            StateManager.add_human_utterance_simple_dict, 1,
                            ['input'])
        register_msg, process_callable = prepare_agent(services, endpoint,
                                                       input_srv,
                                                       args.response_logger)
        if gateway:
            gateway.on_channel_callback = register_msg
            gateway.on_service_callback = process_callable
        app = init_app(register_msg, intermediate_storage,
                       prepare_startup(workers, process_callable, session),
                       on_shutdown, args.debug)
        web.run_app(app, port=args.port)

    elif CHANNEL == 'telegram':
        token = getenv('TELEGRAM_TOKEN')
        proxy = getenv('TELEGRAM_PROXY')

        loop = asyncio.get_event_loop()

        bot = Bot(token=token, loop=loop, proxy=proxy)
        dp = Dispatcher(bot)
        endpoint = Service('telegram_responder',
                           EventSetOutputConnector('telegram_responder').send,
                           StateManager.save_dialog_dict, 1, ['responder'])
        input_srv = Service('input', None,
                            StateManager.add_human_utterance_simple_dict, 1,
                            ['input'])
        register_msg, process = prepare_agent(
            services,
            endpoint,
            input_srv,
            use_response_logger=args.response_logger)
        if gateway:
            gateway.on_channel_callback = register_msg
            gateway.on_service_callback = process
        for i in workers:
            loop.create_task(i.call_service(process))
        tg_msg_processor = TelegramMessageProcessor(register_msg)

        dp.message_handler()(tg_msg_processor.handle_message)

        executor.start_polling(dp, skip_updates=True)
示例#4
0
@dp.message_handler(commands=['but_1'])
async def send(message: types.Message):
    await bot.send_message(message.from_user.id, "Okk", reply_markup=markup_2)


@dp.message_handler(commands=['but2'])
async def contact_and_geo(message: types.Message):
    await bot.send_message(
        message.from_user.id,
        "Please give allow for get information in your phone!",
        reply_markup=markup_request)
    await bot.send_message(chat_id='@yerekerun', text='You are athlet!')


dp.message_handler(commands=['photo'])


async def send_photo(message: types.Message):
    #caption = 'телеграм'
    await bot.send_photo(
        message.fr,
        photo=
        "https://play.google.com/store/apps/details?id=org.telegram.messenger&hl=ru",
        caption="Telegram")


@dp.message_handler(commands=['remove'])
async def remove(message: types.Message):
    await message.reply("delete all button",
                        reply_markup=ReplyKeyboardRemove())