Пример #1
0
    async def pprint_list(self, msg):
        title = utils.get_args(msg, return_string=True)
        await self.sender.sendMessage('Send me your list (comma separated).')

        resp = await self.listener.wait()

        try:
            text = resp['text']
        except KeyError as e:
            if '_idle' in resp:
                await self.sender.sendMessage(
                    "I'm tired of waiting around."
                    " Type /checklist again if you still want to make a list.")
            else:
                await self.sender.sendMessage(
                    "Sorry, I don't think that message"
                    " included a text component.")

            return

        if title:
            text, keyboard = await self.comma_list_to_check_list(text, title)
        else:
            text, keyboard = await self.comma_list_to_check_list(text)

        await self.sender.sendMessage(text, reply_markup=keyboard)
Пример #2
0
    async def vote_any(self, msg=None, question=None, responses=None):
        """Post a named vote message with arbitrary question/responses."""
        if msg is not None:
            args = get_args(msg['text'])
        if question is None:
            question = args[0]
        if responses is None:
            responses = [x.strip() for x in args[1:]]
        keyboard = await self.make_keyboard(responses)

        text = "{}\n{}".format(question,
                               "\n".join([string.ascii_letters[x]+")"
                                          for x in range(len(responses))]))
        msg = await self.sender.sendMessage(text, reply_markup=keyboard)

        with self.messages_table as table:
            entry = dict(
                msg_id=msg['message_id'],
                msg_filename=await make_binary_entry_filename(table, 'msg'),
                keyboard_filename=await make_binary_entry_filename(table, 'keyboard')
            )
            table.insert(entry)

        # Insert the data into the database binary storage
        dill.dump(msg, open(entry['msg_filename'], 'wb'))
        dill.dump(keyboard, open(entry['keyboard_filename'], 'wb'))
Пример #3
0
 async def new_goal(self, msg):
     '''Add a new goal for the user'''
     print(msg)
     my_listener = await create_personal_listener_from_msg(self, msg)
     u_id = msg['from']['id']
     args = get_args(msg)
     if args:
         # Get the goal the user input
         goal = ' '.join(args)
     else:
         # Ask the user what their goal is
         await self.sender.sendMessage("What is your goal?")
         reply = await my_listener.wait()
         goal = reply['text']
     await self.sender.sendMessage("How long do you want this goal for?")
     time_msg = await my_listener.wait()
     date_time = natural_time(time_msg['text'])
     # Save the goal to the table
     with self.goal_table as table:
         r_id = "".join(
                 [random.choice(string.ascii_letters) for x in range(4)])
         table.insert(dict(
                 uid = u_id,
                 item = goal,
                 until = date_time,
                 rid = r_id))
         await self.sender.sendMessage(
                 "'{}' added to goals until {}".format(goal, date_time))
Пример #4
0
    async def make_repo_yaml(self, msg):
        args = get_args(msg)
        try:
            repo_name = args[0]
        except IndexError:
            await self.sender.sendMessage(
                "Please provide the full name of the repo.")
            resp = await self.listener.wait()
            repo_name = resp['text']

        await self.sender.sendChatAction("upload_document")

        gh = Github()
        try:
            repo = gh.get_repo(repo_name)

            data = {
                "name": repo.name,
                "description": repo.description,
                "git_url": repo.clone_url
            }
        except github.GithubException.UnknownObjectException:
            await self.sender.sendMessage("Repo not found.")
            return


        name = "{}.yml".format(data["name"])
        encoded_data = yaml.dump(data,
                                 encoding="utf-8",
                                 default_flow_style=False)
        self.logger.debug("Yaml made:\n\n{}".format(
            encoded_data.decode('utf-8')))
        await self.sender.sendDocument((name, encoded_data))
Пример #5
0
    async def search_xkcd(self, msg):
        args = get_args(msg)

        try:
            await self.sender.sendChatAction('upload_photo')
            data = await self._get_xkcd_json_from_cache(args[0])
            await self.sender.sendPhoto(data['img'], caption=data['alt'])
        except IndexError:
            self.sender.sendMessage("No issue number provided?")
            return
Пример #6
0
    async def roll(self, msg):
        roll_text = get_args(msg, as_string=True) or "3d6"
        roll = dice.roll(roll_text)
        if re.match(r"^[0-9]+d6$", roll_text):
            text = "{} = {}".format(sum(roll),
                                    "".join(dice_faces[x] for x in roll))
        else:
            try:
                text = "{} = {}".format(sum(roll), roll)
            except TypeError:
                text = "{}".format(roll)

        await self.sender.sendMessage("{}".format(text))
Пример #7
0
    async def add_todo(self, msg):
        u_id = msg['from']['id']
        args = get_args(msg)
        if args:
            todo_str = ' '.join(args)
            todo_list = todo_str.split(';')
            with self.todo_table as table:
                for todo in todo_list:
                    r_id = "".join([
                        random.choice(string.ascii_letters) for x in range(4)
                    ])

                    table.insert(dict(uid=u_id, item=todo, rid=r_id))
            await self.sender.sendMessage('To-do list updated')
            await self.get_todo(msg)
        else:
            await self.sender.sendMessage("No arguments given.")
Пример #8
0
    async def get_feed(self, msg):
        try:
            arg = get_args(msg)[0]
        except:
            self.sender.sendMessage('Please specify a feed')
            return

        try:
            feed_url = config.feeds[arg]
        except KeyError:
            self.sendMessage('I do not recognise that feed')
            return

        items = rss.parse_feed_info(feed_url)

        await self.sender.sendMessage('Top {} front page items for {}:'.format(
            config.item_limit, arg),
                                      reply_markup=self.make_keyboard(items))
Пример #9
0
 async def vote_yes_no(self, msg):
     question = get_args(msg, return_string=True)
     await self.vote_any(
         question=question,
         responses=["Yes", "No", "Maybe"])
Пример #10
0
 def test_get_args_with_shlex_take_text_return_None(self):
     text =  "/foobar 'foo bar' baz"
     args = utils.get_args(text)
     expected_args = ("foo bar", "baz")
     self.assertTrue(all((x == y for x, y in zip(args, expected_args))))
Пример #11
0
 def test_get_args_with_shlex_take_msg_return_None(self):
     msg = {"text": "/foobar 'foo bar' baz"}
     args = utils.get_args(msg)
     expected_args = ("foo bar", "baz")
     self.assertTrue(all((x == y for x, y in zip(args, expected_args))))