def github(update: Update, context: CallbackContext): message = update.message or update.edited_message last = 0 thing_matches = [] things = {} # Due to bug in ptb we need to convert entities of type URL to TEXT_LINK for them to be converted to html for entity in message.entities: if entity.type == MessageEntity.URL: entity.type = MessageEntity.TEXT_LINK entity.url = message.parse_entity(entity) for match in GITHUB_PATTERN.finditer(get_text_not_in_entities(message.text_html)): logging.debug(match.groupdict()) owner, repo, number, sha = [match.groupdict()[x] for x in ('owner', 'repo', 'number', 'sha')] if number or sha: thing_matches.append((owner, repo, number, sha)) for thing_match in thing_matches: last = keep_typing(last, update.effective_chat, ChatAction.TYPING) owner, repo, number, sha = thing_match if number: issue = github_issues.get_issue(int(number), owner, repo) things[issue.url] = github_issues.pretty_format_issue(issue) elif sha: commit = github_issues.get_commit(sha, owner, repo) things[commit.url] = github_issues.pretty_format_commit(commit) if things: reply_or_edit(update, context, '\n'.join([f'<a href="{url}">{name}</a>' for url, name in things.items()]))
def github(update: Update, context: CallbackContext): message = update.message or update.edited_message last = 0 thing_matches = [] things = {} # Due to bug in ptb we need to convert entities of type URL to TEXT_LINK for them to be converted to html for entity in message.entities: if entity.type == MessageEntity.URL: entity.type = MessageEntity.TEXT_LINK entity.url = message.parse_entity(entity) for match in GITHUB_PATTERN.finditer(get_text_not_in_entities(message.text_html)): logging.debug(match.groupdict()) owner, repo, number, sha = [match.groupdict()[x] for x in ('owner', 'repo', 'number', 'sha')] if number or sha: thing_matches.append((owner, repo, number, sha)) for thing_match in thing_matches: last = keep_typing(last, update.effective_chat, ChatAction.TYPING) owner, repo, number, sha = thing_match if number: issue = github_issues.get_issue(int(number), owner, repo) things[issue.url] = github_issues.pretty_format_issue(issue) elif sha: commit = github_issues.get_commit(sha, owner, repo) things[commit.url] = github_issues.pretty_format_commit(commit) if things: reply_or_edit(update, context, '\n'.join([f'[{name}]({url})' for url, name in things.items()]))
def github(bot, update, chat_data): message = update.message or update.edited_message last = 0 things = {} for entity in message.entities: if entity.type == MessageEntity.URL: entity.type = MessageEntity.TEXT_LINK entity.url = message.parse_entity(entity) for match in GITHUB_PATTERN.finditer(get_text_not_in_entities(message.text_html)): last = keep_typing(last, update.effective_chat, ChatAction.TYPING) logging.debug(match.groupdict()) owner, repo, number, sha = [match.groupdict()[x] for x in ('owner', 'repo', 'number', 'sha')] if number: issue = github_issues.get_issue(int(number), owner, repo) things[issue.url] = github_issues.pretty_format_issue(issue) elif sha: commit = github_issues.get_commit(sha, owner, repo) things[commit.url] = github_issues.pretty_format_commit(commit) if things: reply_or_edit(bot, update, chat_data, '\n'.join([f'[{name}]({url})' for url, name in things.items()]))
def github(bot, update, chat_data): message = update.message or update.edited_message last = 0 things = {} # Due to bug in ptb we need to convert entities of type URL to TEXT_LINK for them to be converted to html for entity in message.entities: if entity.type == MessageEntity.URL: entity.type = MessageEntity.TEXT_LINK entity.url = message.parse_entity(entity) for match in GITHUB_PATTERN.finditer( get_text_not_in_entities(message.text_html)): last = keep_typing(last, update.effective_chat, ChatAction.TYPING) logging.debug(match.groupdict()) user, repo, number, sha = [ match.groupdict()[x] for x in ('user', 'repo', 'number', 'sha') ] url = GITHUB_URL name = '' if number: if user and repo: url += f'{user}/{repo}' name += f'{user}/{repo}' else: url += DEFAULT_REPO name += f'#{number}' url += f'/issues/{number}' else: if user: name += user if repo: url += f'{user}/{repo}' name += f'/{repo}' name += '@' if not repo: url += DEFAULT_REPO name += sha[:7] url += f'/commit/{sha}' if url in things.keys(): continue gh = _get_github_title_and_type(url, sha) if not gh: continue name = f'{gh[1]} {name}: {gh[0]}' things[url] = name if things: reply_or_edit( bot, update, chat_data, '\n'.join([f'[{name}]({url})' for url, name in things.items()]))
def wiki(bot, update, args, chat_data, threshold=80): """ Wiki search """ query = ' '.join(args) if search != '': best = search.wiki(query, amount=1, threshold=threshold) if best: text = (f'Github wiki for _python-telegram-bot_\n' f'[{best[0][0]}]({best[0][1]})') else: text = "Sorry, your search term didn't match anything, please edit your message to search again." reply_or_edit(bot, update, chat_data, text)
def docs(bot, update, args, chat_data): """ Documentation search """ if len(args) > 0: doc = search.docs(' '.join(args)) if doc: text = ( f'*{doc.short_name}*\n' f'_python-telegram-bot_ documentation for this {doc.type}:\n' f'[{doc.full_name}]({doc.url})') if doc.tg_name: text += f'\n\nThe official documentation has more info about [{doc.tg_name}]({doc.tg_url}).' else: text = "Sorry, your search term didn't match anything, please edit your message to search again." reply_or_edit(bot, update, chat_data, text)