Не по той вы, батенька, пошли дорожке. Вы накопипастили код, а разбираться не стали. Я не работал с библиотекой pafy, но за пару минут кое-что нагуглил.
Первое что я сделал, проверил, что хранится в переменной "filename". А там оказалось None. Далее вы отправляете юзеру опять, таки, None. Разумеется, Telegram-серверу такое не понравилось и он вернул вам 504.
Вот набросал за пару минут. Код рабочий, но много костылей:
bot = telebot.TeleBot(config.token)
@bot.message_handler(commands=['fantastic'])
def fantasic_message(message):
v = pafy.new("https://www.youtube.com/watch?v=COwlqqErDbY")
s = v.getbest()
bot.send_message(message.chat.id, "Size is %s" % s.get_filesize())
videoid = v.videoid # Получаем id видео
ext = s.extension # Получаем расширение видео
filename = f'{videoid}.{ext}' # Формируем имя файла на основе id + расширения
s.download(filename) # Скачиваем видео и сохраняем с именем videoid+расширение
data = open(filename,'rb')
bot.send_video(message.chat.id, data)
data.close()
if __name__ == '__main__':
bot.infinity_polling()
PS: Для имени файла выбрал не название видео, а videoid(можно любое рандомное значение), потому что в названии видео могут встречаться "плохие" символы, которые могут не понравится драйверам(NTFS,ext4,etc)