From f223570bab8dfff72902a2c6a5d72dbda7ad989a Mon Sep 17 00:00:00 2001 From: Egor Deev Date: Fri, 2 Oct 2026 23:36:49 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=BE=D0=BA=D0=B5=D0=BD=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F,=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D1=91?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D1=81=D0=B0=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - токен бота — из BOT_TOKEN, а не из config.py; - sub.db (с идентификатором подписчика) убран из git: SQLighter создаёт таблицы и служебные строки из schema.sql, если базы нет. --- .gitignore | 5 +++++ config.py | 6 ++++-- schema.sql | 15 +++++++++++++++ sql.py | 11 +++++++++++ sub.db | Bin 28672 -> 0 bytes 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 schema.sql delete mode 100644 sub.db diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5325d19 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.py[cod] +.venv/ +.env +*.db diff --git a/config.py b/config.py index 73b8157..a0f007e 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,7 @@ -API_TOKEN = 'token from BotFather' # ОСНОВНОЙ -# API_TOKEN = 'token from BotFather' # ТЕСТЫ +import os + +# Токен бота от @BotFather — из переменной окружения BOT_TOKEN +API_TOKEN = os.environ.get('BOT_TOKEN', '') CITY = {'Центральный район': [1, 'Норильск'], 'район Талнах': [2, 'Талнах'], 'ж/о Оганер': [3, 'Оганер'], 'район Кайеркан': [4, 'Кайеркан']} diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..8c82379 --- /dev/null +++ b/schema.sql @@ -0,0 +1,15 @@ +-- Схема базы бота и служебные строки, которые он ожидает (подписчиков нет) +CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, id_user VARCHAR (255) NOT NULL, + rating INTEGER (4) NOT NULL DEFAULT (0), status BOOLEAN NOT NULL DEFAULT (False), + send BOOLEAN NOT NULL DEFAULT (True), part INTEGER (1) NOT NULL, city INTEGER (1) NOT NULL); +CREATE TABLE IF NOT EXISTS parts (part INTEGER PRIMARY KEY AUTOINCREMENT, nor VARCHAR (3), tal VARCHAR (3), + oga VARCHAR (3), kae VARCHAR (3)); +CREATE TABLE IF NOT EXISTS weather (id STRING, "1" VARCHAR, "4" VARCHAR, "7" VARCHAR, "10" VARCHAR, + "13" VARCHAR, "16" VARCHAR, "19" VARCHAR, "22" VARCHAR); +CREATE TABLE IF NOT EXISTS data (id INTEGER PRIMARY KEY AUTOINCREMENT, date DATE NOT NULL, part INTEGER (2) NOT NULL, + weath STRING); + +INSERT INTO parts (part, nor, tal, oga, kae) VALUES (1, '11', '11', '11', '11'), (2, '11', '11', '11', '11'); +INSERT INTO weather (id) VALUES (' '), ('tomorrow'), ('3-day'), ('4-day'), ('5-day'), ('6-day'), ('7-day'), + ('8-day'), ('9-day'), ('10-day'); +INSERT INTO data (id, date, part) VALUES (1, '2022-02-24', 1); diff --git a/sql.py b/sql.py index e340931..79de4af 100644 --- a/sql.py +++ b/sql.py @@ -1,11 +1,22 @@ +import os import sqlite3 +SCHEMA = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'schema.sql') + class SQLighter: def __init__(self, database): """Подключаемся к БД и сохраняем курсор соединения""" self.connection = sqlite3.connect(database) self.cursor = self.connection.cursor() + self._create_if_empty() + + def _create_if_empty(self): + """Новая база: создаём таблицы и служебные строки из schema.sql""" + exists = self.cursor.execute("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'users'").fetchone() + if not exists: + with open(SCHEMA, encoding='utf-8') as f: + self.connection.executescript(f.read()) def user_exists(self, id_user): """Проверяем, есть ли уже пользователь в базе""" diff --git a/sub.db b/sub.db deleted file mode 100644 index 28cfb928fc591ea87de3766eaf8cf3bc69308053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeI4U5p!76@X{F_O3ly?_{%0trAKn71G*t63x9ccYf$gH;KEf_OEQ6iYN*z(=}xw z*-dOOtB6A6ZB?NPBq$FEsY2>QL?2Kdpl{`&;spuu5CKvV;;BNSFKwR?M2Mer@10*~ z>~18AXmqZ#-kEdmJ@=gNoO{MnoIL&cmF<4V`0{S|O1p2^%27pCl_v~CQM4P1qD+N9 zD*OhSQiPvqaM_0puyK0*`D*nErKH_aX8tt&lOr!xf3Dqu8yrXg2_OL^fCP{L5VU5E_Zs@F2g6-UVm?Edv~+nxpH-LoOtT&MsuOnG+F~~ZmM?t zxH{Mu)3@6FHvcI``h_zqO@m8}`u3KwwAN}aHaCo?HkMWwHZB;;%?rlD`PTZ<8q8m9 zuC+`)w_}{+w%68M#@hLn71Oxd?)Kxgb=pX&_B-wVSB$4y8%t}8je}3kOx0>N^~Dpy znY~`8+Y@hvj5|VfSbw&+Hu-$xnT3tBpIg{4>Xfmx1KoCid*`{tJ10>Z=bBG0oL^}f zb*o_-y?(pD*E7znudg&0*5VM7Nl&&f_d0xHXJ>27v{rYI&&o0($*!jH>~{Zp;!sM} z7(6&F0393=fVhpGcq?T936W9HY%wNfJG&`7Hu%HqkQHJ&O=)*gFIy&yK1 zZDO<6xwhBYc{c1C@$Ezg|Ipm}PWwv7gq01*<8OJk5574n+k;cpDc+n0*HXLYHmAYF zF*)<$51X0O-QqST+SG^^Sl0|g_AV2yM1NX4zsj$p1EMvm)8AFp>F*S(mFZvqH(!Tq z>tb?!u zLd*4SV%vdJ1p{-B2%$%P%XPfKJytI(kHD;o%Bb%+w!?xVto;mMtCorHIu4k#y#ff2 zpXByb;<3OX)TK^QpH*QwmsYHB5Jf5cIoz30-y@#o*vCFyR=BKOCKl}D**@`L-Y>u) zEGCvsh-*8Z53<+AS`{L3i4!nN3LyM}@LKg4bzNdvK9}8)-Z0Cv7-7Cox$vu@Mb~m+ zG7GrHXF?e)WFB)#0J1aE8)gv}*dFt2ke!wWiA@QB^n(EY+P3fz7pmY6?CLtU6%_b3 z6R?~+4#1ejTn9|5AB4-Dz+qnCc@9ie|HvILmu*Uk>jn;Nqy9>)Rf+2}hdMU#VH@>l z01Q7v z79W`9LLLgU>>zNVCKwMz1q(ytn9g&`=Q3i!EFN z+}67=jiZ4)(;$Ehg6#K_He@Lvyuu(7<*hI}LY=^~scnJmr?NO9G|%xt3Zfr{J5UEI z0!j%)FNKaUpZLs%i6HCBX$%5p0b~S3n^NRjo(;+HxM)R+JjV{G%LoM#Uz{GZ1yRrt zK@c#&WKr(yTzU#zSM~Rl3H@zFe_MY?|J#rfZ;=2JKmter2_OL^fCP{L5$gL8j^-DDVdd5PA>87F;zdv98 z_vBw^{#AW{`Y*-TN^c%{PkX;|Cp8x@kpL3-CnI65l2#+#`iI4W^+*tFD656Zi|_QC!&jN2`<#( zI@dIUQ992wh&4`0a+Hi)Dv6A*7igaWgQIt7N%ob+{T5^t# zN~p1yfH-c}R1`L>lT>eIbfTFhZ9b!;JW=3j$TXu9zTBl7JYUgji!$9y!BEV=Fg(`T zqzfRB^t_%K!IJQY%S8m8LYa9+QGpWd=0Bq%ZEnF(@$?(@6q1$`XmL3W_RA1{IQ%4h z;pg3rR@S@-kvI2j7e0hCZdiHEJ$e%5J~M1Ek`#LAJ6qNL45D-Vh#t+u=hEq`%& zk;Rb{@!aLp9A)21sL!>d-E25AoW9dl} zrNC-l(&4XfCZMNHp^M)k}es6io=Zb*$<{kISIdDeVF60 xBBG}`e*ZrrfxnRe5