async_db.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import aiosqlite
  2. from loader import logger
  3. from utils import User, Ads, ScheduledMessage
  4. class Database:
  5. def __init__(self, path_to_db="database.db"):
  6. self.path_to_db = path_to_db
  7. # TODO create normal database connector
  8. async def jobs_add(self, message_id, chat_id, text):
  9. async with aiosqlite.connect(self.path_to_db) as db:
  10. sql = "INSERT INTO jobs VALUES (?,?,?)"
  11. parameters = (message_id, chat_id, text)
  12. await db.execute(sql, parameters)
  13. await db.commit()
  14. logger.info(f'{sql}, {parameters}')
  15. async def jobs_delete(self, message_id, chat_id, text):
  16. async with aiosqlite.connect(self.path_to_db) as db:
  17. message_id = 0 if message_id is None else message_id
  18. sql = "DELETE FROM jobs WHERE message_id=? AND chat_id=? AND text=?"
  19. parameters = (message_id, chat_id, text)
  20. await db.execute(sql, parameters)
  21. await db.commit()
  22. logger.info(f'{sql}, {parameters}')
  23. async def get_jobs(self):
  24. """
  25. :return: [task in every second; max length 20 [1 message in one chat; Max 20 message] ]
  26. """
  27. for_scheduler = [[] for i in range(55)]
  28. messages = []
  29. limit = 20
  30. async with aiosqlite.connect(self.path_to_db) as db:
  31. chats = [i[0] async for i in await db.execute('SELECT distinct(chat_id) from jobs')]
  32. for chat in chats:
  33. jobs_list = [ScheduledMessage(
  34. message_id=None if int(i[0]) == 0 else i[0],
  35. chat_id=i[1], text=i[2]
  36. ) async for i in
  37. await db.execute(f'SELECT * FROM jobs WHERE chat_id={chat} LIMIT {limit};')]
  38. # messages.extend([i for i in list(zip(*[iter(jobs_list)] * 10))])
  39. messages.extend(jobs_list)
  40. for job in messages:
  41. # print(f"\n{job}")
  42. i = 0
  43. while i <= 55:
  44. # print(f'ITER:{i}')
  45. if len(for_scheduler[i]) < 20:
  46. try:
  47. contain_chat = list(filter(lambda x: int(x.chat_id) == int(job.chat_id), for_scheduler[i]))
  48. except AttributeError:
  49. # if task list empty
  50. # print(f"ADD: {job} to jobs_to_schedule[{i}]")
  51. for_scheduler[i].extend(job)
  52. break
  53. if not contain_chat:
  54. # print(f"ADD: {job} to jobs_to_schedule[{i}]")
  55. for_scheduler[i].append(job)
  56. break
  57. # elif contain_chat:
  58. # i += 4
  59. i += 1
  60. return for_scheduler