FlyWithMe

bot

Nov 11th, 2020 (edited)
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.77 KB | None | 0 0
  1. import logging
  2. import settings
  3. from datetime import datetime
  4. from telegram.bot import Bot
  5. from telegram.ext import messagequeue as mq
  6. from telegram.utils.request import Request
  7. from telegram.ext import Updater, CommandHandler
  8. import sqlite3
  9.  
  10.  
  11. logging.basicConfig(filename='bot.log', level=logging.INFO)
  12.  
  13. PROXY = {'proxy_url': settings.PROXY_URL,
  14.          'urllib3_proxy_kwargs': {'username': settings.PROXY_USERNAME, 'password': settings.PROXY_PASSWORD}}
  15.  
  16. print('bot has been started at ' + datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"))
  17.  
  18. conn = sqlite3.connect("mydatabase.db", check_same_thread = False)  # или :memory: чтобы сохранить в RAM
  19. cursor = conn.cursor()
  20.  
  21. class MQBot(Bot):
  22.     def __init__(self, *args, is_queued_def=True, msg_queue=None, **kwargs):
  23.         super().__init__(*args, **kwargs)
  24.         self._is_messages_queued_default = is_queued_def
  25.         self._msg_queue = msg_queue or mq.MessageQueue()
  26.  
  27.     def __del__(self):
  28.         try:
  29.             self._msg_queue.stop()
  30.         except:
  31.             pass
  32.  
  33.     @mq.queuedmessage
  34.     def send_message(self, *args, **kwargs):
  35.         return super().send_message(*args, **kwargs)
  36.  
  37.  
  38. def greet_user(update, context):
  39.     text = 'Хрен теперь куда денетесь, даже регать вас не придется'
  40.     update.message.reply_text(text)
  41.     print('/start')
  42.  
  43.  
  44. def random_from_base():
  45.     query_user = 'SELECT user from users order by random() limit 1;'
  46.     cursor.execute(query_user)
  47.     users_frm_db = cursor.fetchall()
  48.     chars_to_remove = ["[","]","(",")",",","'"]
  49.     subj = str(users_frm_db)
  50.     sc = set(chars_to_remove)
  51.     rand_user = (''.join([c for c in subj if c not in sc]))
  52.     return rand_user
  53.  
  54. def check_date():
  55.     query_date = "SELECT last_date FROM users WHERE last_date = strftime('%d-%m-%Y', 'now') limit 1"
  56.     cursor.execute(query_date)
  57.     date_on_db = cursor.fetchall()
  58.     chars_to_remove = ["[","]","(",")",",","'"]
  59.     subj_date = str(date_on_db)
  60.     sc = set(chars_to_remove)
  61.     rand_date = (''.join([c for c in subj_date if c not in sc]))
  62.     return(rand_date)
  63.  
  64.  
  65. # Берет пользователя из функции выше и проверяет его на еблана дня
  66. def roll(update,context):
  67.     date = check_date()
  68.     today = datetime.utcnow().strftime("%d-%m-%Y")
  69.     if date == today:
  70.         msg_wrong = 'Тебя учили читать, пёс? В чате СЕГОДНЯ уже проверяли, перед тем как кликнуть - читай чат.'
  71.         update.message.reply_text(msg_wrong)
  72.     else:
  73.         text = 'Так так так, кто же у нас сегодня "еблан по знакомству"?'
  74.         update.message.reply_text(text)
  75.         same = random_from_base()
  76.         usr = "'" + str(same) + "'"
  77.         msg = same + '. Впрочем, никто и не удивлен.'
  78.         update.message.reply_text(msg)
  79.         update_query = "update users set count = count + 1, last_date = strftime('%d-%m-%Y','now') where user = " + usr
  80.         cursor.execute(update_query)
  81.         conn.commit()
  82.  
  83.  
  84. def sql_query(update, context):
  85.     print('/sql')
  86.     user_id = update.effective_user.id
  87.     text_from_tg = update.message.text
  88.     new_text = text_from_tg[5::]
  89.     if user_id == 111111111:
  90.         cursor.execute(new_text)
  91.         update.message.reply_text(cursor.fetchall())
  92.     else:
  93.         update.message.reply_text(f'Пошел нахуй со своим "{new_text}", самый умный тут?')
  94.  
  95.  
  96. def top(update,context):
  97.     print('/top')
  98.     query_top = "SELECT user, count FROM users ORDER BY count DESC"
  99.     cursor.execute(query_top)
  100.     top_from_db = cursor.fetchall()
  101.  
  102.     hey = 0
  103.     total_string = ''
  104.     for i in top_from_db:
  105.         fio = i[0]
  106.         num_of_wins = i[1]
  107.         hey += 1
  108.         total_string += ''.join(f'{hey}) {fio} был "ебланом по знакомству": {num_of_wins} раз(а)\n')
  109.     top_message = 'Итак, вот топ за все время: \n' + total_string
  110.     update.message.reply_text(top_message)
  111.  
  112.  
  113. def main():
  114.     request = Request(
  115.         con_pool_size=8,
  116.         proxy_url=PROXY['proxy_url'],
  117.         urllib3_proxy_kwargs=PROXY['urllib3_proxy_kwargs']
  118.     )
  119.     bot = MQBot(settings.API_KEY, request=request)
  120.     mybot = Updater(bot=bot, use_context=True)
  121.  
  122.  
  123.     dp = mybot.dispatcher
  124.     dp.add_handler(CommandHandler('start', greet_user))
  125.     dp.add_handler(CommandHandler('roll', roll))
  126.     dp.add_handler(CommandHandler('sql', sql_query))
  127.     dp.add_handler(CommandHandler('top', top))
  128.  
  129.     logging.info('Бот Запустился' + datetime.utcnow().strftime("%d-%m-%Y %H:%M:%S"))
  130.     mybot.start_polling()
  131.     mybot.idle()
  132.  
  133.  
  134. if __name__ == '__main__':
  135.     main()
Advertisement
Add Comment
Please, Sign In to add comment