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)
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'))
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))
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))
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
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))
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.")
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))
async def vote_yes_no(self, msg): question = get_args(msg, return_string=True) await self.vote_any( question=question, responses=["Yes", "No", "Maybe"])
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))))
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))))