database.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import sqlite3
  2. from settings import SESSIONS_FOLDER, DATABASE_FILE
  3. from telethon import TelegramClient
  4. from settings import SEP
  5. from Console import console
  6. from time import time
  7. import os
  8. def create_new_main_db():
  9. try:
  10. db = sqlite3.connect(DATABASE_FILE)
  11. except sqlite3.OperationalError:
  12. os.mkdir("data")
  13. db = sqlite3.connect(DATABASE_FILE)
  14. cur = db.cursor()
  15. # Создаем таблицу
  16. cur.execute("""CREATE TABLE IF NOT EXISTS Account(
  17. ID INTEGER PRIMARY KEY,
  18. PHONE TEXT,
  19. PASS TEXT,
  20. API_ID TEXT,
  21. API_HASH TEXT,
  22. IS_ACTIVE INT,
  23. LITECOIN_WALLET TEXT,
  24. LITECOINPASS TEXT,
  25. LITECOINPHRASE TEXT,
  26. SESSION TEXT,
  27. SAFEUMLOGIN TEXT,
  28. SAFEUMPASSWORD TEXT
  29. )""")
  30. cur.execute(""" CREATE TABLE IF NOT EXISTS Proxy(
  31. ID INTEGER PRIMARY KEY,
  32. IP TEXT,
  33. PROTOCOL TEXT,
  34. PORT TEXT,
  35. IS_ACTIVE INTEGER
  36. )""")
  37. cur.execute(""" CREATE TABLE IF NOT EXISTS Proxy(
  38. ID INTEGER PRIMARY KEY,
  39. IP TEXT,
  40. PROTOCOL TEXT,
  41. PORT TEXT,
  42. IS_ACTIVE INTEGER
  43. )""")
  44. cur.execute("""CREATE TABLE IF NOT EXISTS Groups(
  45. ID INTEGER PRIMARY KEY,
  46. NAME TEXT,
  47. TG_LINK TEXT
  48. )""")
  49. cur.execute("""CREATE TABLE IF NOT EXISTS Group_Account_connection(
  50. ID INTEGER PRIMARY KEY,
  51. ACCOUNT_ID INTEGER NOT NULL,
  52. GROUP_ID INTEGER NOT NULL,
  53. TIME_OF_LEAVING TEXT,
  54. FOREIGN KEY(ACCOUNT_ID) REFERENCES Account(ID),
  55. FOREIGN KEY(GROUP_ID) REFERENCES Groups(ID)
  56. )""")
  57. db.commit()
  58. def get_all_data():
  59. with sqlite3.connect(DATABASE_FILE) as db:
  60. cur = db.cursor()
  61. cur.execute("SELECT SESSION, API_ID, API_HASH, IS_ACTIVE, LITECOIN_WALLET, ID, PHONE FROM Account")
  62. return cur.fetchall()
  63. def get_proxys():
  64. with sqlite3.connect(DATABASE_FILE) as db:
  65. cur = db.cursor()
  66. cur.execute("""SELECT IP, PROTOCOL, PORT, IS_ACTIVE FROM Proxy""")
  67. ret = []
  68. for el in cur.fetchall():
  69. ret.append(el)
  70. return ret
  71. def add_new_colums():
  72. with sqlite3.connect(DATABASE_FILE) as db:
  73. cur = db.cursor()
  74. cur.execute("""
  75. ALTER TABLE Account ADD COLUMN SESSION TEXT
  76. """)
  77. db.commit()
  78. def add_account(phone, password, api_id, api_hash, is_working, wallet, wallet_pass,
  79. recover_phrase, safelogin, password_2):
  80. db = sqlite3.connect(DATABASE_FILE)
  81. cur = db.cursor()
  82. ret = cur.execute("SELECT ID FROM Account").fetchall()
  83. if ret:
  84. new_id_account = ret[-1][0] + 1
  85. else:
  86. new_id_account = 1
  87. if api_id and api_hash:
  88. session = SESSIONS_FOLDER + SEP + "anon" + str(new_id_account) + '.session'
  89. client = TelegramClient(session, int(api_id), api_hash)
  90. client.start()
  91. else:
  92. session = ''
  93. cur.execute("""INSERT INTO Account(ID, PHONE, PASS, API_ID, API_HASH, IS_ACTIVE, LITECOIN_WALLET, SESSION,
  94. LITECOINPASS, LITECOINPHRASE, SAFEUMLOGIN, SAFEUMPASSWORD)
  95. VALUES (?,?,?,?,?,?,?,?,?,?, ?, ?);""",
  96. (new_id_account, phone, password, api_id, api_hash, is_working, wallet, session, wallet_pass,
  97. recover_phrase, safelogin, password_2))
  98. db.commit()
  99. db.close()
  100. def add_group(name, tg_link):
  101. db = sqlite3.connect(DATABASE_FILE)
  102. cur = db.cursor()
  103. ret = cur.execute("SELECT ID FROM Groups WHERE TG_LINK = ?", (tg_link,)).fetchall()
  104. if ret:
  105. return # group already exist in database
  106. ret = cur.execute("SELECT ID FROM Groups").fetchall()
  107. if ret:
  108. new_id = ret[-1][0] + 1
  109. else:
  110. new_id = 1
  111. cur.execute("""
  112. INSERT INTO Groups(ID, NAME, TG_LINK) VALUES (?, ?, ?)
  113. """, (new_id, name, tg_link))
  114. db.commit()
  115. db.close()
  116. def add_group_account_connection(client, group_link, stay_in_group=1):
  117. db = sqlite3.connect(DATABASE_FILE)
  118. cur = db.cursor()
  119. ret = cur.execute("SELECT ID FROM Group_Account_connection").fetchall()
  120. if ret:
  121. new_id = ret[-1][0] + 1
  122. else:
  123. new_id = 1
  124. client_id = cur.execute("SELECT ID FROM Account WHERE API_ID = ?", (client.api_id,)).fetchall()
  125. if client_id:
  126. client_id = client_id[0]
  127. else:
  128. console.send_alert("Error when executing SELECT ID FROM Account WHERE API_ID = {}")
  129. return
  130. group_id = cur.execute("SELECT ID FROM Groups WHERE TG_LINK = ?", (group_link,)).fetchall()
  131. if group_id:
  132. group_id = group_id[0]
  133. else:
  134. console.send_alert("Error when executing SELECT ID FROM Groups WHERE TG_LINK = {}")
  135. return
  136. cur.execute("INSERT INTO Group_Account_connection(ID, ACCOUNT_ID, GROUP_ID, TIME_OF_LEAVING) VALUES (?, ?, ?, ?)",
  137. (new_id, client_id[0], group_id[0], str(int(time()) + stay_in_group * 3600)))
  138. db.commit()
  139. def delete_old_connections(client):
  140. db = sqlite3.connect(DATABASE_FILE)
  141. cur = db.cursor()
  142. client_id = cur.execute("SELECT ID FROM Account WHERE API_ID = {}".format(client.api_id)).fetchall()
  143. if client_id:
  144. client_id = client_id[0]
  145. else:
  146. console.send_alert("Error when executing SELECT ID FROM Account WHERE API_ID = {}")
  147. return
  148. ret = cur.execute("SELECT ID, TIME_OF_LEAVING, GROUP_ID FROM Group_Account_connection WHERE ACCOUNT_ID = ?",
  149. (client_id[0],)).fetchall()
  150. groups_to_leave = []
  151. for el in ret:
  152. if time() > int(el[1]):
  153. cur.execute("DELETE FROM Group_Account_connection WHERE ID = ?", (el[0],))
  154. groups_to_leave.append(el[2])
  155. tg_links_to_leave = []
  156. for el in groups_to_leave:
  157. ret = cur.execute("SELECT NAME FROM Groups WHERE ID = ?", (el,)).fetchall()
  158. tg_links_to_leave.append(ret[0][0])
  159. db.commit()
  160. return tg_links_to_leave
  161. if __name__ == '__main__':
  162. create_new_main_db()