Advertisement
Guest User

Untitled

a guest
Aug 26th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.11 KB | None | 0 0
  1. import flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. import telebot
  4. import logging
  5.  
  6.  
  7. import dice
  8. import rpg
  9.  
  10. logger = telebot.logger
  11. telebot.logger.setLevel(logging.DEBUG)
  12.  
  13. API_TOKEN = '305501408:AAHWH_mzAcSFr9fER2oqupn_UD4ymjaNaIQ'
  14.  
  15. WEBHOOK_URL_BASE = 'https://sahdoum.pythonanywhere.com'
  16. WEBHOOK_URL_PATH = '/%s/' % API_TOKEN
  17.  
  18. bot = telebot.TeleBot(API_TOKEN, threaded=False)
  19.  
  20. app = flask.Flask(__name__)
  21. SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
  22.     username="sahdoum",
  23.     password="aaaaaaaa8",
  24.     hostname="sahdoum.mysql.pythonanywhere-services.com",
  25.     databasename="sahdoum$FATAL",
  26. )
  27. app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
  28. app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
  29. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
  30. db = SQLAlchemy(app)
  31.  
  32. class User(db.Model):
  33.     id = db.Column(db.Integer, primary_key=True)
  34.     chat_id = db.Column(db.Integer, unique=True)
  35.     chat_name = db.Column(db.String(80), unique=True)
  36.     location = db.Column(db.String(256), unique=True)
  37.  
  38.     def __init__(self, chat_id, chat_name, location):
  39.         self.chat_id = chat_id
  40.         self.name = name
  41.         self.location = location
  42.  
  43.     def __repr__(self):
  44.         return '<User %r>' % self.name
  45.  
  46. @app.route('/')
  47. def index():
  48.     return 'Hello!'
  49.  
  50.  
  51. @app.route(WEBHOOK_URL_PATH, methods=['POST'])
  52. def webhook():
  53.     if flask.request.headers.get('content-type') == 'application/json':
  54.         json_string = flask.request.get_data().decode('utf-8')
  55.         update = telebot.types.Update.de_json(json_string)
  56.         bot.process_new_updates([update])
  57.         return ''
  58.     else:
  59.         flask.abort(403)
  60.  
  61. text_messages = {
  62.     'help':
  63.         u'Во многой мудрости много печали; и кто умножает познания, умножает скорбь.\n'
  64.         u'Но ищущему знания я поведаю свои команды:\n'
  65.         u'/help - информация о боте\n'
  66.         u'/roll - броски дайсов\n'
  67.         u'/r - короткая команда для /roll\n'
  68.         u'/rf - бросок в FATE\n'
  69.         u'/rg - бросок в GURPS\n'
  70.         u'/fatal - используй команду эту с большой осторожностью\n'
  71. }
  72.  
  73. # ---- ----
  74. # ---- Start methods ----
  75.  
  76. # Handle '/start'
  77. @bot.message_handler(commands=['start'])
  78. def send_welcome(message):
  79.     bot.reply_to(message, "Bot enabled")
  80.  
  81.  
  82. # Handle '/stop'
  83. @bot.message_handler(commands=['stop'])
  84. def send_stop(message):
  85.     bot.reply_to(message, "Bot disabled")
  86.  
  87. # Handle '/help'
  88. @bot.message_handler(commands=['help'])
  89. def help (message):
  90.     bot.reply_to(message, text_messages['help'])
  91.  
  92. # Handle 'new_chat_participant'
  93. @bot.message_handler(func=lambda m: True, content_types=['new_chat_participant'])
  94. def greeting(message):
  95.     bot.reply_to(message, "Приветствую, путник!")
  96.  
  97.  
  98. # Handle '/add'
  99. @bot.message_handler(commands=['add'])
  100. def help (message):
  101.     usr = User(message.chat.id, u"Диса "+message.chat.id, "start") #message.from.first_name
  102.     db.session.add(usr)
  103.     db.session.commit()
  104.     bot.reply_to(message, u"Добавлено")
  105.  
  106. # Handle '/list'
  107. @bot.message_handler(commands=['list'])
  108. def help (message):
  109.     usr_list = User.query.all()
  110.     msg = u"Набор пидоров: \n"
  111.     for usr in usr_list:
  112.         msg += usr.name+'\n'
  113.     bot.reply_to(message, msg)
  114.  
  115. # Handle '/del'
  116. @bot.message_handler(commands=['del'])
  117. def help (message):
  118.     User.query.delete()
  119.     bot.reply_to(message, u"Удалено")
  120.  
  121. # ---- ----
  122. # ---- Different rolls ----
  123.  
  124. # Handle '/roll' 'r'
  125. @bot.message_handler(commands=['roll', 'r'])
  126. def roll (message):
  127.     arg = message.text.split(' ')
  128.     if len(arg)>1:
  129.         try:
  130.             result = dice.roll(arg[1])
  131.             bot.reply_to(message, "Вы выкинули:\n"+str(result))
  132.         except:
  133.             bot.reply_to(message, "Неправильное выражение.")
  134.     else:
  135.         bot.reply_to(message, u'Вжух:\n'+str(dice.roll('4d6')))
  136.  
  137.  
  138. # Handle '/rf'
  139. @bot.message_handler(commands=['rf'])
  140. def rollFate (message):
  141.     roll = dice.roll('4d3')
  142.     result = 0
  143.     text = u"Вы выкинули:\n"
  144.     for i in roll:
  145.         if i == 1:
  146.             text += "[-]"
  147.         elif i == 2:
  148.             text += "[0]"
  149.         else:
  150.             text += "[+]"
  151.         result += i-2
  152.  
  153.     arg = message.text.split(' ')
  154.     if len(arg)>1:
  155.         text += "+"+arg[1]
  156.         result += int(arg[1])
  157.  
  158.     text += '=\n{0}'.format(result)
  159.     bot.reply_to(message, text)
  160.  
  161. # Handle '/rg'
  162. @bot.message_handler(commands=['rg'])
  163. def rollGURPS(message):
  164.     arg = message.text.split(' ')
  165.     roll = dice.roll('3d6t')
  166.     text = str(roll)
  167.     if len(arg)>1:
  168.         if  roll > int(arg[1]):
  169.             text += " > "+arg[1]+u"\nПровал"
  170.         else:
  171.             text += " ≤ "+arg[1]+u"\nУспех"
  172.     bot.reply_to(message, text)
  173.  
  174. # ---- ----
  175. # ---- Image parasha ----
  176.  
  177. # Handle '/image'
  178. @bot.message_handler(commands=['image'])
  179. def send_image(message):
  180.     logger.debug('Sending image')
  181.     img = Image.new('RGB', (512, 512))
  182.     base = random.randint(0, 16777216)
  183.     pixels = [base + i * j for i in range(512) for j in range(512)]  # generate sample image
  184.     img.putdata(pixels)
  185.     img.save('temp.jpg', 'JPEG')
  186.     bot.send_photo(message.chat.id, open('temp.jpg', 'rb'))
  187.  
  188. @bot.message_handler(commands=['image2'])
  189. def send_image2(message):
  190.     logger.debug('Sending photo!')
  191.     bot.send_photo(message.chat.id, open('test.jpg', 'rb'))
  192.  
  193. # ---- ----
  194. # ---- FATAL ----
  195.  
  196. fatal_editor = rpg.Editor('fatal')
  197.  
  198. # Handle /fatal
  199. @bot.message_handler(commands=['fatal'])
  200. def fatal_message(message):
  201.     try:
  202.         fatal = rpg.Game('fatal', 'fatal_messages', message.chat.id, 'users')
  203.         dsc = fatal.generate_location()
  204.         btn = dsc['buttons']
  205.         bot.reply_to(message, dsc['text'], parse_mode='Markdown', reply_markup=btn)
  206.  
  207.         if btn:
  208.             bot.register_next_step_handler(message, next_fatal)
  209.     except Exception as e:
  210.         bot.reply_to(message, 'Exception: '+str(e))
  211.  
  212. # Handle next message after /fatal
  213. def next_fatal(message):
  214.     try:
  215.         fatal = rpg.Game('fatal', 'fatal_messages', message.chat.id, 'users')
  216.         dsc = fatal.generate_location(message.text)
  217.         btn = dsc['buttons']
  218.         bot.reply_to(message, dsc['text'], parse_mode='Markdown', reply_markup=btn)
  219.  
  220.         if btn:
  221.             bot.register_next_step_handler(message, next_fatal)
  222.  
  223.     except Exception as e:
  224.         bot.reply_to(message, 'Exception: '+str(e))
  225.  
  226. # Handle /addfatal
  227. @bot.message_handler(commands=['addfatal'])
  228. def add_fatal_msg(message):
  229.     if ' ' in message.text:
  230.         fatal_editor.tmp_loc_key = message.text.split(' ', maxsplit=1)[1]
  231.     else:
  232.         fatal_editor.tmp_loc_key = 'fatal_messages'
  233.     bot.reply_to(message, u"Напишите запись:")
  234.     bot.register_next_step_handler(message, request_new_fatal_msg)
  235.  
  236. # Handle new msg description
  237. def request_new_fatal_msg(message):
  238.     text = message.text
  239.     fatal_editor.tmp_loc_dsc = text
  240.  
  241.     bot.send_message(message.chat.id, u"Сообщение записано. Напишите сообщение для кнопки или завершите командой /done")
  242.     bot.register_next_step_handler(message, request_button)
  243.  
  244. # Handle button description or /done command
  245. def request_button(message):
  246.     if message.text == '/done':
  247.         fatal_editor.set_location(message.chat.id)
  248.         bot.send_message(message.chat.id, u"Запись добавлена!")
  249.     else:
  250.         fatal_editor.tmp_loc_btn_dsc = message.text
  251.         bot.send_message(message.chat.id, u"Напишите файл сообщений для кнопки.")
  252.         bot.register_next_step_handler(message, request_buttonlink)
  253.  
  254. # Handle button link
  255. def request_buttonlink(message):
  256.     fatal_editor.tmp_loc_btn[fatal_button_key] = message.text
  257.     bot.send_message(message.chat.id, u"Кнопка добавлена. Напишите сообщение еще для одной кнопки или завершите командой /done")
  258.     bot.register_next_step_handler(message, request_button)
  259.  
  260. # Handle /delfatal
  261. @bot.message_handler(commands=['delfatal'])
  262. def delete_fatal_message(message):
  263.     #так вообще без объявления можно?
  264.     if ' ' in message.text:
  265.         key = message.text.split(' ', maxsplit=1)[1]
  266.     else:
  267.         key = 'fatal_messages'
  268.  
  269.     msg_gen = fatal_editor.delete_list_generator(message.id, key, 'fatal_delete')
  270.     for m in msg_gen:
  271.         bot.send_message(message.chat.id, m['text'], parse_mode='Markdown', reply_markup=m['buttons'])
  272.  
  273. # Handle callback for fatal delete
  274. @bot.callback_query_handler(func=lambda call: call.data.split(' ')[0] == 'fatal_delete')
  275. def callback_inline(call):
  276.     if call.message:
  277.         index = int(call.data.split(' ')[1])
  278.         fatal_editor.delete(call.message.chat.id, index)
  279.         bot.send_message(chat_id, u"Сообщение удалено.")
  280.  
  281. # ---- ----
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement