Compare commits

...

221 Commits

Author SHA1 Message Date
hogweed1
72f96576ba море спася геноцид
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:58:05 +10:00
hogweed1
81db0b2bdb море спася геноцид
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:57:58 +10:00
hogweed1
2830335b12 space genocide
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:52:47 +10:00
hogweed1
7e52c86067 be be bechka lo
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:38:25 +10:00
hogweed1
5f0d211a9b be be be
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:30:41 +10:00
hogweed1
f4a1cee509 be be be
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:28:36 +10:00
3b4454fd44 Update handlers/metrics.py
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:26:04 +10:00
f7a13962f0 init gauges once
All checks were successful
continuous-integration/drone/push Build is passing
init gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges onceinit gauges once
2025-05-12 21:25:08 +10:00
8a1013d280 Update db_logic/user_stuff.py
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:12:12 +10:00
afc9b61e92 Update db_logic/user_stuff.py
All checks were successful
continuous-integration/drone/push Build is passing
2025-05-12 21:06:33 +10:00
825d415766 Merge pull request 'main' (#12) from RakVhalate/python_bot_exporter:main into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2025-05-12 21:00:57 +10:00
567ce5f2ad fix
All checks were successful
continuous-integration/drone/pr Build is passing
2025-05-08 12:55:51 +10:00
1f3b4ec80f Metrics added 2025-05-08 12:19:36 +10:00
a67531ce98 Update .drone.yml
All checks were successful
continuous-integration/drone/push Build is passing
2025-04-10 02:29:06 +10:00
2542e601c1 Update .drone.yml
All checks were successful
continuous-integration/drone/push Build is passing
2025-04-10 02:25:35 +10:00
d173eb019b Update config.yaml
All checks were successful
continuous-integration/drone/push Build is passing
2025-04-09 03:08:26 +10:00
43148417c8 Обновить pipisa_functions/pipisa_time.py
All checks were successful
continuous-integration/drone/push Build is passing
2025-01-03 03:16:23 +10:00
9f7ae4b9a7 we r so fucking back
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-11 01:07:53 +10:00
hogweed1
d41eeb3232 make pipisa secure
All checks were successful
continuous-integration/drone/push Build is passing
2024-07-03 17:38:45 +10:00
hogweed1
55e5303ab2 trying artifitial antitop !!
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-29 01:51:07 +10:00
hogweed1
31235ef9ac trying artifitial antitop !
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-29 01:47:23 +10:00
hogweed1
6709eebb88 trying artifitial antitop
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-29 01:36:59 +10:00
Pavel_Durov
1533c5eb91 dsfs
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-10 20:49:20 +03:00
Pavel_Durov
4c520b39fe asdadasdassa
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-10 20:37:34 +03:00
Pavel_Durov
db842a1ceb eweww
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-10 19:46:37 +03:00
Simple_Not
a571709afa #11 fixxxx scary bug
All checks were successful
continuous-integration/drone Build is passing
2024-03-19 14:12:14 +10:00
Pavel_Durov
192687a5ea теперь пипис у новеньких положительный
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-28 14:30:31 +03:00
Simple_Not
f20c90ea34 fx
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-28 14:14:41 +10:00
Pavel_Durov
1b2410afc4 только положительный пипис для новичков
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-28 14:04:58 +03:00
Simple_Not
56450bc566 fix пост-делишон
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-25 14:28:14 +10:00
Simple_Not
aa3ea439fe fix new yeatr
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-24 18:31:46 +10:00
Simple_Not
dae3f05aa7 fix new yeatr
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-24 17:54:54 +10:00
Simple_Not
66c2ef80c3 #10 теперь логгируется
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-24 14:09:31 +10:00
Simple_Not
4a3f799284 #5 another way
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 15:35:41 +10:00
Simple_Not
7090ab218e #5 fixxo
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 15:31:23 +10:00
Simple_Not
53bac66692 #5 fixxo
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 15:29:34 +10:00
Simple_Not
ee27dbfd7b #5 удаляем!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 15:12:59 +10:00
Simple_Not
14c238ec2f меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 13:29:31 +10:00
Simple_Not
9d6d8791fd меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 13:23:04 +10:00
Simple_Not
d2b8c76817 меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 13:21:10 +10:00
Simple_Not
48d53fd1b9 меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 13:18:51 +10:00
Simple_Not
505d90aea8 меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 12:45:44 +10:00
Simple_Not
eb59091615 меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 02:26:29 +10:00
Simple_Not
c8a9936a00 меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 02:21:29 +10:00
Simple_Not
ecbe419abb меньше кода - лучше!
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-23 02:19:06 +10:00
Simple_Not
a58f6c404f меньше кода - лучше! 2024-01-23 02:18:50 +10:00
Simple_Not
e677591b97 фикс
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-22 03:26:08 +10:00
Simple_Not
c734044b71 фикс
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-22 02:59:48 +10:00
Simple_Not
e55b1c54d8 делаем интереснее
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-22 02:59:25 +10:00
Simple_Not
21bc3724c8 #9 fix
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-21 22:40:59 +10:00
Simple_Not
52f9edf9f4 #8 клинини
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-21 22:36:34 +10:00
Simple_Not
ef4c806071 #8 надеюсь не сломается
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-21 22:33:15 +10:00
Simple_Not
b188edd98d #7 убирац
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-21 22:02:22 +10:00
Simple_Not
bb91a90e9e #6 убирац
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-21 21:55:47 +10:00
Simple_Not
d6da239718 #4 wow, we beccomin secure!
All checks were successful
continuous-integration/drone Build is passing
continuous-integration/drone/push Build is passing
2024-01-21 21:35:52 +10:00
Pavel_Durov
deac88534a CHANGE TIME TO NEWS YEAR
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-17 20:59:37 +03:00
Pavel_Durov
50504b14ce Merge branch 'main' of https://git.guaranteedstruggle.host/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-20 23:13:36 +03:00
Pavel_Durov
3965b11643 add generate images 2023-07-20 23:10:49 +03:00
Simple_Not
4e128198b7 Merge branch 'main' of https://git.guaranteedstruggle.host/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-20 16:10:27 +10:00
Simple_Not
0cf7423806 fix /golbal 2023-07-20 16:09:27 +10:00
Pavel_Durov
28d0e6fdbf Merge branch 'main' of https://git.guaranteedstruggle.host/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 18:49:53 +03:00
Pavel_Durov
49ac3b7a48 пробуем 2023-07-18 18:42:04 +03:00
Simple_Not
2b7cbb0664 Merge branch 'main' of https://git.guaranteedstruggle.host/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 15:41:55 +10:00
Simple_Not
bba000877e check drone-jobs 2023-07-18 15:41:39 +10:00
Pavel_Durov
6c22fa72d1 сука
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-18 01:04:31 +03:00
Pavel_Durov
1a6d0e7e91 fix
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 01:02:29 +03:00
Pavel_Durov
9315a123f1 не починилось
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 00:41:21 +03:00
Pavel_Durov
1f31c5155b fix replys
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 00:39:15 +03:00
Pavel_Durov
fc437530e4 fix
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 23:52:36 +03:00
Pavel_Durov
cbd8e13d79 add reply to davinci
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 23:39:33 +03:00
Pavel_Durov
8fc70c267d now commands work onnly in groups except for adms
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 23:24:10 +03:00
Pavel_Durov
f49233b811 fix
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 22:22:12 +03:00
Pavel_Durov
3831d4e8d4 added start command, replace comands in __init__.py 2023-07-17 22:19:25 +03:00
Simple_Not
0278189ded bring it back
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 15:21:28 +10:00
Simple_Not
a842b3ae01 bring it back
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-17 15:19:03 +10:00
Simple_Not
d427d189b1 bring it back
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 15:18:56 +10:00
Simple_Not
08cc6b40c1 remake many certs
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 14:41:29 +10:00
Simple_Not
ba0867f662 remake many certs
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-17 12:36:06 +10:00
Simple_Not
c764b71af0 fixxxxx
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-16 14:45:35 +10:00
Simple_Not
b9cd608d9b fixxxxx
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-16 14:45:12 +10:00
Simple_Not
77b6293ea6 fixxxxx
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-16 14:34:49 +10:00
Simple_Not
8c269fd768 fixxxxx
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-16 14:29:54 +10:00
Simple_Not
256bdfb89b fixxxxx
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-16 14:24:23 +10:00
Simple_Not
b5903bf79f ZERO worked
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-16 02:00:21 +10:00
Simple_Not
11ddb1536c unittest pipisa
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-16 01:53:33 +10:00
Simple_Not
19999b28ad fixxed pipisa
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-16 01:51:52 +10:00
Simple_Not
e8190a500d fixxed pipisa
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-16 01:50:12 +10:00
Pavel_Durov
76d14126a1 -9 2 10
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-14 22:21:27 +03:00
Pavel_Durov
345168aa80 test
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 19:38:51 +03:00
Pavel_Durov
e2467803c5 back sendalarm
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 19:28:16 +03:00
Simple_Not
489a3304a4 HARD core
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 15:19:31 +10:00
Simple_Not
456d0619df another wut
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 14:39:20 +10:00
Simple_Not
360f8d4c55 another wut
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-07-13 13:48:52 +10:00
Simple_Not
c39f1cde04 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 01:16:26 +10:00
Simple_Not
3f04de5cb1 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 01:00:50 +10:00
Simple_Not
53c48dbb44 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:40:55 +10:00
Simple_Not
361648f1c7 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:39:35 +10:00
Simple_Not
2de30513b2 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:31:00 +10:00
Simple_Not
f46ba32473 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:05:06 +10:00
Simple_Not
8d599c239b now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:03:16 +10:00
Simple_Not
9403350e15 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-13 00:01:25 +10:00
Simple_Not
9f27070585 now we counting
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 22:40:45 +10:00
Simple_Not
40927b95cc bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 22:33:36 +10:00
Simple_Not
460fccc6ab bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 22:07:03 +10:00
Simple_Not
1e4e6fa4d6 bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 22:00:17 +10:00
Simple_Not
c4ca3a98a1 bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 21:58:56 +10:00
Simple_Not
25e82e28d5 bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 21:58:19 +10:00
Simple_Not
e93d2c0ef7 bring dick back.
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-12 21:54:24 +10:00
Simple_Not
b673b43c93 no idia what i changed 2023-07-12 19:39:57 +10:00
Simple_Not
c02215574d no idia what i changed 2023-07-12 19:39:26 +10:00
Pavel_Durov
dea7805dff новый год сука
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-22 19:11:51 +03:00
Pavel_Durov
40abc7065d add poitive random for first user (69)
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 22:44:03 +03:00
Pavel_Durov
c02458b209 add poitive random for first user (69)
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 22:34:39 +03:00
fe64756bc4 #DICKBOT-1 Done
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 11:30:43 +10:00
6923cd2aa8 Update 'README.md'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 11:28:25 +10:00
b73468c73f Update 'README.md'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 11:24:38 +10:00
671c39be27 d
All checks were successful
continuous-integration/drone/push Build is passing
d
2023-06-20 11:23:56 +10:00
b9813528b1 Add 'README.md'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-20 11:22:59 +10:00
293d90fb29 Update '.drone.yml'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 08:57:33 -04:00
9432f67ada Update '.drone.yml'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 08:57:15 -04:00
Pavel_Durov
2357ebe6bd add env to gitignore
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-08 19:13:28 +03:00
Pavel_Durov
82652e1b82 hello 2023-04-08 18:54:22 +03:00
Pavel_Duron
67145b9657 change davinci position on handlers time is not working
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-06 23:10:13 +10:00
Pavel_Duron
8d2ebff6f3 change davinci position on handlers
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-06 22:45:18 +10:00
Pavel_Duron
fb54c27514 change davinci position on handlers
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-06 22:19:54 +10:00
Pavel_Duron
688c61642b add graylog back
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-06 22:02:53 +10:00
Pavel_Duron
b2d58f4320 add davinci003
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-06 21:54:41 +10:00
root
e619022112 pogromirovai davai
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-23 01:54:17 -05:00
Pavel_Duron
b849bc26b2 add some dicks
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 23:02:32 +10:00
Pavel_Duron
8caf244923 change html tag
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 22:46:34 +10:00
Pavel_Duron
9c06b19d12 add 88 word to dickSinonims
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 22:38:51 +10:00
Pavel_Duron
23328de316 fix "
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 22:20:11 +10:00
Pavel_Duron
9c91fc5420 add sinonims for dickup test done
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 22:16:21 +10:00
Pavel_Duron
157833e41a add sinonims for dick and def random word from dict
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 19:19:23 +10:00
Pavel_Duron
adcf425183 add tests in gitignore
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 18:26:45 +10:00
Pavel_Duron
fdd802a3c1 add tests in gitignore
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 18:26:13 +10:00
Pavel_Duron
226a6effd0 add tests in gitignore 2022-12-16 18:15:17 +10:00
Pavel_Duron
cbc8ba4710 add tests in gitignore 2022-12-16 18:11:46 +10:00
Pavel_Duron
d0e1d92d26 add tests in gitignore 2022-12-16 18:07:55 +10:00
Pavel_Duron
f277613a9c some fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-15 22:51:18 +10:00
Pavel_Duron
bb6e5c5a9b add random choise in dick change random words
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-15 22:37:12 +10:00
Pavel_Duron
bcc5f68151 add random choise in dick change random words
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-15 22:30:53 +10:00
1b868e430b добавил новую функию рассылки для админа/изменил регистрацию хендлеров
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-13 17:51:47 +10:00
41c4b7c1c4 откатываем изменения
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-13 16:42:19 +10:00
e954ffcef5 Revert "Изменил(а) на 'bot.py'"
All checks were successful
continuous-integration/drone/push Build is passing
This reverts commit 92db050945.
2022-12-13 16:34:55 +10:00
751bda0681 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-11 20:48:14 +10:00
9b64b498ec revert 92db050945
All checks were successful
continuous-integration/drone/push Build is passing
revert Изменил(а) на 'bot.py'
2022-12-11 05:46:01 -05:00
771aaceaf3 Merge branch 'main' of http://git.vdk2ch.ru:3000/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-11 20:35:09 +10:00
21c41aebaa ыы бля
All checks were successful
continuous-integration/drone/push Build is passing
revert Изменил(а) на 'bot.py'
2022-12-11 05:34:55 -05:00
a26e02f9c9 Merge branch 'main' of http://git.vdk2ch.ru:3000/Pavel_Durov/python_bot 2022-12-11 20:26:39 +10:00
bd3ad3b459 revert 92db050945
All checks were successful
continuous-integration/drone/push Build is passing
revert Изменил(а) на 'bot.py'
2022-12-11 05:26:29 -05:00
8a9675cd0d change gitignore 2022-12-11 20:21:52 +10:00
230c03942d revert 92db050945
All checks were successful
continuous-integration/drone/push Build is passing
revert Изменил(а) на 'bot.py'
2022-12-11 05:19:10 -05:00
1215937856 revert 71b87a97ff
All checks were successful
continuous-integration/drone/push Build is passing
revert change imports
2022-12-11 01:21:07 -05:00
71b87a97ff change imports
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-11 16:16:33 +10:00
92db050945 Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:34:44 -05:00
8864e1ce38 Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:25:43 -05:00
f3e8454f58 Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:20:22 -05:00
bc7a2e367d Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:15:32 -05:00
d351c0eb72 Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:12:10 -05:00
2b23fa727f Изменил(а) на 'bot.py'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:08:11 -05:00
bfe6adea42 test logs
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 11:02:59 -05:00
7d28bb1093 Изменил(а) на 'requairements.txt'
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 10:59:01 -05:00
aefe9f6a09 add testfucn
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-09 19:20:50 +10:00
17bb367a3a fix tabilation
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-08 21:46:03 +10:00
18b1a1d7f8 rewrite code with try exc finaly
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-07 21:12:21 +10:00
4749ee885d fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:27:12 +10:00
82d5aa14ee fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:20:38 +10:00
ae13e5a8ff fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:19:47 +10:00
46fc25db39 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:14:53 +10:00
e02089442f fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:12:15 +10:00
820e53b678 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 22:11:21 +10:00
0316ef5e05 откатываем
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 21:22:05 +10:00
aae4506ffe testx
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:57:57 +10:00
456e37f07f testx
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:56:30 +10:00
4dff284b7f testx
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:55:55 +10:00
4b3c1f6f79 add alarm of job fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:37:40 +10:00
9cbe80b9ed add alarm of job fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:31:55 +10:00
78759e9a8a add alarm of job fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:27:55 +10:00
45d4aa8c9a add alarm of job
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 20:25:52 +10:00
502dca273d fix sesions
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 17:05:09 +10:00
8682555bcb add close_all_sesions
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-05 19:38:38 +10:00
0391206ee6 add close_all_sesions
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-05 19:25:06 +10:00
31abb3460a add structure to code
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-05 17:22:23 +10:00
c0e0b51dee fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 17:12:42 +10:00
e748ee3913 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 17:11:30 +10:00
cc4549d598 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 17:05:35 +10:00
0861e266c7 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 16:56:43 +10:00
5b668f1a6d fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 16:23:05 +10:00
89ccbf1810 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 16:21:45 +10:00
ec8c67a23b fix engine dispose
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-04 15:45:15 +10:00
5c7935e430 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-03 17:22:43 +10:00
3dd2b32086 fix session
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-03 16:45:15 +10:00
103f6222fa change chatid in any chats
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 23:13:45 +10:00
25760e4c60 change chatid in any chats
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 23:10:57 +10:00
2234545bda fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 23:03:02 +10:00
2abd634c4d fix
Some checks failed
continuous-integration/drone/push Build is failing
2022-12-02 22:59:11 +10:00
1a5cad9c0d fix localtop when users < 10
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 22:53:07 +10:00
3ac8fe1cb5 change icon in world top
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 18:45:24 +10:00
f1a147ead3 fix local top
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 18:37:45 +10:00
cc6627f664 impot sqdb succses
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 18:34:04 +10:00
73bf3af7a4 test impot sqdb
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-02 18:31:37 +10:00
50b7131b51 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:51:59 +10:00
cdc65332a7 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:50:55 +10:00
550406f699 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:48:51 +10:00
ff50eed8e7 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:46:34 +10:00
6f7989a5d6 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:43:36 +10:00
0d945cfb36 chang bigint add global and loacl top
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:26:11 +10:00
aed4df32f9 add new column chat id
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 19:12:16 +10:00
445d624732 replace emoj in dik minus
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 17:17:32 +10:00
82c27c90a1 replace emoj in dik minus
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 17:16:02 +10:00
d7813e2b42 fix time null day
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-01 17:13:01 +10:00
e6d7d5f53f add emoj in top10 and replace emoj in dick minus(some fix)
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-26 00:34:48 +10:00
3662e02958 add emoj in top10 and replace emoj in dick minus
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-26 00:32:24 +10:00
7a02dad330 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:40:25 +10:00
37a203a055 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:38:48 +10:00
8b24b3e34f fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:36:17 +10:00
8b122a53d6 fix
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:33:38 +10:00
8bce6dc065 test topdic2k
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:33:05 +10:00
b171f76c63 Merge branch 'main' of http://git.vdk2ch.ru:3000/Pavel_Durov/python_bot
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-24 18:32:38 +10:00
5610549a7f test topdic2k 2022-11-24 18:31:18 +10:00
29 changed files with 892 additions and 205 deletions

View File

@@ -7,6 +7,10 @@ platform:
os: linux
arch: amd64
node:
gay: nigger
#clone:
# убрано так как сейчас не тестим ничего предварительно а сразу тянем в директорию
#disable: true
@@ -15,11 +19,23 @@ steps:
- name: test it first
commands:
- /usr/bin/python3 -m py_compile bot.py
- /usr/bin/python3 pipisa_functions/pipisa_time.py
- name: pull into the folduh
commands:
- cd /usr/share/$DRONE_REPO_NAME
- git pull
- chown -R jack:jack .
- git pull
#- chown -R jack:jack .
when:
branch:
- main
environment:
ARANGO_PASSWORD:
from_secret: arango-pwd
ARANGO_USERNAME:
from_secret: arango-usr
- name: restart systemd unit
commands:
- systemctl restart jack_bot
when:
branch:
- main

6
.gitignore vendored
View File

@@ -1,4 +1,8 @@
__pycache__
testDB.py
TIME.py
.vscode
.vscode
tests
qeqeqe
env
handlers/userdata.json

13
README.md Normal file
View File

@@ -0,0 +1,13 @@
Пробуем проверять что-либо.
```mermaid
journey
title Пиписа
section Наш Чат
Оче больше пипис: 5: ГЕГЕМОН
Обычно большепенис: 3: Догоняющие
Скромный дик: 1: Отставшие
section Не наш чат
Не запустил: -1: Отставшие
Не крутил: 1: Отставшие
```

0
__init__.py Normal file
View File

190
bot.py
View File

@@ -1,161 +1,49 @@
from cgitb import text
import datetime
import logging
from random import randint
from sqlalchemy import create_engine, MetaData, Table, Integer, String, \
Column, DateTime, ForeignKey, Numeric
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton
from sqdb import user
from aiogram import executor, Bot, Dispatcher
from create_bot import dp
import handlers
import json, logging
from global_conf import CONFIG
from prometheus_client import start_http_server
def remake_field_generator(d, field='text'):
if isinstance(d, list):
for k2 in d:
for id_val in remake_field_generator(k2):
yield id_val
elif isinstance(d, dict):
for k, v in d.items():
if k == field:
d[k] = '<blank!>'
yield v
elif isinstance(v, list):
for k2 in v:
for id_val in remake_field_generator(k2):
yield id_val
elif isinstance(v, dict):
for id_val in remake_field_generator(v):
yield id_val
API_TOKEN = '5724991559:AAEuLvpLsgP6LHRGMSyFtQLlR5qPQUO4b_w'
def filter_grammar_messages(record):
if record.args and (not None in record.args):
j = json.loads(record.args[2])
for _ in remake_field_generator(j):
pass
record.args = (record.args[0], record.args[1], json.dumps(j))
return True
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("aiogram").addFilter(filter_grammar_messages)
bot = Bot(token=API_TOKEN, parse_mode="HTML")
dp = Dispatcher(bot)
@dp.message_handler(commands=["time"])
async def send_time(message: types.Message):
new_year = datetime.datetime(2022, 12, 31) #дата нового года
ct = datetime.datetime.now() #датавремя
cd = datetime.datetime.now().strftime("%d/%m/%Y") #дата (д,м,г)
ct1 = ct+datetime.timedelta(hours=15) # +14 часов от сервера
ct2 = ct1.strftime('%H:%M') # форматирует датувремя просто во время(ч,м)
raznitsa = (new_year - ct).days #отнимает от нг текущее время и получаем разницу в днях
days = ['день', 'дня', 'дней']
if raznitsa % 10 == 1 and raznitsa % 100 != 11:
p = 0
elif 2 <= raznitsa % 10 <= 4 and (raznitsa % 100 < 10 or raznitsa % 100 >= 20):
p = 1
else:
p = 2
num=(str(raznitsa) + ' ' + days[p])
await message.reply(f'Сегодня {cd} \nВремя: {ct2} \nДо Нового Года осталось {num}')
#####______________________ПИПИСА БОТ БУДЕТ ЗДЕСЬ__________________________________
@dp.message_handler(commands=["dick"])
async def ident(message: types.Message):
# рандомайзер
numb = randint(-7,10)
global size_change, dick_plus, dick_minus
dick_plus = f'<b>вырос</b> 🚀 на <b>{numb}</b> см!'
dick_minus = f'<b>уменьшился</b> на <b>{abs(numb)}</b> см!😔'
if numb > 0:
size_change = dick_plus
else: size_change = dick_minus
####
# работа с таблицей
engine = create_engine('postgresql+psycopg2://postgres:postgres@postgres.vdk2ch.ru:5432/jack_bot', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
if session.query(user).filter(user.user_id == message.from_user.id).first():
b = session.query(user).filter(user.user_id == message.from_user.id).first()
now_time = datetime.datetime.now()
last_time = b.datetimes
diff = now_time.day - last_time.day
if diff <= 0:
await bot.send_message(message.chat.id, f'@{message.from_user.username},🚫 вы уже крутили пипису, ее размер <b>{b.dick_size}</b> см! ')
session.close_all()
print(diff)
print(type(diff))
else:
a = session.query(user).filter(user.user_id == message.from_user.id).first() # запрос на поиск в таблице
a.dick_size = (a.dick_size + numb)
a.datetimes = datetime.datetime.now()
session.commit() #обновляет запись
await bot.send_message(message.chat.id, f'@{message.from_user.username}, ваш писюн {size_change}\n\
Теперь он равен <b>{a.dick_size}</b> см! ')
session.close_all()
else:
int_table = user(user_id = message.from_user.id, user_fullname = message.from_user.full_name, dick_size = numb, datetimes = datetime.datetime.now())
session.add(int_table)
session.commit()
await bot.send_message(message.chat.id, f'@{message.from_user.username}, ваш писюн {size_change}\n\
Теперь он равен <b>{int_table.dick_size}</b> см!')
session.close_all()
# int_table = user(user_id = message.from_user.id, user_fullname = message.from_user.full_name, dick_size = numb) #импортирую юзер из sqdb
# session.add(int_table)
# session.commit()
#обновление
# dick_update = session.query(user).filter_by(user.user_id = message.from_user.id).update({'dick_size': user.dick_size + numb})
# session.add(dick_update)
# session.commit()
#last_size = session.query(user).filter_by(user_id = message.from_user.id).select_from(dick_size = 'dick_size: ').one()
#####______________________ПИПИСА БОТ БУДЕТ ЗДЕСЬ__________________________________
@dp.message_handler(commands=["topdick"])
async def send_time(message: types.Message):
engine = create_engine('postgresql+psycopg2://postgres:postgres@postgres.vdk2ch.ru:5432/jack_bot', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
top = session.query(user.user_fullname, user.dick_size).order_by(user.dick_size.desc()).limit(10).all()
red = '\n'.join(map(str, top))
await bot.send_message(message.chat.id, f'{red}')
# {top[0]}\n\
# {top[1]}\n\
# {top[2]}\n\
# {top[3]}\n\
# {top[4]}\n\
# {top[5]}\n\
# {top[6]}\n\
# {top[7]}\n\
# {top[8]}\n\
# {top[9]}ff')
session.close_all()
@dp.message_handler(commands=['start'])
async def start_func(message: types.Message):
# user_id = message.from_user.id
# user_full_name = message.from_user.full_name
# logging.INFO(f'{user_id=} {user_full_name=}', {time.asctime()})
await message.reply('похуй')
@dp.message_handler(commands=['photo'])
async def send_image(message: types.Message):
await bot.send_photo(message.chat.id, photo='https://memepedia.ru/wp-content/uploads/2018/08/ya-pidoras.jpg', reply_to_message_id=message.message_id)
@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def send_faggot(message: types.Message):
print(message.text)
if message.text == 'хто я':
await bot.send_photo(message.chat.id, photo='https://www.meme-arsenal.com/memes/ecebd2339c7eab40e09874bd86a38a09.jpg')
#хуй
# pipisa.register_handlers_pipisa(dp)
# time_new_year.register_handlers_time(dp)
# sendalarm.register_handlers_test(dp)
# start_help.register_handlers_StartHelp(dp)
if __name__ == '__main__':
#print(CONFIG)
start_http_server(1337)
logging.info('Бот в строю.')
executor.start_polling(dp, skip_updates=True)
logging.info('Всем пока.')

19
config.yaml Normal file
View File

@@ -0,0 +1,19 @@
---
databaso:
host: 'http://arango.guaranteedstruggle.host:8529'
#user: root
#pass: stolendick527
base: pipisa
collection: dicks
posts_removal_collection: posts_removal
telegram_token: 6991523312:AAFpxPlWHfnNq2dVXM_v1GuHcrbNgWdSWBM
telegram_admins_ids:
- 317051301 # hogweed1
- 226765676 # blackjack
- 94830892 # viktorRMI
- 132002803
openai:
token: 5947963644:AAF_GKgMmU5ovqMpc1KXIpcf4aN0JMyKPqc
api_key: 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 ## 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

6
create_bot.py Normal file
View File

@@ -0,0 +1,6 @@
from aiogram import Bot, Dispatcher
from global_conf import CONFIG
bot = Bot(token=CONFIG['telegram_token'], parse_mode="HTML")
dp = Dispatcher(bot)

0
db_logic/__init__.py Normal file
View File

40
db_logic/collections.py Normal file
View File

@@ -0,0 +1,40 @@
from global_conf import CONFIG
#### https://docs.python-arango.com/en/main/
from arango import ArangoClient
import logging
import os
def get_dicks_collection():
try:
arango_client = ArangoClient(hosts=CONFIG['databaso']['host'] )
pipisa_db = arango_client.db(
CONFIG['databaso']['base'],
username=os.environ['ARANGO_USR'],
password=os.environ['ARANGO_PWD'],
#username=CONFIG['databaso']['user'],
#password=CONFIG['databaso']['pass']
)
dicks_collection = pipisa_db.collection(CONFIG['databaso']['collection'])
return dicks_collection
except Exception as e:
logging.error('ошибка DB при взятии коллекции пипис')
logging.error(e)
def get_posts_removal_collection():
try:
arango_client = ArangoClient(hosts=CONFIG['databaso']['host'])
pipisa_db = arango_client.db(
CONFIG['databaso']['base'],
username=os.environ['ARANGO_USR'],
password=os.environ['ARANGO_PWD'],
#username=CONFIG['databaso']['user'],
#password=CONFIG['databaso']['pass']
)
posts_removal_collection = pipisa_db.collection(CONFIG['databaso']['posts_removal_collection'])
return posts_removal_collection
except Exception as e:
logging.error('ошибка DB при взятии коллекции постов-на-удаление')
logging.error(e)

70
db_logic/postcleaner.py Normal file
View File

@@ -0,0 +1,70 @@
from db_logic import collections
import datetime, logging
def append_post_to_cleaning_sequence(message, type=None):
try:
novenkiy = {
'msg_id': message.message_id,
'chat_id': message.chat.id,
'type': type,
'datetimes': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
metadata = collections.get_posts_removal_collection().insert(novenkiy, overwrite_mode='update')
logging.debug('Успешно добавлен пост на удаление')
except Exception as e2:
logging.error('ошибка DB :: добавление нового поста на удаление')
logging.error(e2)
def get_posts_to_be_removed(chat_id, type=None, max_id=None):
# собираем
try:
#posts = [p for p in collections.get_posts_removal_collection().all( ) ]
if type:
posts = [p for p in collections.get_posts_removal_collection().find({'chat_id': chat_id, 'type': type}, skip=0, limit=1100) ]
else:
posts = [p for p in collections.get_posts_removal_collection().find({'chat_id': chat_id}, skip=0, limit=1100) ]
posts_ret = [ p for p in posts ]
# # for p in posts:
# # last_time = datetime.datetime.strptime(p['datetimes'], '%Y-%m-%d %H:%M:%S')
# # timediff = (datetime.datetime.now() - last_time).total_seconds()
# # if timediff > 60:
# # posts_ret.append(p)
if max_id:
posts_ret = [ p for p in posts_ret if p['msg_id'] != max_id]
else:
posts_ret = [ p for p in posts_ret if p['msg_id'] != max([pp['msg_id'] for pp in posts_ret])]
#### TODO удалять все предыдущие без учёта времени
return posts_ret
except Exception as e:
logging.error('ошибка DB :: получение постов на удаление')
logging.error(e)
def del_post(msg_id, chat_id):
# удаляем из базы
try:
candidate_cursor = collections.get_posts_removal_collection().find(
{
'msg_id': msg_id,
'chat_id': chat_id,
},
skip = 0,
limit = 1488
)
if candidate_cursor.count() > 0:
pp = candidate_cursor.pop()
else:
pp = None
collections.get_posts_removal_collection().delete(pp)
except Exception as e:
logging.error('ошибка DB :: удаление поста на удаление')
logging.error(e)

63
db_logic/tops.py Normal file
View File

@@ -0,0 +1,63 @@
from global_conf import CONFIG
from db_logic import collections
import logging
def get_tops(top_ = False, glob_ = False, chat_id = None):
if top_:
try:
dicks = [d for d in collections.get_dicks_collection().find({'chat_id': chat_id}, skip=0, limit=1100)]
except Exception as e:
logging.error('ошибка DB в /topdick')
logging.error(e)
elif glob_:
try:
dicks = [d for d in collections.get_dicks_collection().all( ) if d['user_id'] != d['chat_id']]
except Exception as e:
logging.error('ошибка DB в /globaldick')
logging.error(e)
else:
logging.error('вызывают хз что!')
top_dicks = sorted(dicks, key=lambda dick: dick['dick_size'], reverse=True)
top_dicks = top_dicks[:(min(len(top_dicks), 10))]
dickos = ''
emo = ['🏆','🚀','🍆','🍌','🐍','🐎','🌭','🌶','👌','💩']
if len(top_dicks) > 0:
for i in range(len(top_dicks)):
dickos += f' {emo[i]} {i+1}. {top_dicks[i]["user_fullname"]}: {top_dicks[i]["dick_size"]}см\n'
i += 1
return dickos
def get_antitops(top_ = False, glob_ = False, chat_id = None):
dicks = []
if top_:
try:
dicks = [d for d in collections.get_dicks_collection().find({'chat_id': chat_id}, skip=0, limit=1100)]
except Exception as e:
logging.error('ошибка DB в /topdick')
logging.error(e)
elif glob_:
try:
dicks = [d for d in collections.get_dicks_collection().all() if d['user_id'] != d['chat_id']]
except Exception as e:
logging.error('ошибка DB в /globaldick')
logging.error(e)
else:
logging.error('вызывают хз что!')
antitop_dicks = sorted(dicks, key=lambda dick: dick['dick_size'], reverse=False)
antitop_dicks = antitop_dicks[:( min(len(antitop_dicks), 10) )]
dickos = ''
emo = ['💩', '😞', '🤕', '😣', '🙁', '😐', '😑', '😶', '😒', '😕']
if len(antitop_dicks) > 0:
for i in range(len(antitop_dicks)):
dickos += f' {emo[i]} {i+1}. {antitop_dicks[i]["user_fullname"]}: {antitop_dicks[i]["dick_size"]}см\n'
i += 1
return dickos

85
db_logic/user_stuff.py Normal file
View File

@@ -0,0 +1,85 @@
from db_logic import collections
from handlers.metrics import metric_wrap
import datetime, logging
def store_new_user(message, result ):
try:
novenkiy = {
'user_id': message.from_user.id,
'user_fullname': message.from_user.full_name,
'dick_size': abs(result),
'datetimes': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'attempts': 1,
'chat_id': message.chat.id
}
metadata = collections.get_dicks_collection().insert(novenkiy, overwrite_mode='update')
metric_wrap(message.chat.id, message.from_user.full_name, abs(result), 1)
logging.debug(f'Успешно добавлен нового пользователь @{message.from_user.username}')
except Exception as e2:
logging.error(f'ошибка DB в /dick :: добавление нового пользователя @{message.from_user.username}')
logging.error(e2)
def update_attempts(message, user ):
try:
metadata = collections.get_dicks_collection().insert(
{
'_key': user['_key'], ### этот нужен чтобы апдейт прилетал тому же юзеру
'user_id': user['user_id'] ,
'user_fullname': message.from_user.full_name,
'dick_size': user['dick_size'] ,
'datetimes': user['datetimes'] ,
'attempts': user['attempts'] + 1,
'chat_id': message.chat.id
},
overwrite_mode='update'
)
metric_wrap(message.chat.id, message.from_user.full_name, user['dick_size'], user['attempts'] + 1)
logging.debug(f'Успешно апдейтнули попытку крутить пипису @{message.from_user.username}')
except Exception as e2:
logging.error(f'ошибка DB в /dick :: обновление попытки крутить пипису @{message.from_user.username}')
logging.error(e2)
def update_dick_size(message, user, updatedDick ):
try:
metadata = collections.get_dicks_collection().insert(
{
'_key': user['_key'], ### этот нужен чтобы апдейт прилетал тому же юзеру
'user_id': user['user_id'],
'user_fullname': message.from_user.full_name,
'dick_size': updatedDick,
'datetimes': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'attempts': user['attempts'] + 1,
'chat_id': message.chat.id
},
overwrite_mode='update'
)
metric_wrap(message.chat.id, message.from_user.full_name, updatedDick, user['attempts'] + 1)
logging.info(f'Успешно апдейтнули пипису @{message.from_user.username}')
except Exception as e2:
logging.error(f'ошибка DB в /dick :: обновление пиписы @{message.from_user.username}')
logging.error(e2)
def get_user(message):
try:
#### Чекнуть есть ли юзер в базе
candidate_cursor = collections.get_dicks_collection().find(
{
'user_id': message.from_user.id,
'chat_id': message.chat.id
},
skip = 0,
limit = 1488
)
if candidate_cursor.count() > 0:
user = candidate_cursor.pop()
else:
user = None
return user
except Exception as e:
logging.error('ошибка DB в /dick :: поиск юзера')
logging.error(e)

11
dicktxt/ForReadDict.py Normal file
View File

@@ -0,0 +1,11 @@
import random
def RandomDick():
# Забирает рандомный синоним к слову хуй из dick_sinonims.txt
# у линуха и винды не забывай про разные \/
# кёгда указываешь путь
with open('dicktxt/dick_sinonims.txt', 'r', encoding='utf-8') as file:
words = file.readlines()
return random.choice(words).strip()

20
dicktxt/WordsChange.py Normal file
View File

@@ -0,0 +1,20 @@
import yaml
import random
def ChangeWord(result): бiрає будь-якое слiво для змєнєння розмiра пiпiси
with open("dicktxt/dick_changes.yaml", 'r', encoding='utf-8') as f:
words = yaml.load(f, Loader=yaml.Loader)
dick_inc = [ f'<b>{w}</b>' for w in words['increment'] ]
dick_static = [ f'<b>{w}</b>' for w in words['nothing'] ]
dick_decr = [ f'<b>{w}</b>' for w in words['decrement'] ]
if result > 0:
size_change = random.choice(dick_inc) + '🚀'
elif result == 0:
size_change = random.choice(dick_static) + '🤨'
else:
size_change = random.choice(dick_decr) + ''
return size_change

2
dicktxt/__init__.py Normal file
View File

@@ -0,0 +1,2 @@
from . import ForReadDict

30
dicktxt/dick_changes.yaml Normal file
View File

@@ -0,0 +1,30 @@
---
increment:
- вырос
- подрос
- привстал
- увеличился
- преисполнился
- приподнялся
- изменил размер
- облагородился
- чрезвычайно преуспел
decrement:
- неудачно потусил на сходке
- уменьшился
- откусила злая гадюка
- продали евреи, он стал дешевле
- схуднул
- отрицательно вырос
- словил низкие вибрации
- повредился после простуды
- стал жертвой репрессий
- был подло использован
nothing:
- продвинулся
- наноуменьшился
- познал стабильность
- зафиксировал прибыль
- подумал о судьбах Китая
- прогулялся по лесу
- самоутвердился

96
dicktxt/dick_sinonims.txt Normal file
View File

@@ -0,0 +1,96 @@
кожаный бабах
пистон
дуршлаг
елдак
шлямбур
шмайсер
хохотунчик
головастик
пистон
мундштук
мухомор
головач
красненький
чупа-чупс
щекотунчик
питательный
тюбик
джойстик
хоббит
крючок
ласкун
красавец
хозяин
хрящ
чудильник
царь пижамы
целколом
щуп
эклер
долбильник
народник
духопер
ежик малиновый
жрец любви
жизненный конус
злой одноглазый пиратик
главтрах
веселый парнишка
вставень висюлек
волосатый чикатило
агрессор
анакондаз
антихрист
Анютин глазок
бензонасос
блудень
бог плодородия
божий леденец
волосатый змiй
витамин "Х"
вспотевший объектив
гендерный габитус
двадцать первый палец
калдыбобер
боброчес
кукурузик
красноголовый воин
красный богатырь
любовный мускул
леденец
обелиск
окурок
органайзер
отбойный
молоток
посох королей
пламенный алмаз мудрости
монофалический потенциометр
розовый кадилак
сексофон
трахальник
торчильник
факало
кочанчик
писюн
губашлеп
потенциальный кредитор
кок
чилим
пажилой кабан
малой
начальник унитаза
бесперебойник
корнишон
банановый смузи
кизляк
проныра
пенис детров
бенис
кокошник
членикс
маленький жиголо
венерический суккуб
боец невидимого фронта
сморчок
джечник

11
global_conf.py Normal file
View File

@@ -0,0 +1,11 @@
import yaml
with open("config.yaml", 'r') as f:
CONFIG = yaml.load(f, Loader=yaml.Loader)
METRICS_INITIALIZED = False
pipisa_length_metric = None
user_attempt_metric = None
user_last_attempt_metric = None

4
handlers/__init__.py Normal file
View File

@@ -0,0 +1,4 @@
from handlers import pipisa
from handlers import start_help
from handlers import time_new_year

57
handlers/davinci.py Normal file
View File

@@ -0,0 +1,57 @@
from openai import AsyncOpenAI
from aiogram import types
from create_bot import dp, bot
import logging
from global_conf import CONFIG
admins = CONFIG['telegram_admins_ids']
ban_comands = ['/dick','/topdick']
# Image_promt =['тупица сгенерируй','тупица сгенерируй картинку',\
# 'тупица отправь картинку', 'тупица отправь картинку']
client = AsyncOpenAI(api_key="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")
# @dp.message_handler(commands=['image'])
# async def send_image(message: types.Message):
# if message.from_user.id in admins and message.chat.type == 'private':
# try:
# description = message.text.replace('/image', '').strip()
# if not description:
# await message.reply('Ты даун, описание запроса напиши после пробела')
# return
# except Exception as e:
# logging.error(f'Error in send_image: {e}')
# try:
# response = openai.Image.create(
# prompt=message.text,
# n=1,
# size="1024x1024",
# response_format="url",
# )
# image_url = response['data'][0]['url']
# await message.answer('Генерирую изображение...')
# await message.reply_photo(image_url)
# except Exception as e:
# await message.reply('у меня не получилось')
async def gpt_text(req):
completion = await client.chat.completions.create(
messages=[
{
"role": "user",
"content": req,
}
],
model="gpt-4",
)
return completion
@dp.message_handler()
async def send(message: types.Message):
if message.from_user.id in admins and message.chat.type == 'private':
response = await gpt_text(message.text)
await message.answer(response.choices[0].message.content)

30
handlers/metrics.py Normal file
View File

@@ -0,0 +1,30 @@
import json
import time
from prometheus_client import Gauge, Info
from global_conf import pipisa_length_metric, user_attempt_metric, user_last_attempt_metric
class user_info_struct:
user_id: str
user_fullname: str
dick_size: int
datetimes: str
attemptsCount: int
chat_id: int
def metric_wrap(chatID:int, userName: str, length: int, attemptsCount: int):
"""Pass here chat ID, username, pipisa length and attempts count to wrap them into metric."""
global pipisa_length_metric
if not pipisa_length_metric:
pipisa_length_metric = Gauge('user_length_total', 'Pipisa length', labelnames=['ChatID', 'Username'])
global user_attempt_metric
if not user_attempt_metric:
user_attempt_metric = Gauge('user_attempts_total', 'Attempts count', labelnames=['ChatID', 'Username'])
global user_last_attempt_metric
if not user_last_attempt_metric:
user_last_attempt_metric = Gauge('user_last_attempt_time', 'Last attempt time', labelnames=['ChatID', 'Username'])
pipisa_length_metric.labels(chatID, userName).set(length)
user_attempt_metric.labels(chatID, userName).set(attemptsCount)
user_last_attempt_metric.labels(chatID, userName).set(time.time_ns())

132
handlers/pipisa.py Normal file
View File

@@ -0,0 +1,132 @@
from aiogram import types
from create_bot import bot, dp
import random
from random import randint
import datetime, logging
from dicktxt import ForReadDict, WordsChange
from pipisa_functions import pipisa_time
from global_conf import CONFIG
from db_logic import tops, user_stuff, postcleaner
admins = CONFIG['telegram_admins_ids']
@dp.message_handler(commands=["dick"])
async def up_dick(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private':
postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__DICK')
await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__DICK', max_id=message.message_id)
#### TODO уплатить нолог с 100 см для самого нищего
# рандомайзер
result = randint(-9,10)
#### Чекнуть есть ли юзер в базе
user = user_stuff.get_user(message)
if user:
## Если есть то нарастить и отправить сообщение
if pipisa_time.rolltime(check_datetime=user['datetimes'], curr_time=datetime.datetime.now()):
# пришло время крутить!!
updatedDick = user["dick_size"] + result
user_stuff.update_dick_size(message, user, updatedDick)
randomdickword = ForReadDict.RandomDick()
change_phrase = WordsChange.ChangeWord(result)
await bot.send_message( message.chat.id,
f'@{message.from_user.username}, ваш <em>{randomdickword}</em> {change_phrase} на <b>{abs(result)}</b> см!\nТеперь он равен <b>{updatedDick}</b> см! '
)
else:
mmm = await bot.send_message( message.chat.id,
f'@{message.from_user.username}, 🚫 вы уже крутили пипису, её размер <b>{user["dick_size"]}</b> см! '
)
user_stuff.update_attempts( message, user)
postcleaner.append_post_to_cleaning_sequence(message=mmm, type='ALREADY_ROLLED')
await clean_posts(chat_id=mmm.chat.id, type='ALREADY_ROLLED', max_id=mmm.message_id)
else:
## если нету, то создать
user_stuff.store_new_user(message, result)
await bot.send_message( message.chat.id,
f'@{message.from_user.username}, Добро пожаловать в игру! Ваш писюн показал головку 🚀\nна <b>{abs(result)}</b> см!\nТеперь он равен <b>{abs(result)}</b> см!'
)
else:
await message.reply('Растить елду можно только в общих чатах!')
@dp.message_handler(commands = ['topdick', 'globaldick'])
async def send_topchat(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private':
top_ = message['text'].startswith('/topdick')
glob_ = message['text'].startswith('/globaldick')
if top_:
dickos = tops.get_tops( top_ = True, chat_id=message.chat.id )
postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__TOPDICK')
await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__TOPDICK', max_id=message.message_id)
elif glob_:
dickos = tops.get_tops( glob_ = True )
postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__GLOBALDICK')
await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__GLOBALDICK', max_id=message.message_id)
else:
logging.error('вызывают хз что!')
if not dickos:
await bot.send_message(message.chat.id, '🍆 Никто ничего не нарастил! 🍌')
else:
if top_:
await bot.send_message(message.chat.id, '🏆Топ 10 бубылд чата🏆\n\n' + dickos)
elif glob_:
await bot.send_message(message.chat.id, '🏆Топ 10 пипис в мире🏆\n\n' + dickos)
else:
await message.reply('Работает только в общих чатах!\n'\
'Вы можете посмотреть топ по миру /globaldick')
@dp.message_handler(commands = ['antitopdick', 'antiglobaldick'])
async def send_antitopchat(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private':
antitop_ = message['text'].startswith('/antitopdick')
antiglob_ = message['text'].startswith('/antiglobaldick')
if antitop_:
dickos = tops.get_antitops(top_=True, chat_id=message.chat.id)
postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__ANTITOPDICK')
await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__ANTITOPDICK', max_id=message.message_id)
elif antiglob_:
dickos = tops.get_antitops(glob_=True)
postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__ANTIGLOBALDICK')
await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__ANTIGLOBALDICK', max_id=message.message_id)
else:
logging.error('вызывают хз что!')
if not dickos:
await bot.send_message(message.chat.id, '🍌 У всех пользователей бубылда растёт! 🍆')
else:
if antitop_:
await bot.send_message(message.chat.id, '🚫Антитоп 10 вагись чата🚫\n\n' + dickos)
elif antiglob_:
await bot.send_message(message.chat.id, '🚫Антитоп 10 вагись в мире🚫\n\n' + dickos)
else:
await message.reply('Работает только в общих чатах!\n'\
'Вы можете посмотреть антитоп по миру /antiglobaldick')
async def clean_posts(chat_id, type=None, max_id=None):
psts = postcleaner.get_posts_to_be_removed(chat_id, type, max_id)
for p in psts:
postcleaner.del_post(chat_id=p['chat_id'], msg_id=p['msg_id'])
#### TODO проверить админит ли бот
try:
await bot.delete_message(chat_id=p['chat_id'], message_id=p['msg_id'])
except Exception as e:
logging.error('ошибка удаления поста-на-удаление')
logging.error(e)

18
handlers/start_help.py Normal file
View File

@@ -0,0 +1,18 @@
from aiogram import types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from create_bot import dp, bot
@dp.message_handler(commands=['start'])
async def start_func(message: types.Message):
if message.chat.type == 'private':
lkb = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text = 'Добавить в группу', callback_data='add_2_group'))
await message.answer(f'<b>Добро пожаловать, {message.from_user.full_name}!</b>\n'
'Это бот, который растит члены. Чтобы начать, добавь бота в чат'\
, reply_markup=lkb
)
# TODO добавить кнопку, по которой смогут добавлять юзера в чат
@dp.callback_query_handler(text = 'add_2_group')
async def addgroup(callback: types.CallbackQuery):
await callback.answer('жмав')

26
handlers/time_new_year.py Normal file
View File

@@ -0,0 +1,26 @@
from aiogram import types, Dispatcher
from create_bot import dp, bot
import datetime
@dp.message_handler(commands=["time"])
async def send_time(message: types.Message):
new_year = datetime.datetime(datetime.datetime.now().year, 12, 31) #дата нового года
ct = datetime.datetime.now() #датавремя
cd = datetime.datetime.now().strftime("%d/%m/%Y") #дата (д,м,г)
ct1 = ct # zoichem??? +datetime.timedelta(hours=15) # +14 часов от сервера
ct2 = ct1.strftime('%H:%M') # форматирует датувремя просто во время(ч,м)
raznitsa = (new_year - ct).days #отнимает от нг текущее время и получаем разницу в днях
days = ['день', 'дня', 'дней']
if raznitsa % 10 == 1 and raznitsa % 100 != 11:
p = 0
elif 2 <= raznitsa % 10 <= 4 and (raznitsa % 100 < 10 or raznitsa % 100 >= 20):
p = 1
else:
p = 2
num=(str(raznitsa) + ' ' + days[p])
await message.reply(f'Сегодня {cd} \nВремя: {ct2} \nДо Нового Года осталось {num}')
def register_handlers_time(dp: Dispatcher):
dp.register_message_handler(send_time)

15
jack_bot.service Normal file
View File

@@ -0,0 +1,15 @@
# пример того что лежит на хосте
[Unit]
Description=pipisa-bot
After=network.target
[Service]
User=jack
Type=simple
Restart=always
WorkingDirectory=/usr/share/python_bot
ExecStart=/usr/bin/python3 /usr/share/python_bot/bot.py
ExecStart=/usr/bin/python3 /usr/share/python_bot/bot.py
[Install]
WantedBy=multi-user.target#

View File

@@ -0,0 +1 @@
from . import pipisa_time

View File

@@ -0,0 +1,77 @@
import unittest
import datetime
def rolltime(check_datetime , curr_time=datetime.datetime.now()):
last_time = datetime.datetime.strptime(check_datetime, '%Y-%m-%d %H:%M:%S')
time_to_grow = curr_time.replace(hour=10, minute=0, second=0, microsecond=0) #+ datetime.timedelta(days=0)
timediff = (time_to_grow - last_time).total_seconds()
# print()
# print(f'\tlast_time : {last_time}')
# print(f'\ttime_to_grow : {time_to_grow}')
# print(f'\tcurr_time : {curr_time.strftime("%Y-%m-%d %H:%M:%S")}')
# print(f'\t\tsecs diff : {timediff}')
if timediff > 86400 or (curr_time > time_to_grow and last_time < time_to_grow):
return True
else:
return False
class TestPipisa(unittest.TestCase):
def test_very_long_ago(self):
self.assertEqual(rolltime('2021-10-11 23:44:00'), True, "Пиписа прокручена очень давно. Очевидный прокрут")
def test_just_after(self):
self.assertEqual(rolltime(
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S')
), False, "Попытка крутить когда старый прокрут был через 1 минуту после сегодняшнего обновления роллов. Фейл.")
def test_yesterdayroll(self):
self.assertEqual(
rolltime(
(
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0) - datetime.timedelta(days=1)
).strftime('%Y-%m-%d %H:%M:%S'),
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0)
), True, "Крутилась вчера через минуту после обновления роллов. Должно пропускать ")
def test_hour_before_roll(self):
self.assertEqual(
rolltime(
(
datetime.datetime.now().replace(hour=10, minute=1, second=1, microsecond=0) - datetime.timedelta(hours=1)
).strftime('%Y-%m-%d %H:%M:%S'),
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0)
), True, "Крутилась последний раз за час до прокрута. Надо разрешать заново!")
def test_after_midnight(self):
self.assertEqual(
rolltime(
(
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0) - datetime.timedelta(hours=14)
).strftime('%Y-%m-%d %H:%M:%S'),
datetime.datetime.now().replace(hour=0, minute=11, second=8, microsecond=0)
), False, "Где-то ночью прокручивается повторно. Фейл.")
def test_before_midnight(self):
self.assertEqual(
rolltime(
(
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0) - datetime.timedelta(hours=15)
).strftime('%Y-%m-%d %H:%M:%S'),
datetime.datetime.now().replace(hour=0, minute=11, second=8, microsecond=0) - datetime.timedelta(hours=15)
), False, "Где-то ночью прокручивается повторно. Фейл.")
def test_somewhere_after(self):
self.assertEqual(
rolltime(
(
datetime.datetime.now().replace(hour=10, minute=18, second=0, microsecond=0)
).strftime('%Y-%m-%d %H:%M:%S'),
datetime.datetime.now().replace(hour=10, minute=19, second=0, microsecond=0)
), False, "Сегодня уже открутили а хотят ещё. Фейл.")
if __name__ == "__main__":
unittest.main(verbosity=2)

View File

@@ -1,3 +1,4 @@
aiogram
sqdb
sqlalchemy
aiogram==2.15
python-arango
pyyaml
prometheus-client

48
sqdb.py
View File

@@ -1,48 +0,0 @@
from sqlalchemy import create_engine, MetaData, Table, Integer, String, \
Column, DateTime, ForeignKey, Numeric
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import select, update
engine = create_engine('postgresql+psycopg2://postgres:postgres@postgres.vdk2ch.ru:5432/jack_bot', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class user(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
user_id = Column(Integer)
user_fullname = Column(String)
dick_size = (Column(Integer))
datetimes = (Column(DateTime))
session.close()
#Base.metadata.create_all(engine)
# int_table = user(user_id = 12345678, user_fullname = 'test', dick_size = 10) #импортирую юзер из sqdb
# session.add(int_table)
# session.commit()
# select user_id, name from employees limit 10
# def adding():
# session.add()
# session.commit()