Как в Telegram-боте сделать жирный текст и картинку под ссылкой?
Картинка с превью текста - это ссылка на статью. Она появляется автоматически

Чтобы делать текст разными стилями, нужно прописать специальный атрибут parse_mode=HTML

def jordan(bot, update):
    chat_id = update.message.chat.id
    with open('JordanPeterson.jpg', 'rb') as jordan_picture:
        caption = "<a href='https://twitter.com/jordanbpeterson'>Jordan B. Peterson</a>"
        bot.send_photo(
            chat_id, 
            photo=jordan_picture, 
            caption=caption,
            parse_mode=ParseMode.HTML
        )

Также этот parse_mode можно прописать при импорте токена бота. Чтобы сделать текст жирным, нужно написать так:

msg = <b>Jordan B. Peterson</b>
Дополню соседний ответ:
Картинка действительно, берётся с сайта, на который вы ссылаетесь. Дефолтный источник - протокол Open Graph, свойство og:image: https://ogp.me/