init commit
This commit is contained in:
140
bot/bot.py
Normal file
140
bot/bot.py
Normal file
@@ -0,0 +1,140 @@
|
||||
import telepot
|
||||
import datetime
|
||||
import time
|
||||
import json
|
||||
from Queue import Queue
|
||||
#import os
|
||||
from src import lg,cfg
|
||||
#from gevent import spawn
|
||||
from telepot.namedtuple import InlineKeyboardMarkup, InlineKeyboardButton
|
||||
from telepot.delegate import (
|
||||
per_chat_id, pave_event_space, include_callback_query_chat_id, create_open, per_inline_from_id )
|
||||
from src.compiler import CrawlUrl
|
||||
from gevent import spawn, monkey, Greenlet
|
||||
|
||||
def IKB(h):
|
||||
return InlineKeyboardButton(text=h["text"], callback_data=h["callback_data"])
|
||||
|
||||
def IKB2(h):
|
||||
return [IKB(h)]
|
||||
def IKM(h):
|
||||
return InlineKeyboardMarkup(inline_keyboard=[ map(IKB,h)])
|
||||
|
||||
def IKM2(h):
|
||||
return InlineKeyboardMarkup(inline_keyboard= map(IKB2,h))
|
||||
|
||||
|
||||
def query_que_url(url):
|
||||
print(json.dumps(url))
|
||||
return {"text": url.url, "callback_data":"/urls/"+str(url.id)+"/que"}
|
||||
|
||||
def handle_urls(handler, cmd):
|
||||
curls=CrawlUrl.query.all()
|
||||
#sent=handler.sender.sendMessage(json.dumps(curls))
|
||||
kb= IKM2(map(query_que_url,curls))
|
||||
print json.dumps(cmd)
|
||||
if len(cmd) >= 4 and cmd[3]=="que":
|
||||
sent=handler.sender.sendMessage("I qued url "+str(cmd[2]), reply_markup=None)
|
||||
else:
|
||||
sent=handler.sender.sendMessage("que?", reply_markup=kb)
|
||||
handler._edit_msg_ident = telepot.message_identifier(sent)
|
||||
handler._editor = telepot.helper.Editor(handler.bot, sent)
|
||||
|
||||
def execute_command(handler,cmd,msg=None):
|
||||
if cmd[1]=='urls':
|
||||
handle_urls(handler,cmd)
|
||||
|
||||
|
||||
def handle(handler,msg):
|
||||
content_type,chat_type,chat_id = telepot.glance(msg)
|
||||
if msg.has_key('text'):
|
||||
if msg['text'][0]=='/':
|
||||
cmd = msg['text'].split("/")
|
||||
execute_command(handler, cmd, msg)
|
||||
if msg.has_key('data'):
|
||||
lg.debug(msg['data'])
|
||||
|
||||
|
||||
class InlineHandler(telepot.helper.InlineUserHandler, telepot.helper.AnswererMixin):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(InlineHandler, self).__init__(*args, **kwargs)
|
||||
|
||||
def on_inline_query(self, msg):
|
||||
def compute_answer():
|
||||
query_id, from_id, query_string = telepot.glance(msg, flavor='inline_query')
|
||||
print(self.id, ':', 'Inline Query:', query_id, from_id, query_string)
|
||||
|
||||
articles = [{'type': 'article',
|
||||
'id': 'abc', 'title': query_string, 'message_text': query_string}]
|
||||
|
||||
return articles
|
||||
|
||||
self.answerer.answer(msg, compute_answer)
|
||||
|
||||
def on_chosen_inline_result(self, msg):
|
||||
from pprint import pprint
|
||||
pprint(msg)
|
||||
result_id, from_id, query_string = telepot.glance(msg, flavor='chosen_inline_result')
|
||||
print(self.id, ':', 'Chosen Inline Result:', result_id, from_id, query_string)
|
||||
|
||||
|
||||
class FetBot(telepot.helper.ChatHandler):
|
||||
def __init__(self, *args, **kwargs):
|
||||
# super(FetBot,self).__init__(*args,**kwargs)
|
||||
super(FetBot,self).__init__( *args,**kwargs)
|
||||
|
||||
_editor=None
|
||||
_edit_msg_ident=None
|
||||
keyboard=IKM([{"text":"START","callback_data": "start"},
|
||||
{"text":"Don't Start","callback_data":"notstart"}
|
||||
])
|
||||
keyboard =InlineKeyboardMarkup(
|
||||
inline_keyboard=[[
|
||||
InlineKeyboardButton(text='START', callback_data='start'),
|
||||
InlineKeyboardButton(text='START', callback_data='start')
|
||||
]]
|
||||
)
|
||||
def on_chat_message(self,msg):
|
||||
handle(self,msg)
|
||||
content_type,chat_type,chat_id = telepot.glance(msg)
|
||||
lg.debug(content_type)
|
||||
if content_type=="photo" or content_type=="sticker":
|
||||
lg.debug("try to download %s" % msg[content_type][-1]["file_id"])
|
||||
f=self.bot.getFile(msg[content_type][-1]['file_id'])
|
||||
lg.debug(f)
|
||||
self.bot.download_file(f['file_id'], "dwn/" + f['file_path'])
|
||||
# self.bot.getFile(msg['photo'][-1]['file_id']), "dwn")
|
||||
#self._cancel_last()
|
||||
#sent=self.sender.sendMessage("Hello World", reply_markup=self.keyboard)
|
||||
#self._editor = telepot.helper.Editor(self.bot, sent)
|
||||
#self._edit_msg_ident = telepot.message_identifier(sent)
|
||||
|
||||
def on_callback_query(self, msg):
|
||||
query_id, from_id, query_data = telepot.glance(msg, flavor='callback_query')
|
||||
lg.debug(json.dumps(msg))
|
||||
self._cancel_last()
|
||||
if query_data[0]=='/':
|
||||
cmd = query_data.split("/")
|
||||
execute_command(self, cmd, msg)
|
||||
|
||||
# self.sender.sendMessage("Danke")
|
||||
self.bot.answerCallbackQuery(query_id, text='Ok. But I am going to keep asking.')
|
||||
#self.bot.answerCallbackQuery(query_id)
|
||||
def _cancel_last(self):
|
||||
if self._editor:
|
||||
self._editor.editMessageReplyMarkup(reply_markup=None)
|
||||
self._editor = None
|
||||
self._edit_msg_ident = None
|
||||
|
||||
|
||||
|
||||
|
||||
bot=None
|
||||
bot = telepot.DelegatorBot(cfg.token, [include_callback_query_chat_id(pave_event_space())(per_chat_id(),create_open,FetBot,timeout=20),
|
||||
pave_event_space()(
|
||||
per_inline_from_id(), create_open, InlineHandler, timeout=10),
|
||||
])
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user