2016-02-09 6 views
0

полный Python новичок, извините!Telegram Python chatbot - ответ с анимированным gif

Я использую комплект Telebot стартера (https://github.com/yukuku/telebot), который обрабатывает ответы как:

elif 'who are you' in text: 
     reply('telebot starter kit, created by yukuku: https://github.com/yukuku/telebot') 

я смог ей ответить с изображением с:

elif 'Test1' in text: 
      reply(img=urllib2.urlopen('https://i.ytimg.com/vi/VC8H5B2YVCY/maxresdefault.jpg').read()) 

Но не могу отправить анимированные gifs. При отправке в качестве img для каждого из них используется sendPhoto, который является статическим

Я уверен, что это должен быть случай добавления класса InlineQueryResultGif и вызова его внутри ответа(), но я пробовал много и много способов сделать но я ничего не добился

Помощь!

EDIT, чтобы показать некоторые попытки:

Во-первых, я пытался редактирования Элиф аргумент, который уже был на месте для отправки IMG:

elif gif: 
      gif = multipart.post_multipart(BASE_URL + 'InlineQueryResultGif', [ 
       ('chat_id', str(chat_id)), 
       ('reply_to_message_id', str(message_id)), 
      ], [ 
       ('gif', 'image.gif', gif), 
      ]) 

, а затем просто изменяя ответ будет:

elif 'Test4' in text: 
     reply(gif=urllib2.urlopen('http://www.reactiongifs.us/wp-content/uploads/2014/08/popcorn_indiana_jones.gif').read()) 

Затем я попытался добавить сам InlineQueryResultGif класс:

class InlineQueryResult: 
pass 

class InlineQueryResultGif(InlineQueryResult): 
""" Represents a link to an animated GIF file. By default, this animated GIF file will be sent by the user with 
optional caption. Alternatively, you can provide message_text to send it instead of the animation. 
Attributes: 
    id       (str) :Unique identifier of this result 
    gif_url      (str) :A valid URL for the GIF file. File size must not exceed 1MB 
    gif_width     (int) :*Optional.* Width of the GIF 
    gif_height     (int) :*Optional.* Height of the GIF 
    thumb_url     (str) :*Optional.* URL of a static thumbnail for the result (jpeg or gif) 
    title      (str) :*Optional.* Title for the result 
    caption      (str) :*Optional.* Caption of the GIF file to be sent 
    message_text    (str) :*Optional.* Text of a message to be sent instead of the animation 
    parse_mode     (str) :*Optional.* Send “Markdown”, if you want Telegram apps to show bold, 
                 italic and inline URLs in your bot's message. 
    disable_web_page_preview (bool) :*Optional.* Disables link previews for links in the sent message 
""" 

def __init__(self, id, gif_url, 
      gif_width=None, gif_height=None, thumb_url=None, title=None, 
      caption=None, message_text=None, parse_mode=None, disable_web_page_preview=None): 
    self.type = 'gif' 
    self.id = id 
    self.gif_url = gif_url 
    self.gif_width = gif_width 
    self.gif_height = gif_height 
    self.thumb_url = thumb_url 
    self.title = title 
    self.caption = caption 
    self.message_text = message_text 
    self.parse_mode = parse_mode 
    self.disable_web_page_preview = disable_web_page_preview 

И попытался вызвать его в ответ:

elif 'Test2' in text: 
     reply(InlineQueryResultGif('http://www.reactiongifs.us/wp-content/uploads/2014/08/popcorn_indiana_jones.gif')) 

И много разных версий выше. ничего работать

+0

«Я пробовал много и много способов сделать это, но я не делаю никакого прогресса» Почему бы вам не показать нам некоторые из эти способы? Возможно, вы захотите прочитать [MCVE], это действительно полезно для написания хорошего вопроса. –

+0

Спасибо, отредактировал сообщение, чтобы добавить некоторые вещи, которые я пробовал –

ответ

0

Не клеится Если вы можете, попробуйте использовать эту библиотеку Python для телеграммы

https://github.com/python-telegram-bot/python-telegram-bot

При этом вы можете легко отправлять анимированные гифы с sendDocument:

bot.sendChatAction(chat_id=chat_id, action=telegram.ChatAction.UPLOAD_PHOTO) 
bot.sendDocument(chat_id=chat_id, document=image_url) 
0

Я используя python-telegram-bot, и вот как я подошел к этому.

def sendImage(bot, update, dataval): # Funtion to send images or gifs the proper way 
    val = dataval.rsplit('.', 1)[1] 
    if val == 'gif': 
    # Send a gif 
    bot.sendDocument(chat_id=update.message.chat_id, document = dataval) 
    elif val == 'webm': 
    bot.sendMessage(chat_id=update.message.chat_id, text = "The item attempted to be sent is unsupported at the moment.") 
    else: 
    # Send a Picture 
    bot.sendPhoto(chat_id=update.message.chat_id, photo=dataval) 

В приведенном выше примере я передаю URL-адрес функции в переменной dataval. Я не пересматривал это через много месяцев, поэтому его возможности теперь поддерживаются веб-сайтами. Кроме того, есть способ отправить изображения по их идентификатору, хранящимся на серверах телеграммы, однако я не знаю, как использовать этот метод.

0

Ты почти был прав в первый раз перед реализацией инлайн вещи, за исключением того, что вам нужно использовать sendDocument:

elif gif: 
     resp = multipart.post_multipart(BASE_URL + 'sendDocument', [ 
      ('chat_id', str(chat_id)), 
      ('reply_to_message_id', str(message_id)), 
     ], [ 
      ('gif', 'image.gif', gif), 
     ]) 

...а затем использовать urllib2 читать GIF так:

elif 'Test2' in text: 
    reply(gif=urllib2.urlopen('http://www.reactiongifs.us/wp-content/uploads/2014/08/popcorn_indiana_jones.gif').read()) 

Вы также можете сделать это с локальными файлами, но я нашел file:// функциональность в urllib2 быть весьма неприятно, когда дело с относительными путями (например, с Google AppEngine). Для локальных файлов, я просто использовать urllib вместо этого, например, так:

elif 'Test2' in text: 
    reply(gif=urllib.urlopen('images/animated.gif').read()) 

 Смежные вопросы

  • Нет связанных вопросов^_^