#!/usr/bin/python
# -*- coding: utf-8 -*-
import telebot
import cherrypy
import MySQLdb
import datetime
import config
import logging
import sys
class mLogger(object):
def __init__(self):
self.terminal = sys.stdout
self.log = open('/var/log/bot0.3.py.log', "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
#this flush method is needed for python 3 compatibility.
#this handles the flush command by doing nothing.
#you might want to specify some extra behavior here.
pass
sys.stdout = mLogger()
logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG) # Outputs debug messages to console.
WEBHOOK_HOST = 'my_BOT_HOST.SITE.ru'
WEBHOOK_PORT = 8443 # 443, 80, 88 или 8443 (порт должен быть открыт!)
WEBHOOK_LISTEN = '0.0.0.0' # На некоторых серверах придется указывать такой же IP, что и выше
WEBHOOK_SSL_CERT = '/etc/ssl/certs/cert.pem' # Путь к сертификату
WEBHOOK_SSL_PRIV = '/etc/ssl/private/privkey.pem' # Путь к приватному ключу
WEBHOOK_SSL_CHAIN= '/etc/ssl/certs/chain.pem' # = "certchain.perm"
WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % config.token
bot = telebot.TeleBot(config.token)
# Open database connection
db = MySQLdb.connect(
host = "hostmysql",
user = "username",
passwd = "password",
db = "dbname",
port = 3306,
charset="utf8",
use_unicode=True )
# prepare a cursor object using cursor() method
db.set_character_set('utf8')
cursor = db.cursor()
cursor.execute("SET NAMES utf8;") #or utf8 or any other charset you want to handle
cursor.execute("SET CHARACTER SET utf8;") #same as above
cursor.execute("SET character_set_connection=utf8;") #same as above
def CheckConnect(): # отваливалась sql сессия, это проверка на живучесть и переконнект если отвалилась
global db
global cursor
xconn = False
try:
cursor.execute("SELECT VERSION()")
results = cursor.fetchone()
# Check if anything at all is returned
if results:
xconn = True
else:
xconn = False
except MySQLdb.Error, e:
print "ERR::CheckConnect : ERROR %d IN CONNECTION: %s" % (e.args[0], e.args[1])
xconn = False
if (not xconn):
try:
db.close
except:
pass
print "ChkConnect:: Repiat connect to DB"
db = MySQLdb.connect(,,вырезал пароли,,,,
port = 3306, charset="utf8", use_unicode=True )
# prepare a cursor object using cursor() method
db.set_character_set('utf8')
cursor = db.cursor()
cursor.execute("SET NAMES utf8;") #or utf8 or any other charset you want to handle
cursor.execute("SET CHARACTER SET utf8;") #same as above
cursor.execute("SET character_set_connection=utf8;") #same as above
# Наш вебхук-сервер
class WebhookServer(object):
@cherrypy.expose
def index(self):
if 'content-length' in cherrypy.request.headers and \
'content-type' in cherrypy.request.headers and \
cherrypy.request.headers['content-type'] == 'application/json':
length = int(cherrypy.request.headers['content-length'])
json_string = cherrypy.request.body.read(length) #.decode("utf-8")
update = telebot.types.Update.de_json(json_string)
# Эта функция обеспечивает проверку входящего сообщения
bot.process_new_messages([update.message])
return ''
else:
raise cherrypy.HTTPError(403)
# Хэндлер на все текстовые сообщения
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Привет,\n по всем вопросам и пожеланиям пишите @Winsik ")
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo_message(message):
CheckConnect()
if message.chat.type == "private":
# private chat message
msgout = str(message.from_user.username) + ", редиска, отстань. Я не поддерживаю частные разговоры с незнакомцами!";
bot.reply_to(message,msgout)
if message.chat.type == "group":
# group chat message
if message.text[1:8] == 'create ':
send_createo(message,message.text[8:])
#bot.reply_to(message,"Заглушка на команду создания опроса")
else:
#unknow command
pass #bot.reply_to(message, message.text)
if message.chat.type == "channel":
# channel message
pass #bot.reply_to(message, message.text)
# Снимаем вебхук перед повторной установкой (избавляет от некоторых проблем)
bot.remove_webhook()
# Ставим заново вебхук
#bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH,
# certificate=open(WEBHOOK_SSL_CERT, 'r'))
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH)
# Указываем настройки сервера CherryPy
cherrypy.config.update({
'server.socket_host': WEBHOOK_LISTEN,
'server.socket_port': WEBHOOK_PORT,
# 'server.ssl_module': 'builtin',
'server.ssl_module': 'pyOpenSSL',
'server.ssl_certificate': WEBHOOK_SSL_CERT,
'server.ssl_private_key': WEBHOOK_SSL_PRIV,
'server.ssl_certificate_chain': WEBHOOK_SSL_CHAIN
})
#cherrypy.server.ssl_certificate_chain = WEBHOOK_SSL_CHAIN
# Собственно, запуск!
cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, {'/': {}})
# disconnect from server
print "Close mysql connection..."
db.close()