1 Commits

Author SHA1 Message Date
3ac8a2dd64 prepared for the student 2026-03-03 20:58:22 +05:00
200 changed files with 621 additions and 6233 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "kodorvan/neurobot",
"name": "kodorvan/edabil",
"description": "",
"homepage": "https://git.svoboda.works/kodorvan/neurobot",
"homepage": "https://git.svoboda.works/kodorvan/edabil",
"type": "game",
"keywords": [
"minimal",
@@ -18,8 +18,8 @@
}
],
"support": {
"wiki": "https://git.svoboda.works/kodorvan/neurobot/wiki",
"issues": "https://git.svoboda.works/kodorvan/neurobot/issues"
"wiki": "https://git.svoboda.works/kodorvan/edabil/wiki",
"issues": "https://git.svoboda.works/kodorvan/edabil/issues"
},
"require": {
"php": "^8.5",
@@ -49,12 +49,12 @@
},
"autoload": {
"psr-4": {
"kodorvan\\neurobot\\": "kodorvan/neurobot/system"
"kodorvan\\edabil\\": "kodorvan/edabil/system"
}
},
"autoload-dev": {
"psr-4": {
"kodorvan\\neurobot\\tests\\": "kodorvan/neurobot/tests"
"kodorvan\\edabil\\tests\\": "kodorvan/edabil/tests"
}
},
"scripts": {

279
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a8338790c91ddfe22352530ff06fbcd0",
"content-hash": "8d90c860659db86cb981e675d0041753",
"packages": [
{
"name": "badfarm/zanzara",
@@ -848,7 +848,7 @@
},
{
"name": "illuminate/macroable",
"version": "v12.51.0",
"version": "v12.53.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/macroable.git",
@@ -1207,11 +1207,11 @@
},
{
"name": "mirzaev/unmarkdown",
"version": "1.0.3",
"version": "1.0.5",
"source": {
"type": "git",
"url": "https://git.svoboda.works/mirzaev/unmarkdown",
"reference": "ae97b9e4644dc591965694570277cdafdc46247d"
"reference": "a0309030f65b024b8a35cd60fba396f6b8e063ee"
},
"require": {
"php": "^8.4"
@@ -1243,7 +1243,7 @@
"support": {
"issues": "https://git.svoboda.works/mirzaev/unmarkdown/issues"
},
"time": "2025-11-09T11:37:20+00:00"
"time": "2026-01-14T10:49:12+00:00"
},
{
"name": "netresearch/jsonmapper",
@@ -1358,16 +1358,16 @@
},
{
"name": "nutgram/nutgram",
"version": "4.42.0",
"version": "4.44.0",
"source": {
"type": "git",
"url": "https://github.com/nutgram/nutgram.git",
"reference": "034257dbc29947b73e04b5d92b07d780d8962810"
"reference": "9e69c5eb5bdf79ff96c0396007f909e19fd8a956"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nutgram/nutgram/zipball/034257dbc29947b73e04b5d92b07d780d8962810",
"reference": "034257dbc29947b73e04b5d92b07d780d8962810",
"url": "https://api.github.com/repos/nutgram/nutgram/zipball/9e69c5eb5bdf79ff96c0396007f909e19fd8a956",
"reference": "9e69c5eb5bdf79ff96c0396007f909e19fd8a956",
"shasum": ""
},
"require": {
@@ -1429,7 +1429,7 @@
],
"support": {
"issues": "https://github.com/nutgram/nutgram/issues",
"source": "https://github.com/nutgram/nutgram/tree/4.42.0"
"source": "https://github.com/nutgram/nutgram/tree/4.44.0"
},
"funding": [
{
@@ -1441,7 +1441,7 @@
"type": "github"
}
],
"time": "2026-02-12T17:23:52+00:00"
"time": "2026-03-02T00:33:48+00:00"
},
{
"name": "nyholm/psr7",
@@ -3549,16 +3549,16 @@
},
{
"name": "symfony/cache",
"version": "v8.0.5",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "92e9960386c7e01f58198038c199d522959a843c"
"reference": "59184fa14658d7724cd9b8743d91c1b1aa618bff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/92e9960386c7e01f58198038c199d522959a843c",
"reference": "92e9960386c7e01f58198038c199d522959a843c",
"url": "https://api.github.com/repos/symfony/cache/zipball/59184fa14658d7724cd9b8743d91c1b1aa618bff",
"reference": "59184fa14658d7724cd9b8743d91c1b1aa618bff",
"shasum": ""
},
"require": {
@@ -3625,7 +3625,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v8.0.5"
"source": "https://github.com/symfony/cache/tree/v8.0.6"
},
"funding": [
{
@@ -3645,7 +3645,7 @@
"type": "tidelift"
}
],
"time": "2026-01-27T16:18:07+00:00"
"time": "2026-02-21T23:29:37+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -3725,16 +3725,16 @@
},
{
"name": "symfony/config",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "58063686fd7b8e676f14b5a4808cb85265c5216e"
"reference": "94ea198de42f93dffa920a098cac3961a82e63b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/58063686fd7b8e676f14b5a4808cb85265c5216e",
"reference": "58063686fd7b8e676f14b5a4808cb85265c5216e",
"url": "https://api.github.com/repos/symfony/config/zipball/94ea198de42f93dffa920a098cac3961a82e63b7",
"reference": "94ea198de42f93dffa920a098cac3961a82e63b7",
"shasum": ""
},
"require": {
@@ -3779,7 +3779,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v8.0.3"
"source": "https://github.com/symfony/config/tree/v8.0.6"
},
"funding": [
{
@@ -3799,20 +3799,20 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:52:06+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "8db0d4c1dd4c533a29210c68074999ba45ad6d3e"
"reference": "edd98864a7b9eaaa10f389bd414e7d9e816bb59d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8db0d4c1dd4c533a29210c68074999ba45ad6d3e",
"reference": "8db0d4c1dd4c533a29210c68074999ba45ad6d3e",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/edd98864a7b9eaaa10f389bd414e7d9e816bb59d",
"reference": "edd98864a7b9eaaa10f389bd414e7d9e816bb59d",
"shasum": ""
},
"require": {
@@ -3860,7 +3860,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v8.0.3"
"source": "https://github.com/symfony/dependency-injection/tree/v8.0.6"
},
"funding": [
{
@@ -3880,7 +3880,7 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:52:06+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -3951,16 +3951,16 @@
},
{
"name": "symfony/error-handler",
"version": "v8.0.0",
"version": "v8.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "d77ec7dda0c274178745d152e82baf7ea827fd73"
"reference": "7620b97ec0ab1d2d6c7fb737aa55da411bea776a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/d77ec7dda0c274178745d152e82baf7ea827fd73",
"reference": "d77ec7dda0c274178745d152e82baf7ea827fd73",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/7620b97ec0ab1d2d6c7fb737aa55da411bea776a",
"reference": "7620b97ec0ab1d2d6c7fb737aa55da411bea776a",
"shasum": ""
},
"require": {
@@ -4008,7 +4008,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v8.0.0"
"source": "https://github.com/symfony/error-handler/tree/v8.0.4"
},
"funding": [
{
@@ -4028,20 +4028,20 @@
"type": "tidelift"
}
],
"time": "2025-11-05T14:36:47+00:00"
"time": "2026-01-23T11:07:10+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v8.0.0",
"version": "v8.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "573f95783a2ec6e38752979db139f09fec033f03"
"reference": "99301401da182b6cfaa4700dbe9987bb75474b47"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03",
"reference": "573f95783a2ec6e38752979db139f09fec033f03",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/99301401da182b6cfaa4700dbe9987bb75474b47",
"reference": "99301401da182b6cfaa4700dbe9987bb75474b47",
"shasum": ""
},
"require": {
@@ -4093,7 +4093,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0"
"source": "https://github.com/symfony/event-dispatcher/tree/v8.0.4"
},
"funding": [
{
@@ -4113,7 +4113,7 @@
"type": "tidelift"
}
],
"time": "2025-10-30T14:17:19+00:00"
"time": "2026-01-05T11:45:55+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -4193,16 +4193,16 @@
},
{
"name": "symfony/filesystem",
"version": "v8.0.1",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d"
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/7bf9162d7a0dff98d079b72948508fa48018a770",
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770",
"shasum": ""
},
"require": {
@@ -4239,7 +4239,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v8.0.1"
"source": "https://github.com/symfony/filesystem/tree/v8.0.6"
},
"funding": [
{
@@ -4259,20 +4259,20 @@
"type": "tidelift"
}
],
"time": "2025-12-01T09:13:36+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/finder",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "dd3a2953570a283a2ba4e17063bb98c734cf5b12"
"reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/dd3a2953570a283a2ba4e17063bb98c734cf5b12",
"reference": "dd3a2953570a283a2ba4e17063bb98c734cf5b12",
"url": "https://api.github.com/repos/symfony/finder/zipball/441404f09a54de6d1bd6ad219e088cdf4c91f97c",
"reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c",
"shasum": ""
},
"require": {
@@ -4307,7 +4307,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v8.0.3"
"source": "https://github.com/symfony/finder/tree/v8.0.6"
},
"funding": [
{
@@ -4327,20 +4327,20 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:52:06+00:00"
"time": "2026-01-29T09:41:02+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "738a92519fbc3ac37192b28052574bf2d1e8f63a"
"reference": "86ebd86908edca06e3af5994bc46881575fbe813"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/738a92519fbc3ac37192b28052574bf2d1e8f63a",
"reference": "738a92519fbc3ac37192b28052574bf2d1e8f63a",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/86ebd86908edca06e3af5994bc46881575fbe813",
"reference": "86ebd86908edca06e3af5994bc46881575fbe813",
"shasum": ""
},
"require": {
@@ -4348,8 +4348,8 @@
"ext-xml": "*",
"php": ">=8.4",
"symfony/cache": "^7.4|^8.0",
"symfony/config": "^7.4.3|^8.0.3",
"symfony/dependency-injection": "^7.4|^8.0",
"symfony/config": "^7.4.4|^8.0.4",
"symfony/dependency-injection": "^7.4.4|^8.0.4",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^7.4|^8.0",
"symfony/event-dispatcher": "^7.4|^8.0",
@@ -4363,8 +4363,8 @@
},
"conflict": {
"doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"phpdocumentor/reflection-docblock": "<5.2|>=7",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/console": "<7.4",
"symfony/form": "<7.4",
"symfony/json-streamer": "<7.4",
@@ -4378,7 +4378,7 @@
"require-dev": {
"doctrine/persistence": "^1.3|^2|^3",
"dragonmantank/cron-expression": "^3.1",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpdocumentor/reflection-docblock": "^5.2|^6.0",
"phpstan/phpdoc-parser": "^1.0|^2.0",
"seld/jsonlint": "^1.10",
"symfony/asset": "^7.4|^8.0",
@@ -4447,7 +4447,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v8.0.3"
"source": "https://github.com/symfony/framework-bundle/tree/v8.0.6"
},
"funding": [
{
@@ -4467,20 +4467,20 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:52:06+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/http-client",
"version": "v7.4.3",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "d01dfac1e0dc99f18da48b18101c23ce57929616"
"reference": "2bde8afd5ab2fe0b05a9c2d4c3c0e28ceb98a154"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/d01dfac1e0dc99f18da48b18101c23ce57929616",
"reference": "d01dfac1e0dc99f18da48b18101c23ce57929616",
"url": "https://api.github.com/repos/symfony/http-client/zipball/2bde8afd5ab2fe0b05a9c2d4c3c0e28ceb98a154",
"reference": "2bde8afd5ab2fe0b05a9c2d4c3c0e28ceb98a154",
"shasum": ""
},
"require": {
@@ -4548,7 +4548,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v7.4.3"
"source": "https://github.com/symfony/http-client/tree/v7.4.6"
},
"funding": [
{
@@ -4568,7 +4568,7 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:50:43+00:00"
"time": "2026-02-18T09:46:18+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -4650,16 +4650,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "514ec3aa7982f296b0ad0825f75b6be5779ae9e7"
"reference": "7745ff1aad45d855fe25b08969269ef83b1ad8bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/514ec3aa7982f296b0ad0825f75b6be5779ae9e7",
"reference": "514ec3aa7982f296b0ad0825f75b6be5779ae9e7",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/7745ff1aad45d855fe25b08969269ef83b1ad8bc",
"reference": "7745ff1aad45d855fe25b08969269ef83b1ad8bc",
"shasum": ""
},
"require": {
@@ -4706,7 +4706,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v8.0.3"
"source": "https://github.com/symfony/http-foundation/tree/v8.0.6"
},
"funding": [
{
@@ -4726,20 +4726,20 @@
"type": "tidelift"
}
],
"time": "2025-12-23T14:52:06+00:00"
"time": "2026-02-21T16:28:39+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "e6dfb348eb1dd4df14c39e6dc7e283bab4199fd9"
"reference": "b567e571e74b5774b3d3cb4d35bdafa5f37e51a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/e6dfb348eb1dd4df14c39e6dc7e283bab4199fd9",
"reference": "e6dfb348eb1dd4df14c39e6dc7e283bab4199fd9",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/b567e571e74b5774b3d3cb4d35bdafa5f37e51a9",
"reference": "b567e571e74b5774b3d3cb4d35bdafa5f37e51a9",
"shasum": ""
},
"require": {
@@ -4810,7 +4810,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v8.0.3"
"source": "https://github.com/symfony/http-kernel/tree/v8.0.6"
},
"funding": [
{
@@ -4830,20 +4830,20 @@
"type": "tidelift"
}
],
"time": "2025-12-31T09:29:34+00:00"
"time": "2026-02-26T08:36:42+00:00"
},
{
"name": "symfony/intl",
"version": "v8.0.1",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
"reference": "f9eca217ae8f2be0b3ad80723d6a3b518b90cd66"
"reference": "4e14323828f51a293edbce15ca98d4f3dd927cbf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/intl/zipball/f9eca217ae8f2be0b3ad80723d6a3b518b90cd66",
"reference": "f9eca217ae8f2be0b3ad80723d6a3b518b90cd66",
"url": "https://api.github.com/repos/symfony/intl/zipball/4e14323828f51a293edbce15ca98d4f3dd927cbf",
"reference": "4e14323828f51a293edbce15ca98d4f3dd927cbf",
"shasum": ""
},
"require": {
@@ -4899,7 +4899,7 @@
"localization"
],
"support": {
"source": "https://github.com/symfony/intl/tree/v8.0.1"
"source": "https://github.com/symfony/intl/tree/v8.0.6"
},
"funding": [
{
@@ -4919,7 +4919,7 @@
"type": "tidelift"
}
],
"time": "2025-12-01T09:13:36+00:00"
"time": "2026-02-09T10:14:57+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5251,16 +5251,16 @@
},
{
"name": "symfony/routing",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "3827ac6e03dcd86e430fb6ae6056acf5b51aece3"
"reference": "053c40fd46e1d19c5c5a94cada93ce6c3facdd55"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/3827ac6e03dcd86e430fb6ae6056acf5b51aece3",
"reference": "3827ac6e03dcd86e430fb6ae6056acf5b51aece3",
"url": "https://api.github.com/repos/symfony/routing/zipball/053c40fd46e1d19c5c5a94cada93ce6c3facdd55",
"reference": "053c40fd46e1d19c5c5a94cada93ce6c3facdd55",
"shasum": ""
},
"require": {
@@ -5307,7 +5307,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v8.0.3"
"source": "https://github.com/symfony/routing/tree/v8.0.6"
},
"funding": [
{
@@ -5327,7 +5327,7 @@
"type": "tidelift"
}
],
"time": "2025-12-19T10:01:18+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/service-contracts",
@@ -5500,16 +5500,16 @@
},
{
"name": "symfony/twig-bridge",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "2a2978a44127bae9aaee0ed5319954eb492d81c3"
"reference": "a29b174218f6eb324bf24f60440ac81d17f6ee0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2a2978a44127bae9aaee0ed5319954eb492d81c3",
"reference": "2a2978a44127bae9aaee0ed5319954eb492d81c3",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/a29b174218f6eb324bf24f60440ac81d17f6ee0d",
"reference": "a29b174218f6eb324bf24f60440ac81d17f6ee0d",
"shasum": ""
},
"require": {
@@ -5518,13 +5518,14 @@
"twig/twig": "^3.21"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0"
"phpdocumentor/reflection-docblock": "<5.2|>=7",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/form": "<7.4.4|>8.0,<8.0.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10|^3|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpdocumentor/reflection-docblock": "^5.2|^6.0",
"symfony/asset": "^7.4|^8.0",
"symfony/asset-mapper": "^7.4|^8.0",
"symfony/console": "^7.4|^8.0",
@@ -5532,7 +5533,7 @@
"symfony/emoji": "^7.4|^8.0",
"symfony/expression-language": "^7.4|^8.0",
"symfony/finder": "^7.4|^8.0",
"symfony/form": "^7.4.1|^8.0.1",
"symfony/form": "^7.4.4|^8.0.4",
"symfony/html-sanitizer": "^7.4|^8.0",
"symfony/http-foundation": "^7.4|^8.0",
"symfony/http-kernel": "^7.4|^8.0",
@@ -5582,7 +5583,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v8.0.3"
"source": "https://github.com/symfony/twig-bridge/tree/v8.0.6"
},
"funding": [
{
@@ -5602,20 +5603,20 @@
"type": "tidelift"
}
],
"time": "2025-12-16T08:10:18+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v8.0.3",
"version": "v8.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "58c54c97af6a3fdb7ea9a3931ea1c4b8bd282b2f"
"reference": "5a68f2e0e06996514bf04900c3982b93b42487af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/58c54c97af6a3fdb7ea9a3931ea1c4b8bd282b2f",
"reference": "58c54c97af6a3fdb7ea9a3931ea1c4b8bd282b2f",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/5a68f2e0e06996514bf04900c3982b93b42487af",
"reference": "5a68f2e0e06996514bf04900c3982b93b42487af",
"shasum": ""
},
"require": {
@@ -5666,7 +5667,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v8.0.3"
"source": "https://github.com/symfony/twig-bundle/tree/v8.0.4"
},
"funding": [
{
@@ -5686,20 +5687,20 @@
"type": "tidelift"
}
],
"time": "2025-12-19T10:01:18+00:00"
"time": "2026-01-06T12:43:21+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v8.0.3",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "3bc368228532ad538cc216768caa8968be95a8d6"
"reference": "2e14f7e0bf5ff02c6e63bd31cb8e4855a13d6209"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3bc368228532ad538cc216768caa8968be95a8d6",
"reference": "3bc368228532ad538cc216768caa8968be95a8d6",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/2e14f7e0bf5ff02c6e63bd31cb8e4855a13d6209",
"reference": "2e14f7e0bf5ff02c6e63bd31cb8e4855a13d6209",
"shasum": ""
},
"require": {
@@ -5753,7 +5754,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v8.0.3"
"source": "https://github.com/symfony/var-dumper/tree/v8.0.6"
},
"funding": [
{
@@ -5773,7 +5774,7 @@
"type": "tidelift"
}
],
"time": "2025-12-18T11:23:51+00:00"
"time": "2026-02-15T10:53:29+00:00"
},
{
"name": "symfony/var-exporter",
@@ -6048,16 +6049,16 @@
},
{
"name": "twig/extra-bundle",
"version": "v3.22.2",
"version": "v3.23.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
"reference": "09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e"
"reference": "7a27e784dc56eddfef5e9295829b290ce06f1682"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e",
"reference": "09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/7a27e784dc56eddfef5e9295829b290ce06f1682",
"reference": "7a27e784dc56eddfef5e9295829b290ce06f1682",
"shasum": ""
},
"require": {
@@ -6106,7 +6107,7 @@
"twig"
],
"support": {
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.22.2"
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.23.0"
},
"funding": [
{
@@ -6118,20 +6119,20 @@
"type": "tidelift"
}
],
"time": "2025-12-05T08:51:53+00:00"
"time": "2025-12-18T20:46:15+00:00"
},
{
"name": "twig/intl-extra",
"version": "v3.22.1",
"version": "v3.23.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/intl-extra.git",
"reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1"
"reference": "32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/intl-extra/zipball/93ac31e53cdd3f2e541f42690cd0c54ca8138ab1",
"reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1",
"url": "https://api.github.com/repos/twigphp/intl-extra/zipball/32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f",
"reference": "32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f",
"shasum": ""
},
"require": {
@@ -6170,7 +6171,7 @@
"twig"
],
"support": {
"source": "https://github.com/twigphp/intl-extra/tree/v3.22.1"
"source": "https://github.com/twigphp/intl-extra/tree/v3.23.0"
},
"funding": [
{
@@ -6182,20 +6183,20 @@
"type": "tidelift"
}
],
"time": "2025-11-02T11:00:49+00:00"
"time": "2026-01-17T13:57:47+00:00"
},
{
"name": "twig/twig",
"version": "v3.22.2",
"version": "v3.23.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2"
"reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/946ddeafa3c9f4ce279d1f34051af041db0e16f2",
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9",
"reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9",
"shasum": ""
},
"require": {
@@ -6249,7 +6250,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.22.2"
"source": "https://github.com/twigphp/Twig/tree/v3.23.0"
},
"funding": [
{
@@ -6261,7 +6262,7 @@
"type": "tidelift"
}
],
"time": "2025-12-14T11:28:47+00:00"
"time": "2026-01-23T21:00:41+00:00"
},
{
"name": "wyrihaximus/composer-update-bin-autoload-path",
@@ -6896,16 +6897,16 @@
},
{
"name": "yoomoney/yookassa-sdk-php",
"version": "2.13.0",
"version": "2.13.1",
"source": {
"type": "git",
"url": "https://git.yoomoney.ru/scm/sdk/yookassa-sdk-php.git",
"reference": "846375280694d418025ba9ec5bcdbdfac6773932"
"reference": "f5f3cdad71710d06baf0f9c8d455a42d0d8b8e65"
},
"dist": {
"type": "zip",
"url": "https://git.yoomoney.ru/rest/api/latest/projects/SDK/repos/yookassa-sdk-php/archive?at=refs%2Ftags%2F2.13.0&format=zip",
"reference": "846375280694d418025ba9ec5bcdbdfac6773932"
"url": "https://git.yoomoney.ru/rest/api/latest/projects/SDK/repos/yookassa-sdk-php/archive?at=refs%2Ftags%2F2.13.1&format=zip",
"reference": "f5f3cdad71710d06baf0f9c8d455a42d0d8b8e65"
},
"require": {
"ext-curl": "*",
@@ -6947,7 +6948,7 @@
"yookassa",
"yoomoney"
],
"time": "2025-12-17T09:05:11+00:00"
"time": "2026-02-18T13:51:08+00:00"
}
],
"packages-dev": [],

View File

@@ -1,5 +1,5 @@
#!/bin/fish
if not test -L kodorvan/neurobot/system/public/js/modules/damper.mjs
ln -s ../../../../../../damper.mjs/damper.mjs kodorvan/neurobot/system/public/js/modules/damper.mjs
if not test -L kodorvan/edabil/system/public/js/modules/damper.mjs
ln -s ../../../../../../damper.mjs/damper.mjs kodorvan/edabil/system/public/js/modules/damper.mjs
end

View File

@@ -2,11 +2,11 @@
declare(strict_types=1);
namespace kodorvan\neurobot\controllers;
namespace kodorvan\edabil\controllers;
// Files of the project
use kodorvan\neurobot\views\templater,
kodorvan\neurobot\models\core as models;
use kodorvan\edabil\views\templater,
kodorvan\edabil\models\core as models;
// Library for languages support
use mirzaev\languages\language;
@@ -20,7 +20,7 @@ use mirzaev\minimal\core as minimal,
/**
* Controllers core
*
* @package kodorvan\neurobot\controllers
* @package kodorvan\edabil\controllers
*
* @param language $language Language
* @param response $response Response

View File

@@ -2,10 +2,10 @@
declare(strict_types=1);
namespace kodorvan\neurobot\controllers;
namespace kodorvan\edabil\controllers;
// Files of the project
use kodorvan\neurobot\controllers\core;
use kodorvan\edabil\controllers\core;
// Framework for PHP
use mirzaev\minimal\http\enumerations\content,
@@ -14,7 +14,7 @@ use mirzaev\minimal\http\enumerations\content,
/**
* Index
*
* @package kodorvan\neurobot\controllers
* @package kodorvan\edabil\controllers
*
* @param array $errors Registry of errors
*

View File

@@ -0,0 +1,55 @@
<?php
// Exit (success)
return [
// System
'svoboda' => 'Svoboda',
'kodorvan' => 'Kodorvan',
'edabil' => 'Edabil',
'empty' => 'Empty',
'yes' => 'Yes',
'no' => 'No',
// Main menu
'menu_title' => 'Main menu',
'menu_pipetc' => 'Just pipetc girls..',
// Account
'account_title' => 'Account',
'account_authorized_system' => 'Access to the system',
'account_authorized_settings' => 'Access to settings',
'account_authorized_system_accounts' => 'System access to accounts management',
'account_authorized_system_settings' => 'System access to the system settings',
'account_button_localizations' => 'Localizations',
'account_localization_create_failted_to_initialize_language' => 'Failed to initialize language',
// Language setting
'settings_select_language_title' => 'Select language',
'settings_select_language_description' => 'The selected language will be writed in your account settings',
'settings_language_update_success' => 'Language replaced:',
'settings_language_update_fail' => 'Failed to replace language',
// Language selection
'select_language_title' => 'Select language',
'select_language_description' => 'The selected language will be used in the current process',
'select_language_button_add' => 'Add a language',
// Settings
'settings_initialization_fail' => 'Не удалось инициализировать настройки аккаунта',
'settings_title' => 'Settings',
'settings_button_chat_memory_messages' => "Messages memory",
// Authorization
'not_authorized_system' => 'You do not have access to the system',
'not_authorized_messages' => 'You do not have access to send messages',
'not_authorized_settings' => 'You do not have access to the settings',
'not_authorized_system_settings' => 'You do not have access to the system settings',
'not_authorized_system_distributions' => 'You do not have access to distributions administration',
// Messages
'message_initialization_fail' => 'Не удалось инициализировать сообщение Телеграм',
'message_text_initialization_fail' => 'Не удалось инициализировать текст сообщения Телеграм',
// Other
'why_so_shroomious' => 'why so shroomious'
];

View File

@@ -0,0 +1,55 @@
<?php
// Выход (успех)
return [
// Система
'svoboda' => 'Свобода',
'kodorvan' => 'Кодорвань',
'edabil' => 'Едабил',
'empty' => 'Пусто',
'yes' => 'Да',
'no' => 'Нет',
// Главное меню
'menu_title' => 'Главное меню',
'menu_pipetc' => 'проста пипец девачки..',
// Аккаунт
'account_title' => 'Аккаунт',
'account_authorized_system' => 'Доступ к системе',
'account_authorized_messages' => 'Доступ к сообщениям',
'account_authorized_settings' => 'Доступ к изменению настроек',
'account_authorized_system_accounts' => 'Системный доступ к управлению аккаунтами',
'account_authorized_system_settings' => 'Системный доступ к системным настройкам',
'account_button_localizations' => 'Локализации',
// Настройки языка
'settings_select_language_title' => 'Выбери язык',
'settings_select_language_description' => 'Выбранный язык будет записан в настройки аккаунта',
'settings_language_update_success' => 'Язык заменён:',
'settings_language_update_fail' => 'Не удалось заменить язык',
// Выбор языка
'select_language_title' => 'Выбери язык',
'select_language_description' => 'Выбранный язык будет использован в текущем процессе',
'select_language_button_add' => 'Добавить язык',
// Настройки
'settings_initialization_fail' => 'Не удалось инициализировать настройки аккаунта',
'settings_title' => 'Настройки',
// Авторизация
'not_authorized_system' => 'У тебя нет доступа к системе',
'not_authorized_messages' => 'У тебя нет доступа к сообщениям',
'not_authorized_joins' => 'У тебя нет доступа к вступлениям',
'not_authorized_settings' => 'У тебя нет доступа к настройкам',
'not_authorized_system_settings' => 'У тебя нет доступа к системным настройкам',
'not_authorized_system_distributions' => 'У тебя нет доступа к администрированию дистрибутивов',
// Сообщения
'message_initialization_fail' => 'Не удалось инициализировать сообщение Телеграм',
'message_text_initialization_fail' => 'Не удалось инициализировать текст сообщения Телеграм',
// Прочее
'why_so_shroomious' => 'почему такой грибъёзный'
];

View File

@@ -2,16 +2,16 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models;
namespace kodorvan\edabil\models;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\authorizations,
kodorvan\neurobot\models\chat,
kodorvan\neurobot\models\settings,
kodorvan\neurobot\models\tariff,
kodorvan\neurobot\models\code,
kodorvan\neurobot\models\enumerations\tariff as tariff_type;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\authorizations,
kodorvan\edabil\models\chat,
kodorvan\edabil\models\settings,
kodorvan\edabil\models\tariff,
kodorvan\edabil\models\code,
kodorvan\edabil\models\enumerations\tariff as tariff_type;
// The library for languages support
use mirzaev\languages\language;
@@ -40,7 +40,7 @@ use Exception as exception,
/**
* Account
*
* @package kodorvan\neurobot\models
* @package kodorvan\edabil\models
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
@@ -91,9 +91,6 @@ final class account extends core implements record_interface
new column('language', type::string, ['length' => 2]),
/* new column('currency', type::string, ['length' => 3]), */
new column('robot', type::char),
new column('chat', type::long_long_unsigned),
new column('tariff', type::long_long_unsigned),
new column('welcome', type::char),
new column('active', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
@@ -302,10 +299,6 @@ final class account extends core implements record_interface
$name_second,
$language instanceof language ? $language->name : (string) $language,
(int) $robot,
0,
0,
0,
/* */
(int) $active,
svoboda::timestamp(),
svoboda::timestamp()
@@ -415,192 +408,4 @@ final class account extends core implements record_interface
// Exit (fail)
return null;
}
/**
* Chat
*
* Search for the account chat (or create)
*
* @return chat|null The account chat
*/
public function chat(): ?chat
{
// Search for the account chat
$chat = new chat()->read(filter: fn(record $record) => $record->identifier === $this->record->chat && $record->active === 1);
if ($chat instanceof chat) {
// Found the account chat
// Deserializing the chat
$chat->deserialize();
// Exit (success)
return $chat;
} else {
// Not found the account chat
// Initializing the chat model
$chat = new chat();
// @todo проверку на то что чат создан добавить здесь и при регистрации аккаунта, затем сделать то же самое для тарифов и прочего
// Creating the account chat
$this->chat = $chat->write(account: $this->identifier, network: NETWORK_DEFAULT);
// Serializing the account
$this->serialize();
// Writing the record into the database
$record = $this->update();
// Deserializing the account
$this->deserialize();
// Search for the account chat
$chat = new chat()->read(filter: fn(record $record) => $record->identifier === $this->record->chat && $record->active === 1);
if ($chat instanceof chat) {
// Found the account chat
// Deserializing the chat
$chat->deserialize();
// Exit (success)
return $chat;
}
}
// Exit (fail)
return null;
}
/**
* Tariff
*
* Search for the account tariff
*
* @return tariff|null The account tariff
*/
public function tariff(): ?tariff
{
// Search for the account tariff
$tariff = new tariff()->read(
filter: fn(record $record) =>
$record->identifier === $this->record->tariff
&& $record->account === $this->record->identifier
&& $record->active === 1
&& $record->used <= $record->tokens
);
if ($tariff instanceof tariff) {
// Found the account tariff
// Deserializing the tariff
$tariff->deserialize();
// Exit (success)
return $tariff;
}
// Exit (fail)
return null;
}
/**
* Code
*
* Activate the tariff activation code
*
* @param string $code The code
*
* @return bool Is the code was activated?
*/
public function code(string $code): bool
{
// Search for the code
$record = new code()->database->read(
filter: fn(record $record) => $record->value === $code && $record->activated === 0 && $record->account === 0,
update: function (record &$record) {
$record->account = $this->record->identifier;
$record->activated = 1;
$record->updated = svoboda::timestamp();
},
amount: 1
)[0] ?? null;
if ($record instanceof record) {
// Found and activated the code
// Initializing the code instance
$code = new code($record);
// Writing the code record into the code instance
$code->record = $record;
// Initializing the "activated" registry
$activated = false;
if ($code->tariff !== 0) {
// The code has a tariff
// Search for the tariff
$tariff = new tariff()->database->read(
filter: fn(record $record) => $record->identifier === $code->tariff,
update: function (record &$record) {
$record->account = $this->record->identifier;
$record->active = 1;
$record->updated = svoboda::timestamp();
},
amount: 1
)[0] ?? null;
if ($tariff instanceof record) {
// Found and connected the tariff
// Writing the tariff into the account (select the active tariff)
$this->record->tariff = $tariff->identifier;
// Serializing the account data
$this->serialize();
// Writing the updated account unto the database
$this->update();
// Deserializing the account data
$this->deserialize();
// Writing the "activated" registry
$activated = true;
}
}
if ($code->bundle !== 0) {
// The code has a bundle
// Search for the bundle
$bundle = new bundle()->database->read(
filter: fn(record $record) => $record->identifier === $code->bundle,
update: function (record &$record) {
$record->account = $this->recoed->identifier;
$record->updated = svoboda::timestamp();
},
amount: 1
)[0] ?? null;
if ($bundle instanceof record) {
// Found and connected the bundle
// Writing the "activated" registry
$activated = true;
}
}
// Exit (success/fail)
return $activated;
}
// Exit (fail)
return false;
}
}

View File

@@ -2,10 +2,10 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models;
namespace kodorvan\edabil\models;
// Files of the project
use kodorvan\neurobot\models\core;
use kodorvan\edabil\models\core;
// Svoboda time
use svoboda\time\statement as svoboda;
@@ -31,7 +31,7 @@ use Exception as exception,
/**
* Authorizations
*
* @package kodorvan\neurobot\models
* @package kodorvan\edabil\models
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
@@ -79,24 +79,6 @@ final class authorizations extends core implements record_interface
new column('system', type::char),
new column('settings', type::char),
new column('chat', type::char),
new column('gpt_3_5_turbo', type::char),
new column('gpt_4_1', type::char),
new column('gpt_4_1_mini', type::char),
new column('gpt_4_1_nano', type::char),
new column('o4_mini', type::char),
new column('gpt_5', type::char),
new column('gpt_5_mini', type::char),
new column('gpt_5_nano', type::char),
new column('gpt_5_pro', type::char),
new column('gpt_5_1', type::char),
new column('gpt_5_2', type::char),
new column('sora_2', type::char),
new column('sora_2_pro', type::char),
/* new column('sora_2_pro_hight', type::char), */
new column('gpt_image_1', type::char),
new column('gpt_image_1_mini', type::char),
/* new column('gpt_image_1_text', type::char),
new column('gpt_image_1_text_mini', type::char), */
new column('system_accounts', type::char),
new column('system_settings', type::char),
new column('active', type::char),
@@ -116,21 +98,6 @@ final class authorizations extends core implements record_interface
* @param int $system
* @param int $settings
* @param int $chat
* @param int $gpt_3_5_turbo
* @param int $gpt_4_1
* @param int $gpt_4_1_mini
* @param int $gpt_4_1_nano
* @param int $o4_mini
* @param int $gpt_5
* @param int $gpt_5_mini
* @param int $gpt_5_nano
* @param int $gpt_5_pro
* @param int $gpt_5_1
* @param int $gpt_5_2
* @param int $sora_2
* @param int $sora_2_pro
* @param int $gpt_image_1
* @param int $gpt_image_1_mini
* @param int $system_accounts
* @param int $system_settings
* @param bool $active Is the record active?
@@ -142,21 +109,6 @@ final class authorizations extends core implements record_interface
int $system = 1,
int $settings = 1,
int $chat = 1,
int $gpt_3_5_turbo = 0,
int $gpt_4_1 = 0,
int $gpt_4_1_mini = 0,
int $gpt_4_1_nano = 0,
int $o4_mini = 0,
int $gpt_5 = 1,
int $gpt_5_mini = 0,
int $gpt_5_nano = 0,
int $gpt_5_pro = 1,
int $gpt_5_1 = 1,
int $gpt_5_2 = 1,
int $sora_2 = 0,
int $sora_2_pro = 0,
int $gpt_image_1 = 0,
int $gpt_image_1_mini = 0,
int $system_accounts = 0,
int $system_settings = 0,
bool $active = true,
@@ -168,21 +120,6 @@ final class authorizations extends core implements record_interface
$system,
$settings,
$chat,
$gpt_3_5_turbo,
$gpt_4_1,
$gpt_4_1_mini,
$gpt_4_1_nano,
$o4_mini,
$gpt_5,
$gpt_5_mini,
$gpt_5_nano,
$gpt_5_pro,
$gpt_5_1,
$gpt_5_2,
$sora_2,
$sora_2_pro,
$gpt_image_1,
$gpt_image_1_mini,
$system_accounts,
$system_settings,
(int) $active,

View File

@@ -2,7 +2,7 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models;
namespace kodorvan\edabil\models;
// Framework for PHP
use mirzaev\minimal\model,
@@ -14,7 +14,7 @@ use exception;
/**
* Models core
*
* @package kodorvan\neurobot\models
* @package kodorvan\edabil\models
*
* @method void __construct() Constructor
*

View File

@@ -2,10 +2,10 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models;
namespace kodorvan\edabil\models;
// Files of the project
use kodorvan\neurobot\models\core;
use kodorvan\edabil\models\core;
// Baza database
use mirzaev\baza\database,
@@ -26,7 +26,7 @@ use ArrayAccess as array_access,
/**
* Localization
*
* @package kodorvan\neurobot\models
* @package kodorvan\edabil\models
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,13 +2,13 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models;
namespace kodorvan\edabil\models;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\tariff,
kodorvan\neurobot\models\enumerations\tariff as tariff_type,
kodorvan\neurobot\models\enumerations\acquiring as acquiring;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\tariff,
kodorvan\edabil\models\enumerations\tariff as tariff_type,
kodorvan\edabil\models\enumerations\acquiring as acquiring;
// Svoboda time
use svoboda\time\statement as svoboda;
@@ -20,17 +20,10 @@ use mirzaev\baza\database,
mirzaev\baza\enumerations\encoding,
mirzaev\baza\enumerations\type;
// Library for neural networks support
use mirzaev\neuroseti\network,
mirzaev\neuroseti\api;
// Active Record pattern
use mirzaev\record\interfaces\record as record_interface,
mirzaev\record\traits\record as record_trait;
// Port of the fast BPE tokeniser for OpenAI
use Yethee\Tiktoken\EncoderProvider as tiktoken;
// Built-in libraries
use Exception as exception,
RuntimeException as exception_runtime;
@@ -38,7 +31,7 @@ use Exception as exception,
/**
* Settings
*
* @package kodorvan\neurobot\models
* @package kodorvan\edabil\models
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
@@ -76,7 +69,6 @@ final class settings extends core implements record_interface
->columns(
new column('identifier', type::long_long_unsigned),
new column('account', type::long_long_unsigned),
new column('chat_memory_messages', type::integer_unsigned),
new column('active', type::char),
new column('updated', type::integer_unsigned),
new column('created', type::integer_unsigned)
@@ -91,20 +83,17 @@ final class settings extends core implements record_interface
* Write
*
* @param int $account The account identifier (0 for disable)
* @param int $chat_memory_messages Amout messages to send into a neural network
* @param int $active Is the record active?
*
* @return record|false The record, if created
*/
public function write(
int $account = 0,
int $chat_memory_messages = 3,
bool $active = true,
): record|false {
$record = $this->database->record(
$this->database->count() + 1,
$account,
$chat_memory_messages,
(int) $active,
svoboda::timestamp(),
svoboda::timestamp()

View File

@@ -2,14 +2,14 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\commands;
namespace kodorvan\edabil\models\telegram\commands;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account as model,
kodorvan\neurobot\models\settings,
kodorvan\neurobot\models\localization,
kodorvan\neurobot\models\telegram\processes\language\select as process_language_select;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account as model,
kodorvan\edabil\models\settings,
kodorvan\edabil\models\localization,
kodorvan\edabil\models\telegram\processes\language\select as process_language_select;
// Library for languages support
use mirzaev\languages\language;
@@ -29,7 +29,7 @@ use SergiX44\Nutgram\Nutgram as telegram,
/**
* Command: account
*
* @package kodorvan\neurobot\models\telegram\commands
* @package kodorvan\edabil\models\telegram\commands
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,14 +2,14 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\commands;
namespace kodorvan\edabil\models\telegram\commands;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account,
kodorvan\neurobot\models\settings,
kodorvan\neurobot\models\localization,
kodorvan\neurobot\models\telegram\processes\language\select as process_language_select;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\settings,
kodorvan\edabil\models\localization,
kodorvan\edabil\models\telegram\processes\language\select as process_language_select;
// Library for languages support
use mirzaev\languages\language as type;
@@ -29,7 +29,7 @@ use SergiX44\Nutgram\Nutgram as telegram,
/**
* Command: language
*
* @package kodorvan\neurobot\models\telegram\commands
* @package kodorvan\edabil\models\telegram\commands
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,13 +2,13 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\commands;
namespace kodorvan\edabil\models\telegram\commands;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account,
kodorvan\neurobot\models\settings,
kodorvan\neurobot\models\telegram\processes\language\select as process_language_select;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\settings,
kodorvan\edabil\models\telegram\processes\language\select as process_language_select;
// Library for languages support
use mirzaev\languages\language;
@@ -26,7 +26,7 @@ use SergiX44\Nutgram\Nutgram as telegram,
/**
* Command: society
*
* @package kodorvan\neurobot\models\telegram\commands
* @package kodorvan\edabil\models\telegram\commands
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,15 +2,14 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\commands;
namespace kodorvan\edabil\models\telegram\commands;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account,
kodorvan\neurobot\models\settings,
kodorvan\neurobot\models\tariff,
kodorvan\neurobot\models\localization,
kodorvan\neurobot\models\telegram\processes\language\select as process_language_select;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\settings,
kodorvan\edabil\models\localization,
kodorvan\edabil\models\telegram\processes\language\select as process_language_select;
// Library for languages support
use mirzaev\languages\language;
@@ -30,7 +29,7 @@ use SergiX44\Nutgram\Nutgram as telegram,
/**
* Command: start
*
* @package kodorvan\neurobot\models\telegram\commands
* @package kodorvan\edabil\models\telegram\commands
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
@@ -83,60 +82,26 @@ final class start extends command
// Initializing the account
$account = $robot->get('account');
// Initializing the account tariff
$tariff = $account->tariff();
// Declaring the tariff button
$button_tariff = [];
if ($tariff instanceof tariff) {
// Initialized the account tariff
// Initializing the tariff button
$button_tariff = button::make(
text: '🔐 ' . $tariff->type->label($language) . " ($tariff->used/$tariff->tokens)",
callback_data: 'tariffs'
);
} else {
// Not initialized the account tariff
// Initializing the tariff button
$button_tariff = button::make(
text: "⚠️ $localization->menu_tariff_empty",
callback_data: 'tariffs'
);
}
// Initializing the account chat
$chat = $account->chat();
// Initializing the keyboard
$keyboard = keyboard::make();
// Writing the row into the keyboard
$keyboard->addRow(
$button_tariff,
button::make(
text: '🧠 ' . $chat->network->label(),
callback_data: 'network'
)
);
// Writing the row into the keyboard
$keyboard->addRow(
button::make(
text: '⚙️ ' . $localization['menu_button_settings'],
callback_data: 'settings'
text: '🧠 Bebra',
callback_data: 'bebra'
)
);
$robot->sendMessage(
text: implode(
"\n\n",
[
"📋 *$localization->menu_title*",
$localization->menu_howto
]
array_filter(
[
"📋 *$localization->menu_title*",
unmarkdown($localization->menu_pipetc)
]
)
),
parse_mode: mode::MARKDOWN,
disable_notification: true,

View File

@@ -2,11 +2,11 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares;
namespace kodorvan\edabil\models\telegram\middlewares;
// Files of the project
use kodorvan\neurobot\models\account as model,
kodorvan\neurobot\models\authorizations;
use kodorvan\edabil\models\account as model,
kodorvan\edabil\models\authorizations;
// The library for languages support
use mirzaev\languages\language;
@@ -24,7 +24,7 @@ use Error as error;
/**
* Telegram middleware: account
*
* @package kodorvan\neurobot\models\telegram\middlewares
* @package kodorvan\edabil\models\telegram\middlewares
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,11 +2,11 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares;
namespace kodorvan\edabil\models\telegram\middlewares;
// Files of the project
use kodorvan\neurobot\models\account,
kodorvan\neurobot\models\authorizations as model;
use kodorvan\edabil\models\account,
kodorvan\edabil\models\authorizations as model;
// The library for languages support
use mirzaev\languages\language;
@@ -24,7 +24,7 @@ use Error as error;
/**
* Telegram middleware: authorizations
*
* @package kodorvan\neurobot\models\telegram\middlewares
* @package kodorvan\edabil\models\telegram\middlewares
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,11 +2,11 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares;
namespace kodorvan\edabil\models\telegram\middlewares;
// Files of the project
use kodorvan\neurobot\models\account,
kodorvan\neurobot\models\authorizations;
use kodorvan\edabil\models\account,
kodorvan\edabil\models\authorizations;
// The library for languages support
use mirzaev\languages\language as type;
@@ -24,7 +24,7 @@ use Error as error;
/**
* Telegram middleware: language
*
* @package kodorvan\neurobot\models\telegram\middlewares
* @package kodorvan\edabil\models\telegram\middlewares
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,13 +2,13 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares;
namespace kodorvan\edabil\models\telegram\middlewares;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account,
kodorvan\neurobot\models\localization as model,
kodorvan\neurobot\models\authorizations;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\localization as model,
kodorvan\edabil\models\authorizations;
// The library for languages support
use mirzaev\languages\language;
@@ -27,7 +27,7 @@ use Exception as exception,
/**
* Telegram middleware: localization
*
* @package kodorvan\neurobot\models\telegram\middlewares
* @package kodorvan\edabil\models\telegram\middlewares
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,13 +2,13 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares;
namespace kodorvan\edabil\models\telegram\middlewares;
// Files of the project
use kodorvan\neurobot\models\core,
kodorvan\neurobot\models\account,
kodorvan\neurobot\models\localization,
kodorvan\neurobot\models\authorizations;
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\localization,
kodorvan\edabil\models\authorizations;
// The library for languages support
use mirzaev\languages\language;
@@ -26,7 +26,7 @@ use Error as error;
/**
* Telegram middleware: language
*
* @package kodorvan\neurobot\models\telegram\middlewares
* @package kodorvan\edabil\models\telegram\middlewares
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,11 +2,11 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\middlewares\system;
namespace kodorvan\edabil\models\telegram\middlewares\system;
// Files of the project
use kodorvan\neurobot\models\account,
kodorvan\neurobot\models\authorizations;
use kodorvan\edabil\models\account,
kodorvan\edabil\models\authorizations;
// The library for languages support
use mirzaev\languages\language;
@@ -24,7 +24,7 @@ use Error as error;
/**
* Telegram middleware: system settings
*
* @package kodorvan\neurobot\models\telegram\middlewares\system
* @package kodorvan\edabil\models\telegram\middlewares\system
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>

View File

@@ -2,10 +2,10 @@
declare(strict_types=1);
namespace kodorvan\neurobot\models\telegram\processes\language;
namespace kodorvan\edabil\models\telegram\processes\language;
// Files of the project
use kodorvan\neurobot\models\core;
use kodorvan\edabil\models\core;
// Library for languages support
use mirzaev\languages\language;
@@ -20,7 +20,7 @@ use Zanzara\Context as context,
/**
* Telegram language select
*
* @package kodorvan\neurobot\models\telegram\processes\language
* @package kodorvan\edabil\models\telegram\processes\language
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
@@ -98,7 +98,7 @@ final class select extends core
$keyboard[$row === 0 && empty($keyboard[0]) ? 0 : ++$row] = [
[
'text' => '🗂 ' . $localization['select_language_button_add'],
'url' => 'https://git.svoboda.works/kodorvan/neurobot/src/branch/stable/kodorvan/neurobot/system/localizations'
'url' => 'https://git.svoboda.works/kodorvan/edabil/src/branch/stable/kodorvan/edabil/system/localizations'
]
];

View File

@@ -0,0 +1,124 @@
<?php
declare(strict_types=1);
namespace kodorvan\edabil\models\telegram;
// Files of the project
use kodorvan\edabil\models\core,
kodorvan\edabil\models\account,
kodorvan\edabil\models\chat,
kodorvan\edabil\models\localization,
kodorvan\edabil\models\settings as model,
kodorvan\edabil\models\telegram\processes\language\select as process_language_select;
// Library for languages support
use mirzaev\languages\language;
// The library for escaping all markdown symbols
use function mirzaev\unmarkdown;
// Framework for Telegram
use SergiX44\Nutgram\Nutgram as telegram,
SergiX44\Nutgram\Telegram\Properties\ParseMode as mode,
SergiX44\Nutgram\Telegram\Types\Message\Message as message,
SergiX44\Nutgram\Handlers\Type\Command as command,
SergiX44\Nutgram\Telegram\Types\Internal\InputFile as input,
SergiX44\Nutgram\Telegram\Types\Keyboard\InlineKeyboardMarkup as keyboard,
SergiX44\Nutgram\Telegram\Types\Keyboard\InlineKeyboardButton as button;
// Built-in libraries
use Error as error;
/**
* Telegram settings
*
* @package kodorvan\edabil\models\telegram
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
final class settings extends core
{
/**
* Language
*
* Write the language into the account and the robot instance
*
* @param telegram $robot The chat-robot instance
* @param language $language The language
*
* @return void
*/
public static function language(telegram $robot, language $language = LANGUAGE_DEFAULT): void
{
// Initializing the account
$account = $robot->get('account');
if ($account instanceof account) {
// Initialized the account
// Initializing the menu message localization
$localization = new localization($language);
if ($localization instanceof localization) {
// Initialized the localization
// Initializing the account old language
$from = $account->language;
// Writing the language into the account
$account->language = $language;
// Serializing the account
$account->serialize();
// Writing the account into the database;
$updated = $account->update();
// Deserializing the account
$account->deserialize();
if ($updated instanceof account) {
// Writed the account into the database
// Writing the account into the robot instance
$robot->set('account', $account);
try {
// Initializing the account new language
$to = $account->language;
// Sending the message
$robot->sendMessage(
text: "✅ *$localization->settings_language_update_success:* " . trim($from->flag() . ' ' . $from->label($to)) . ' → *' . trim($to->flag() . ' ' . $to->label($to)) . '*',
parse_mode: mode::MARKDOWN,
disable_notification: true
);
// Sending the message
$robot->answerCallbackQuery(
text: $to->label($to),
show_alert: false
);
} catch (error $error) {
// Failed to send the message about language update
// Writing into the errors output buffer
error_log((string) $error);
// Sending the message
$robot->sendMessage(
text: "❎ *$localization->settings_language_update_fail*",
parse_mode: mode::MARKDOWN,
disable_notification: true
);
// Ending the conversation process
$robot->endConversation();
}
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More