2016-02-09 44 views
0

完整的Python新手,对不起!电报Python聊天机器人 - 用动画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()) 

,但不能发送动画GIF。作为一个img发送每上述使用sendPhoto是静态的

我相信它必须是添加InlineQueryResultGif类并在回复()中调用它的情况,但我已经尝试了很多很多方法来做但我没有取得任何进展

帮助!

EDIT显示一些尝试:

首先我试图编辑一个已经到位发送的IMG的elif的说法:

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-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变量中的函数。我没有在几个月内重新访问过,所以,它现在可能支持webm。此外,还有一种方法可以通过电报的服务器上存储的ID来发送图像,但是,我不知道如何使用该方法。

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相对路径(如与谷歌的AppEngine打交道时是相当令人沮丧)。对于本地文件,我只是用urllib代替,就像这样:

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