azerai-plugins-reminder 5.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- azerai_plugins_reminder-5.0.0/LICENSE +21 -0
- azerai_plugins_reminder-5.0.0/PKG-INFO +105 -0
- azerai_plugins_reminder-5.0.0/README.md +72 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder/__init__.py +22 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder/info.py +9 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder/main.py +448 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder/prompts.py +80 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder.egg-info/PKG-INFO +105 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder.egg-info/SOURCES.txt +12 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder.egg-info/dependency_links.txt +1 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder.egg-info/requires.txt +2 -0
- azerai_plugins_reminder-5.0.0/azerai_plugins_reminder.egg-info/top_level.txt +1 -0
- azerai_plugins_reminder-5.0.0/pyproject.toml +50 -0
- azerai_plugins_reminder-5.0.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AzerStudio Dev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: azerai-plugins-reminder
|
|
3
|
+
Version: 5.0.0
|
|
4
|
+
Summary: **AzerAI Reminder Plugin** - Xatırladıcı Plugin
|
|
5
|
+
Author-email: AzStudio Dev <Info.AzerStudioDev@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder
|
|
8
|
+
Project-URL: Repository, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder.git
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/issues
|
|
10
|
+
Keywords: azerai,plugins,ai,azerbaijani,reminder
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
22
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
23
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
|
24
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
25
|
+
Classifier: Operating System :: MacOS
|
|
26
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: livekit-agents
|
|
31
|
+
Requires-Dist: apscheduler
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# 📅 AzerAI Reminder Plugin
|
|
35
|
+
|
|
36
|
+
**AzerAI** - Azərbaycan dilində qabaqcıl səsli AI asistent xatırladıcı üçün plugin
|
|
37
|
+
|
|
38
|
+
## Xüsusiyyətlər
|
|
39
|
+
|
|
40
|
+
- ⏰ **Zamanlı xatırladıcılar** - Specific tarix və saatda
|
|
41
|
+
- 📅 **Günlük xatırladıcılar** - Hər gün təkrar olunan
|
|
42
|
+
- ⏸️ **Pause/Resume** - Xatırladıcıları idarə et
|
|
43
|
+
- 🗑️ **Sil** - Artıq lazım olmayanları sil
|
|
44
|
+
- 💾 **JSON saxlama** - Məlumatlar lokal olaraq saxlanılır
|
|
45
|
+
- 🔄 **APScheduler** - Güclü zamanlayıcı sistemi
|
|
46
|
+
|
|
47
|
+
## Platform Dəstəyi
|
|
48
|
+
|
|
49
|
+
- 💻 **Windows** - Windows 10/11 dəstəklənir
|
|
50
|
+
- 🍎 **macOS** - macOS 10.15+ dəstəklənir
|
|
51
|
+
- 🐧 **Linux** - Ubuntu, CentOS, Debian dəstəklənir
|
|
52
|
+
- 🐍 **Python** - Python 3.8+ tələb olunur
|
|
53
|
+
|
|
54
|
+
## Quraşdırma
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install AzerAI-Plugins-Reminder
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## İstifadə
|
|
61
|
+
|
|
62
|
+
Plugin avtomatik olaraq AzerAI tərəfindən aşkar edilir.
|
|
63
|
+
|
|
64
|
+
### Əmrlər
|
|
65
|
+
|
|
66
|
+
- `"5 dəqiqə sonra mənə xatırlat"` - Vaxtlı xatırladıcı
|
|
67
|
+
- `"Hər gün saat 09:00da mənə xatırlat"` - Günlük xatırladıcı
|
|
68
|
+
- `"Xatırladıcılarmı göstər"` - Siyahı
|
|
69
|
+
- `"X xatırladıcınızı dayandırın"` - Pause
|
|
70
|
+
- `"X xatırladıcınızı davam et"` - Resume
|
|
71
|
+
- `"X xatırladıcınızı sil"` - Sil
|
|
72
|
+
|
|
73
|
+
## Fayl struktur
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
azerai_plugins_reminder/
|
|
77
|
+
├── __init__.py
|
|
78
|
+
├── info.py
|
|
79
|
+
├── main.py
|
|
80
|
+
└── prompts.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Fayllar
|
|
84
|
+
|
|
85
|
+
- `azerai_reminders.json` - Xatırladıcı məlumatları
|
|
86
|
+
|
|
87
|
+
## Asılılıqlar
|
|
88
|
+
|
|
89
|
+
- `livekit-agents` - AI agent framework
|
|
90
|
+
- `apscheduler` - Zamanlayıcı
|
|
91
|
+
|
|
92
|
+
## 📄 Lisenziya
|
|
93
|
+
|
|
94
|
+
Bu layihə MIT Lisenziyası ilə lisenziyalaşdırılıb - [LICENSE](https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/blob/main/LICENSE) faylına baxın.
|
|
95
|
+
|
|
96
|
+
## 📞 Əlaqə
|
|
97
|
+
|
|
98
|
+
- **Müəllif:** AzerStudio Dev
|
|
99
|
+
- **Email:** Info.AzerStudioDev@gmail.com
|
|
100
|
+
- **GitHub:** https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder
|
|
101
|
+
- **PyPI:** https://pypi.org/project/AzerAI-Plugins-Reminder/
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**🇦🇿 Azərbaycanın ilk tam plugin ekosistemli AI asistentinin Reminder plugini!** 🚀
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 📅 AzerAI Reminder Plugin
|
|
2
|
+
|
|
3
|
+
**AzerAI** - Azərbaycan dilində qabaqcıl səsli AI asistent xatırladıcı üçün plugin
|
|
4
|
+
|
|
5
|
+
## Xüsusiyyətlər
|
|
6
|
+
|
|
7
|
+
- ⏰ **Zamanlı xatırladıcılar** - Specific tarix və saatda
|
|
8
|
+
- 📅 **Günlük xatırladıcılar** - Hər gün təkrar olunan
|
|
9
|
+
- ⏸️ **Pause/Resume** - Xatırladıcıları idarə et
|
|
10
|
+
- 🗑️ **Sil** - Artıq lazım olmayanları sil
|
|
11
|
+
- 💾 **JSON saxlama** - Məlumatlar lokal olaraq saxlanılır
|
|
12
|
+
- 🔄 **APScheduler** - Güclü zamanlayıcı sistemi
|
|
13
|
+
|
|
14
|
+
## Platform Dəstəyi
|
|
15
|
+
|
|
16
|
+
- 💻 **Windows** - Windows 10/11 dəstəklənir
|
|
17
|
+
- 🍎 **macOS** - macOS 10.15+ dəstəklənir
|
|
18
|
+
- 🐧 **Linux** - Ubuntu, CentOS, Debian dəstəklənir
|
|
19
|
+
- 🐍 **Python** - Python 3.8+ tələb olunur
|
|
20
|
+
|
|
21
|
+
## Quraşdırma
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install AzerAI-Plugins-Reminder
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## İstifadə
|
|
28
|
+
|
|
29
|
+
Plugin avtomatik olaraq AzerAI tərəfindən aşkar edilir.
|
|
30
|
+
|
|
31
|
+
### Əmrlər
|
|
32
|
+
|
|
33
|
+
- `"5 dəqiqə sonra mənə xatırlat"` - Vaxtlı xatırladıcı
|
|
34
|
+
- `"Hər gün saat 09:00da mənə xatırlat"` - Günlük xatırladıcı
|
|
35
|
+
- `"Xatırladıcılarmı göstər"` - Siyahı
|
|
36
|
+
- `"X xatırladıcınızı dayandırın"` - Pause
|
|
37
|
+
- `"X xatırladıcınızı davam et"` - Resume
|
|
38
|
+
- `"X xatırladıcınızı sil"` - Sil
|
|
39
|
+
|
|
40
|
+
## Fayl struktur
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
azerai_plugins_reminder/
|
|
44
|
+
├── __init__.py
|
|
45
|
+
├── info.py
|
|
46
|
+
├── main.py
|
|
47
|
+
└── prompts.py
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Fayllar
|
|
51
|
+
|
|
52
|
+
- `azerai_reminders.json` - Xatırladıcı məlumatları
|
|
53
|
+
|
|
54
|
+
## Asılılıqlar
|
|
55
|
+
|
|
56
|
+
- `livekit-agents` - AI agent framework
|
|
57
|
+
- `apscheduler` - Zamanlayıcı
|
|
58
|
+
|
|
59
|
+
## 📄 Lisenziya
|
|
60
|
+
|
|
61
|
+
Bu layihə MIT Lisenziyası ilə lisenziyalaşdırılıb - [LICENSE](https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/blob/main/LICENSE) faylına baxın.
|
|
62
|
+
|
|
63
|
+
## 📞 Əlaqə
|
|
64
|
+
|
|
65
|
+
- **Müəllif:** AzerStudio Dev
|
|
66
|
+
- **Email:** Info.AzerStudioDev@gmail.com
|
|
67
|
+
- **GitHub:** https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder
|
|
68
|
+
- **PyPI:** https://pypi.org/project/AzerAI-Plugins-Reminder/
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
**🇦🇿 Azərbaycanın ilk tam plugin ekosistemli AI asistentinin Reminder plugini!** 🚀
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AzerAI Reminder Plugin - Paketin Giriş Nöqtəsi Və Export Olunan Funksiyalar
|
|
3
|
+
"""
|
|
4
|
+
from .main import (
|
|
5
|
+
create_reminder,
|
|
6
|
+
create_daily_reminder,
|
|
7
|
+
list_reminders,
|
|
8
|
+
delete_reminder,
|
|
9
|
+
pause_reminder,
|
|
10
|
+
resume_reminder,
|
|
11
|
+
reminder_tools
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"create_reminder",
|
|
16
|
+
"create_daily_reminder",
|
|
17
|
+
"list_reminders",
|
|
18
|
+
"delete_reminder",
|
|
19
|
+
"pause_reminder",
|
|
20
|
+
"resume_reminder",
|
|
21
|
+
"reminder_tools"
|
|
22
|
+
]
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AzerAI Reminder Plugin - Xatırladıcı Alətləri
|
|
3
|
+
"""
|
|
4
|
+
import logging
|
|
5
|
+
import json
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from typing import Dict, Any
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from livekit.agents import function_tool, RunContext
|
|
10
|
+
|
|
11
|
+
# APScheduler idxalı
|
|
12
|
+
try:
|
|
13
|
+
from apscheduler.schedulers.background import BackgroundScheduler
|
|
14
|
+
from apscheduler.triggers.date import DateTrigger
|
|
15
|
+
from apscheduler.triggers.interval import IntervalTrigger
|
|
16
|
+
from apscheduler.triggers.cron import CronTrigger
|
|
17
|
+
APSCHEDULER_AVAILABLE = True
|
|
18
|
+
except ImportError:
|
|
19
|
+
APSCHEDULER_AVAILABLE = False
|
|
20
|
+
print("[NO] APScheduler tapılmadı! Xatırlatma sistemi işləməz. Zəhmət olmasa 'pip install apscheduler' əmrini işə salın.")
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger("AzerAI-Plugins-Reminder")
|
|
23
|
+
|
|
24
|
+
class ReminderTools:
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.reminders_file = Path("azerai_reminders.json")
|
|
27
|
+
self.active_reminders: Dict[str, Dict[str, Any]] = {}
|
|
28
|
+
self.session_ref = None
|
|
29
|
+
self.loop_ref = None
|
|
30
|
+
self.running = True
|
|
31
|
+
|
|
32
|
+
# APScheduler quraşdırması
|
|
33
|
+
if APSCHEDULER_AVAILABLE:
|
|
34
|
+
self.scheduler = BackgroundScheduler()
|
|
35
|
+
self.scheduler.start()
|
|
36
|
+
logger.info("APScheduler başladıldı")
|
|
37
|
+
else:
|
|
38
|
+
self.scheduler = None
|
|
39
|
+
logger.error("APScheduler tapılmadı! Xatırlatma sistemi işləməyə bilər.")
|
|
40
|
+
print("[NO] APScheduler tapılmadı! Zəhmət olmasa 'pip install apscheduler' əmrini işə salın.")
|
|
41
|
+
return
|
|
42
|
+
|
|
43
|
+
# Faylı yüklə
|
|
44
|
+
self._load_reminders()
|
|
45
|
+
|
|
46
|
+
# Mövcud xatırlatmaları planlaşdır
|
|
47
|
+
self._schedule_existing_reminders()
|
|
48
|
+
|
|
49
|
+
def _schedule_existing_reminders(self):
|
|
50
|
+
"""Mövcud xatırlatmaları APScheduler ilə planlaşdır"""
|
|
51
|
+
if not self.scheduler:
|
|
52
|
+
return
|
|
53
|
+
|
|
54
|
+
for reminder_id, reminder in self.active_reminders.items():
|
|
55
|
+
if reminder.get('active', True) and not reminder.get('paused', False):
|
|
56
|
+
self._schedule_reminder(reminder_id, reminder)
|
|
57
|
+
|
|
58
|
+
def _schedule_reminder(self, reminder_id: str, reminder: Dict[str, Any]):
|
|
59
|
+
"""Tək bir xatırlatmanı planlaşdır"""
|
|
60
|
+
if not self.scheduler:
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
# Köhnə job varsa sil
|
|
65
|
+
job_id = f"reminder_{reminder_id}"
|
|
66
|
+
if self.scheduler.get_job(job_id):
|
|
67
|
+
self.scheduler.remove_job(job_id)
|
|
68
|
+
|
|
69
|
+
# Gündəlik xatırlatma
|
|
70
|
+
if reminder.get('daily', False):
|
|
71
|
+
time_parts = reminder['time'].split(':')
|
|
72
|
+
hour, minute = int(time_parts[0]), int(time_parts[1])
|
|
73
|
+
self.scheduler.add_job(
|
|
74
|
+
func=self._trigger_reminder_job,
|
|
75
|
+
trigger=CronTrigger(hour=hour, minute=minute),
|
|
76
|
+
args=[reminder_id, reminder],
|
|
77
|
+
id=job_id,
|
|
78
|
+
replace_existing=True
|
|
79
|
+
)
|
|
80
|
+
logger.info(f"Gündəlik xatırlatma planlaşdırıldı: {reminder_id} saat {reminder['time']}")
|
|
81
|
+
|
|
82
|
+
# Müəyyən tarix/vaxt
|
|
83
|
+
elif 'datetime' in reminder:
|
|
84
|
+
reminder_time = datetime.fromisoformat(reminder['datetime'])
|
|
85
|
+
self.scheduler.add_job(
|
|
86
|
+
func=self._trigger_reminder_job,
|
|
87
|
+
trigger=DateTrigger(run_date=reminder_time),
|
|
88
|
+
args=[reminder_id, reminder],
|
|
89
|
+
id=job_id,
|
|
90
|
+
replace_existing=True
|
|
91
|
+
)
|
|
92
|
+
logger.info(f"Tarixli xatırlatma planlaşdırıldı: {reminder_id} vaxt {reminder_time}")
|
|
93
|
+
|
|
94
|
+
# Nisbi vaxt
|
|
95
|
+
elif 'relative_time' in reminder:
|
|
96
|
+
seconds = reminder['relative_time']
|
|
97
|
+
self.scheduler.add_job(
|
|
98
|
+
func=self._trigger_reminder_job,
|
|
99
|
+
trigger=IntervalTrigger(seconds=seconds),
|
|
100
|
+
args=[reminder_id, reminder],
|
|
101
|
+
id=job_id,
|
|
102
|
+
replace_existing=True
|
|
103
|
+
)
|
|
104
|
+
logger.info(f"Nisbi xatırlatma planlaşdırıldı: {reminder_id} {seconds}s sonra")
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.error(f"Xatırlatma planlaşdırma xətası {reminder_id}: {e}")
|
|
108
|
+
|
|
109
|
+
def _trigger_reminder_job(self, reminder_id: str, reminder: Dict[str, Any]):
|
|
110
|
+
"""APScheduler job-dan çağırılan xatırlatma funksiyası"""
|
|
111
|
+
try:
|
|
112
|
+
self._trigger_reminder(reminder_id, reminder)
|
|
113
|
+
|
|
114
|
+
# Tək dəfəlik xatırlatmaları deaktiv et (gündəliklər istisna)
|
|
115
|
+
if not reminder.get('daily', False):
|
|
116
|
+
if reminder_id in self.active_reminders:
|
|
117
|
+
self.active_reminders[reminder_id]['active'] = False
|
|
118
|
+
self.active_reminders[reminder_id]['triggered_at'] = datetime.now().isoformat()
|
|
119
|
+
self._save_reminders()
|
|
120
|
+
|
|
121
|
+
# Job-u sil
|
|
122
|
+
job_id = f"reminder_{reminder_id}"
|
|
123
|
+
if self.scheduler.get_job(job_id):
|
|
124
|
+
self.scheduler.remove_job(job_id)
|
|
125
|
+
|
|
126
|
+
# Gündəlik xatırlatmalar üçün son tətiklənmə tarixini yenilə
|
|
127
|
+
elif reminder.get('daily', False):
|
|
128
|
+
if reminder_id in self.active_reminders:
|
|
129
|
+
self.active_reminders[reminder_id]['last_triggered'] = datetime.now().date().isoformat()
|
|
130
|
+
self._save_reminders()
|
|
131
|
+
|
|
132
|
+
except Exception as e:
|
|
133
|
+
logger.error(f"Xatırlatma job xətası {reminder_id}: {e}")
|
|
134
|
+
|
|
135
|
+
def _load_reminders(self):
|
|
136
|
+
"""JSON faylından xatırlatmaları yüklə"""
|
|
137
|
+
try:
|
|
138
|
+
if self.reminders_file.exists():
|
|
139
|
+
with open(self.reminders_file, 'r', encoding='utf-8') as f:
|
|
140
|
+
data = json.load(f)
|
|
141
|
+
self.active_reminders = data.get('reminders', {})
|
|
142
|
+
logger.info(f"{len(self.active_reminders)} xatırlatma fayldan yükləndi")
|
|
143
|
+
else:
|
|
144
|
+
# Boş fayl yarat
|
|
145
|
+
self._save_reminders()
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.error(f"Xatırlatmalar yüklənmə xətası: {e}")
|
|
148
|
+
self.active_reminders = {}
|
|
149
|
+
|
|
150
|
+
def _save_reminders(self):
|
|
151
|
+
"""Xatırlatmaları JSON faylına saxla"""
|
|
152
|
+
try:
|
|
153
|
+
data = {
|
|
154
|
+
'reminders': self.active_reminders,
|
|
155
|
+
'last_updated': datetime.now().isoformat()
|
|
156
|
+
}
|
|
157
|
+
with open(self.reminders_file, 'w', encoding='utf-8') as f:
|
|
158
|
+
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
159
|
+
logger.info("Xatırlatmalar fayla saxlandı")
|
|
160
|
+
except Exception as e:
|
|
161
|
+
logger.error(f"Xatırlatmalar saxlama xətası: {e}")
|
|
162
|
+
|
|
163
|
+
def _trigger_reminder(self, reminder_id: str, reminder: Dict[str, Any]):
|
|
164
|
+
"""Xatırlatmanı tətiklə və bildiriş göndər"""
|
|
165
|
+
title = reminder.get('title', 'Xatırlatma')
|
|
166
|
+
message = reminder.get('message', f'⏰ Xatırlatma: {title}')
|
|
167
|
+
|
|
168
|
+
logger.info(f"=== XATIRLATMA TƏTİKLƏNDİ: {reminder_id} - '{title}' ===")
|
|
169
|
+
print(f"[OK] XATIRLATMA: {title}")
|
|
170
|
+
|
|
171
|
+
# Session-a bildiriş göndər
|
|
172
|
+
if self.session_ref and self.loop_ref:
|
|
173
|
+
try:
|
|
174
|
+
print(f"[OK] DEBUG: Session-a xatırlatma bildirişi göndərməyə cəhd edilir...")
|
|
175
|
+
print(f"[OK] DEBUG: Session var: {self.session_ref is not None}")
|
|
176
|
+
print(f"[OK] DEBUG: Loop var: {self.loop_ref is not None}")
|
|
177
|
+
|
|
178
|
+
# Daxili köməkçi funksiya təyin et
|
|
179
|
+
async def send_reminder_notification():
|
|
180
|
+
try:
|
|
181
|
+
print(f"[OK] SESSION'A GÖNDƏRİLİR: Xatırlatma: {title} müddəti bitdi!")
|
|
182
|
+
await self.session_ref.generate_reply(
|
|
183
|
+
instructions=f"role: assistant | content: {message} bunu istifadəçiyə deyin: Bu xatırlatma tətikləndi və artıq deaktiv."
|
|
184
|
+
)
|
|
185
|
+
print(f"[OK] SESSION'A UĞURLA GÖNDƏRİLDİ: {title}")
|
|
186
|
+
except Exception as e:
|
|
187
|
+
print(f"[NO] SESSION'A GÖNDƏRİLMƏDİ: {e}")
|
|
188
|
+
|
|
189
|
+
future = __import__('asyncio').run_coroutine_threadsafe(
|
|
190
|
+
send_reminder_notification(),
|
|
191
|
+
self.loop_ref
|
|
192
|
+
)
|
|
193
|
+
print(f"[OK] DEBUG: Xatırlatma future yaradıldı: {future}")
|
|
194
|
+
logger.info(f"Xatırlatma bildirişi göndərildi: {title}")
|
|
195
|
+
except Exception as e:
|
|
196
|
+
logger.error(f"Xatırlatma bildirişi göndərilmədi: {e}")
|
|
197
|
+
print(f"[NO] SESSION'A GÖNDƏRİLMƏDİ: {e}")
|
|
198
|
+
else:
|
|
199
|
+
print(f"[OK] DEBUG: Session-a göndərə bilmirəm - session və ya loop çatışmır")
|
|
200
|
+
print(f"[OK] DEBUG: Session var: {self.session_ref is not None}")
|
|
201
|
+
print(f"[OK] DEBUG: Loop var: {self.loop_ref is not None}")
|
|
202
|
+
logger.warning(f"'{title}' xatırlatması üçün session referansı yoxdur")
|
|
203
|
+
|
|
204
|
+
def update_session_reference(self, ctx: RunContext):
|
|
205
|
+
"""Session referansını yenilə"""
|
|
206
|
+
if not self.session_ref:
|
|
207
|
+
self.session_ref = ctx.session
|
|
208
|
+
self.loop_ref = __import__('asyncio').get_running_loop()
|
|
209
|
+
logger.info("Xatırlatmalar üçün session referansı yeniləndi")
|
|
210
|
+
print("[OK] Session referansı xatırlatma sistemi üçün yeniləndi")
|
|
211
|
+
|
|
212
|
+
@function_tool()
|
|
213
|
+
async def create_daily_reminder(self, ctx: RunContext, title: str, time_str: str, message: str = ""):
|
|
214
|
+
"""Gündəlik xatırlatma yarat."""
|
|
215
|
+
self.update_session_reference(ctx)
|
|
216
|
+
|
|
217
|
+
reminder_id = f"reminder_{len(self.active_reminders) + 1}"
|
|
218
|
+
|
|
219
|
+
try:
|
|
220
|
+
datetime.strptime(time_str, "%H:%M")
|
|
221
|
+
except ValueError:
|
|
222
|
+
return """Yanlış vaxt formatı. 'SS:DD' istifadə edin."""
|
|
223
|
+
|
|
224
|
+
reminder_data = {
|
|
225
|
+
'title': title,
|
|
226
|
+
'message': message or f'📅 Gündəlik: {title}',
|
|
227
|
+
'created_at': datetime.now().isoformat(),
|
|
228
|
+
'active': True,
|
|
229
|
+
'daily': True,
|
|
230
|
+
'time': time_str
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
self.active_reminders[reminder_id] = reminder_data
|
|
234
|
+
self._save_reminders()
|
|
235
|
+
|
|
236
|
+
# APScheduler ilə planlaşdır
|
|
237
|
+
self._schedule_reminder(reminder_id, reminder_data)
|
|
238
|
+
|
|
239
|
+
print(f"[OK] Gündəlik xatırlatma: '{title}' - {time_str}")
|
|
240
|
+
return f"Gündəlik xatırlatma '{title}' yaradıldı: {time_str}"
|
|
241
|
+
|
|
242
|
+
@function_tool()
|
|
243
|
+
async def create_reminder(self, ctx: RunContext, title: str, message: str = "",
|
|
244
|
+
datetime_str: str = "", hours: int = 0, minutes: int = 0, days: int = 0):
|
|
245
|
+
"""Yeni xatırlatma yarat."""
|
|
246
|
+
self.update_session_reference(ctx)
|
|
247
|
+
|
|
248
|
+
reminder_id = f"reminder_{len(self.active_reminders) + 1}"
|
|
249
|
+
|
|
250
|
+
reminder_data = {
|
|
251
|
+
'title': title,
|
|
252
|
+
'message': message or f'⏰ Xatırlatma: {title}',
|
|
253
|
+
'created_at': datetime.now().isoformat(),
|
|
254
|
+
'active': True
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if datetime_str:
|
|
258
|
+
try:
|
|
259
|
+
reminder_time = datetime.strptime(datetime_str, "%Y-%m-%d %H:%M")
|
|
260
|
+
reminder_data['datetime'] = reminder_time.isoformat()
|
|
261
|
+
time_desc = datetime_str
|
|
262
|
+
except ValueError:
|
|
263
|
+
return """Yanlış tarix formatı. 'İİİİ-AA-GG SS:DD' istifadə edin."""
|
|
264
|
+
else:
|
|
265
|
+
total_seconds = (days * 86400) + (hours * 3600) + (minutes * 60)
|
|
266
|
+
if total_seconds > 0:
|
|
267
|
+
reminder_data['relative_time'] = total_seconds
|
|
268
|
+
time_parts = []
|
|
269
|
+
if days > 0:
|
|
270
|
+
time_parts.append(f"{days} gün")
|
|
271
|
+
if hours > 0:
|
|
272
|
+
time_parts.append(f"{hours} saat")
|
|
273
|
+
if minutes > 0:
|
|
274
|
+
time_parts.append(f"{minutes} dəqiqə")
|
|
275
|
+
time_desc = " ".join(time_parts) + " sonra"
|
|
276
|
+
else:
|
|
277
|
+
return """Düzgün bir vaxt göstərin."""
|
|
278
|
+
|
|
279
|
+
self.active_reminders[reminder_id] = reminder_data
|
|
280
|
+
self._save_reminders()
|
|
281
|
+
|
|
282
|
+
# APScheduler ilə planlaşdır
|
|
283
|
+
self._schedule_reminder(reminder_id, reminder_data)
|
|
284
|
+
|
|
285
|
+
print(f"[OK] Xatırlatma: '{title}' - {time_desc}")
|
|
286
|
+
return f"Xatırlatma '{title}' yaradıldı: {time_desc}"
|
|
287
|
+
|
|
288
|
+
@function_tool()
|
|
289
|
+
async def list_reminders(self, ctx: RunContext):
|
|
290
|
+
"""Bütün xatırlatmaları göstər."""
|
|
291
|
+
# Session referansını yenilə
|
|
292
|
+
self.update_session_reference(ctx)
|
|
293
|
+
reminders_list = []
|
|
294
|
+
|
|
295
|
+
for reminder_id, reminder in self.active_reminders.items():
|
|
296
|
+
# Vəziyyəti təyin et
|
|
297
|
+
if reminder.get('paused', False):
|
|
298
|
+
status = "⏸️ Dayandırılmış"
|
|
299
|
+
elif reminder.get('daily', False):
|
|
300
|
+
status = "📅 Gündəlik"
|
|
301
|
+
elif reminder.get('active', True):
|
|
302
|
+
status = "🟢 Aktif"
|
|
303
|
+
else:
|
|
304
|
+
status = "🔴 Deaktif"
|
|
305
|
+
|
|
306
|
+
title = reminder.get('title', 'Başlıqsız')
|
|
307
|
+
|
|
308
|
+
# Zaman məlumatını formatla
|
|
309
|
+
if reminder.get('daily', False) and 'time' in reminder:
|
|
310
|
+
time_info = f"Hər gün {reminder['time']}"
|
|
311
|
+
if reminder.get('last_triggered'):
|
|
312
|
+
time_info += f" (Son: {reminder['last_triggered']})"
|
|
313
|
+
elif 'datetime' in reminder:
|
|
314
|
+
time_info = f"Zaman: {reminder['datetime']}"
|
|
315
|
+
elif 'relative_time' in reminder:
|
|
316
|
+
seconds = reminder['relative_time']
|
|
317
|
+
hours = seconds // 3600
|
|
318
|
+
minutes = (seconds % 3600) // 60
|
|
319
|
+
time_info = f"Müddət: {hours}sa {minutes}dk"
|
|
320
|
+
else:
|
|
321
|
+
time_info = "Vaxt göstərilməyib"
|
|
322
|
+
|
|
323
|
+
reminders_list.append(f"{status} - {title} ({time_info})")
|
|
324
|
+
|
|
325
|
+
if reminders_list:
|
|
326
|
+
result = "\n".join(reminders_list)
|
|
327
|
+
print(f"[OK] XATIRLATMALAR:\n{result}")
|
|
328
|
+
return f"Xatırlatmalar:\n{result}"
|
|
329
|
+
else:
|
|
330
|
+
print("[OK] XATIRLATMA YOXDUR")
|
|
331
|
+
return "Xatırlatma tapılmadı"
|
|
332
|
+
|
|
333
|
+
@function_tool()
|
|
334
|
+
async def pause_reminder(self, ctx: RunContext, title: str):
|
|
335
|
+
"""Xatırlatmanı dayandır."""
|
|
336
|
+
self.update_session_reference(ctx)
|
|
337
|
+
|
|
338
|
+
try:
|
|
339
|
+
paused_reminders = []
|
|
340
|
+
|
|
341
|
+
for reminder_id, reminder in self.active_reminders.items():
|
|
342
|
+
if reminder.get('title', '').lower() == title.lower() and reminder.get('active', True):
|
|
343
|
+
reminder['active'] = False
|
|
344
|
+
reminder['paused'] = True
|
|
345
|
+
reminder['paused_at'] = datetime.now().isoformat()
|
|
346
|
+
paused_reminders.append(reminder_id)
|
|
347
|
+
|
|
348
|
+
# APScheduler job-u sil
|
|
349
|
+
job_id = f"reminder_{reminder_id}"
|
|
350
|
+
if self.scheduler and self.scheduler.get_job(job_id):
|
|
351
|
+
self.scheduler.remove_job(job_id)
|
|
352
|
+
|
|
353
|
+
logger.info(f"=== XATIRLATMA DAYANDIRILDI: {reminder_id} - '{title}' ===")
|
|
354
|
+
|
|
355
|
+
if paused_reminders:
|
|
356
|
+
self._save_reminders()
|
|
357
|
+
print(f"[OK] Xatırlatma dayandırıldı: '{title}'")
|
|
358
|
+
return f"'{title}' xatırlatması uğurla dayandırıldı"
|
|
359
|
+
else:
|
|
360
|
+
print(f"[NO] Aktiv xatırlatma tapılmadı: '{title}'")
|
|
361
|
+
return f"'{title}' başlıqlı aktiv xatırlatma tapılmadı"
|
|
362
|
+
except Exception as e:
|
|
363
|
+
logger.error(f"Xatırlatma dayandırılarkən xəta: {e}")
|
|
364
|
+
return f"Xatırlatma dayandırılarkən xəta baş verdi: {str(e)}"
|
|
365
|
+
|
|
366
|
+
@function_tool()
|
|
367
|
+
async def resume_reminder(self, ctx: RunContext, title: str):
|
|
368
|
+
"""Xatırlatmanı davam etdir."""
|
|
369
|
+
self.update_session_reference(ctx)
|
|
370
|
+
|
|
371
|
+
resumed_reminders = []
|
|
372
|
+
|
|
373
|
+
for reminder_id, reminder in self.active_reminders.items():
|
|
374
|
+
if reminder.get('title', '').lower() == title.lower() and reminder.get('paused', False):
|
|
375
|
+
# Vaxtı hesabla
|
|
376
|
+
if 'paused_at' in reminder and 'relative_time' in reminder:
|
|
377
|
+
paused_time = datetime.fromisoformat(reminder['paused_at'])
|
|
378
|
+
created_time = datetime.fromisoformat(reminder['created_at'])
|
|
379
|
+
elapsed = (paused_time - created_time).total_seconds()
|
|
380
|
+
remaining = reminder['relative_time'] - elapsed
|
|
381
|
+
|
|
382
|
+
if remaining > 0:
|
|
383
|
+
reminder['relative_time'] = remaining
|
|
384
|
+
reminder['created_at'] = datetime.now().isoformat()
|
|
385
|
+
|
|
386
|
+
reminder['active'] = True
|
|
387
|
+
reminder['paused'] = False
|
|
388
|
+
reminder.pop('paused_at', None)
|
|
389
|
+
resumed_reminders.append(reminder_id)
|
|
390
|
+
|
|
391
|
+
# APScheduler ilə yenidən planlaşdır
|
|
392
|
+
self._schedule_reminder(reminder_id, reminder)
|
|
393
|
+
|
|
394
|
+
logger.info(f"=== XATIRLATMA DAVAM ETTİRİLDİ: {reminder_id} - '{title}' ===")
|
|
395
|
+
|
|
396
|
+
if resumed_reminders:
|
|
397
|
+
self._save_reminders()
|
|
398
|
+
print(f"[OK] Xatırlatma davam etdirildi: '{title}'")
|
|
399
|
+
return f"'{title}' xatırlatması uğurla davam etdirildi"
|
|
400
|
+
else:
|
|
401
|
+
print(f"[NO] Dayandırılmış xatırlatma tapılmadı: '{title}'")
|
|
402
|
+
return f"'{title}' başlıqlı dayandırılmış xatırlatma tapılmadı"
|
|
403
|
+
|
|
404
|
+
@function_tool()
|
|
405
|
+
async def delete_reminder(self, ctx: RunContext, title: str):
|
|
406
|
+
"""Xatırlatmanı sil."""
|
|
407
|
+
self.update_session_reference(ctx)
|
|
408
|
+
deleted_reminders = []
|
|
409
|
+
|
|
410
|
+
for reminder_id, reminder in list(self.active_reminders.items()):
|
|
411
|
+
if reminder.get('title', '').lower() == title.lower():
|
|
412
|
+
del self.active_reminders[reminder_id]
|
|
413
|
+
deleted_reminders.append(reminder_id)
|
|
414
|
+
|
|
415
|
+
# APScheduler job-u sil
|
|
416
|
+
job_id = f"reminder_{reminder_id}"
|
|
417
|
+
if self.scheduler and self.scheduler.get_job(job_id):
|
|
418
|
+
self.scheduler.remove_job(job_id)
|
|
419
|
+
|
|
420
|
+
logger.info(f"=== XATIRLATMA SİLİNDİ: {reminder_id} - '{title}' ===")
|
|
421
|
+
|
|
422
|
+
if deleted_reminders:
|
|
423
|
+
self._save_reminders()
|
|
424
|
+
print(f"[OK] Xatırlatma silindi: '{title}'")
|
|
425
|
+
return f"'{title}' xatırlatması uğurla silindi"
|
|
426
|
+
else:
|
|
427
|
+
print(f"[NO] Xatırlatma tapılmadı: '{title}'")
|
|
428
|
+
return f"'{title}' başlıqlı xatırlatma tapılmadı"
|
|
429
|
+
|
|
430
|
+
def __del__(self):
|
|
431
|
+
"""Təmizləmə əməliyyatı"""
|
|
432
|
+
self.running = False
|
|
433
|
+
if self.scheduler:
|
|
434
|
+
try:
|
|
435
|
+
self.scheduler.shutdown()
|
|
436
|
+
logger.info("APScheduler söndürüldü")
|
|
437
|
+
except:
|
|
438
|
+
pass
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
# Qlobal nümunə
|
|
442
|
+
reminder_tools = ReminderTools()
|
|
443
|
+
create_reminder = reminder_tools.create_reminder
|
|
444
|
+
create_daily_reminder = reminder_tools.create_daily_reminder
|
|
445
|
+
list_reminders = reminder_tools.list_reminders
|
|
446
|
+
delete_reminder = reminder_tools.delete_reminder
|
|
447
|
+
pause_reminder = reminder_tools.pause_reminder
|
|
448
|
+
resume_reminder = reminder_tools.resume_reminder
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AzerAI Reminder Plugin - Xatırladıcı Plugin AI Təlimatları
|
|
3
|
+
"""
|
|
4
|
+
PLUGIN_PROMPT = """
|
|
5
|
+
Reminder Plugin Capability:
|
|
6
|
+
You can manage reminders using the reminder plugin. Users can create, list, pause, resume, delete reminders.
|
|
7
|
+
|
|
8
|
+
Available functions:
|
|
9
|
+
- create_reminder(title, message, datetime_str, hours, minutes, days) - Yeni xatırlatma yarat
|
|
10
|
+
- create_daily_reminder(title, time_str, message) - Gündəlik xatırlatma yarat
|
|
11
|
+
- list_reminders() - Bütün xatırlatmaları göstər
|
|
12
|
+
- pause_reminder(title) - Xatırlatmanı dayandır
|
|
13
|
+
- resume_reminder(title) - Xatırlatmanı davam etdir
|
|
14
|
+
- delete_reminder(title) - Xatırlatmanı sil
|
|
15
|
+
|
|
16
|
+
Function Details:
|
|
17
|
+
|
|
18
|
+
1. create_reminder()
|
|
19
|
+
- Args:
|
|
20
|
+
* title (str): Xatırlatma başlığı
|
|
21
|
+
* message (str, optional): Xatırlatma mesajı
|
|
22
|
+
* datetime_str (str, optional): Tarix və saat (YYYY-MM-DD HH:MM formatında)
|
|
23
|
+
* hours (int, optional): Neçə saat sonra
|
|
24
|
+
* minutes (int, optional): Neçə dəqiqə sonra
|
|
25
|
+
* days (int, optional): Neçə gün sonra
|
|
26
|
+
- Returns: Str - Yaradılan xatırlatmanın təsdiqi
|
|
27
|
+
|
|
28
|
+
2. create_daily_reminder()
|
|
29
|
+
- Args:
|
|
30
|
+
* title (str): Xatırlatma başlığı
|
|
31
|
+
* time_str (str): Vaxt (HH:MM formatında)
|
|
32
|
+
* message (str, optional): Xatırlatma mesajı
|
|
33
|
+
- Returns: Str - Yaradılan gündəlik xatırlatmanın təsdiqi
|
|
34
|
+
|
|
35
|
+
3. list_reminders()
|
|
36
|
+
- Args: None
|
|
37
|
+
- Returns: Str - Bütün xatırlatmaların siyahısı
|
|
38
|
+
|
|
39
|
+
4. pause_reminder()
|
|
40
|
+
- Args:
|
|
41
|
+
* title (str): Dayandırılacaq xatırlatmanın başlığı
|
|
42
|
+
- Returns: Str - Dayandırılma təsdiqi
|
|
43
|
+
|
|
44
|
+
5. resume_reminder()
|
|
45
|
+
- Args:
|
|
46
|
+
* title (str): Davam etdiriləcək xatırlatmanın başlığı
|
|
47
|
+
- Returns: Str - Davam etdirilmə təsdiqi
|
|
48
|
+
|
|
49
|
+
6. delete_reminder()
|
|
50
|
+
- Args:
|
|
51
|
+
* title (str): Silinəcək xatırlatmanın başlığı
|
|
52
|
+
- Returns: Str - Silinmə təsdiqi
|
|
53
|
+
|
|
54
|
+
When users ask about reminders, schedules, or tasks, use these functions to help them.
|
|
55
|
+
|
|
56
|
+
Examples:
|
|
57
|
+
- "Saat 5-də mənə xatıldat" -> Use create_reminder()
|
|
58
|
+
- "Bugün nə var?" -> Use list_reminders()
|
|
59
|
+
- "Tapşırığı tamamla" -> Use complete_reminder()
|
|
60
|
+
- "Xatırlatma sil" -> Use delete_reminder()
|
|
61
|
+
- "Statistikanı göstər" -> Use get_reminder_stats()
|
|
62
|
+
|
|
63
|
+
Reminder features:
|
|
64
|
+
- Time and date scheduling
|
|
65
|
+
- Priority levels (high, medium, low)
|
|
66
|
+
- Categories (work, personal, health, etc.)
|
|
67
|
+
- Completion tracking
|
|
68
|
+
- Azerbaijani language support
|
|
69
|
+
|
|
70
|
+
Common reminder commands:
|
|
71
|
+
- "Saat [vaxt]-da [mətn] xatıldat" - Create reminder
|
|
72
|
+
- "Bütün xatırlatmalar" - List reminders
|
|
73
|
+
- "[ID] nömrəli xatırlatmanı tamamla" - Complete reminder
|
|
74
|
+
- "[ID] nömrəli xatırlatmanı sil" - Delete reminder
|
|
75
|
+
- "Xatırlatma statistikası" - Get statistics
|
|
76
|
+
|
|
77
|
+
Always provide responses in Azerbaijani language unless specifically asked otherwise.
|
|
78
|
+
If there are any issues with reminder operations, inform the user politely with specific error details.
|
|
79
|
+
Use natural Azerbaijani language for all reminder-related interactions.
|
|
80
|
+
"""
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: azerai-plugins-reminder
|
|
3
|
+
Version: 5.0.0
|
|
4
|
+
Summary: **AzerAI Reminder Plugin** - Xatırladıcı Plugin
|
|
5
|
+
Author-email: AzStudio Dev <Info.AzerStudioDev@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder
|
|
8
|
+
Project-URL: Repository, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder.git
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/issues
|
|
10
|
+
Keywords: azerai,plugins,ai,azerbaijani,reminder
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
22
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
23
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
|
24
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
25
|
+
Classifier: Operating System :: MacOS
|
|
26
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: livekit-agents
|
|
31
|
+
Requires-Dist: apscheduler
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# 📅 AzerAI Reminder Plugin
|
|
35
|
+
|
|
36
|
+
**AzerAI** - Azərbaycan dilində qabaqcıl səsli AI asistent xatırladıcı üçün plugin
|
|
37
|
+
|
|
38
|
+
## Xüsusiyyətlər
|
|
39
|
+
|
|
40
|
+
- ⏰ **Zamanlı xatırladıcılar** - Specific tarix və saatda
|
|
41
|
+
- 📅 **Günlük xatırladıcılar** - Hər gün təkrar olunan
|
|
42
|
+
- ⏸️ **Pause/Resume** - Xatırladıcıları idarə et
|
|
43
|
+
- 🗑️ **Sil** - Artıq lazım olmayanları sil
|
|
44
|
+
- 💾 **JSON saxlama** - Məlumatlar lokal olaraq saxlanılır
|
|
45
|
+
- 🔄 **APScheduler** - Güclü zamanlayıcı sistemi
|
|
46
|
+
|
|
47
|
+
## Platform Dəstəyi
|
|
48
|
+
|
|
49
|
+
- 💻 **Windows** - Windows 10/11 dəstəklənir
|
|
50
|
+
- 🍎 **macOS** - macOS 10.15+ dəstəklənir
|
|
51
|
+
- 🐧 **Linux** - Ubuntu, CentOS, Debian dəstəklənir
|
|
52
|
+
- 🐍 **Python** - Python 3.8+ tələb olunur
|
|
53
|
+
|
|
54
|
+
## Quraşdırma
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install AzerAI-Plugins-Reminder
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## İstifadə
|
|
61
|
+
|
|
62
|
+
Plugin avtomatik olaraq AzerAI tərəfindən aşkar edilir.
|
|
63
|
+
|
|
64
|
+
### Əmrlər
|
|
65
|
+
|
|
66
|
+
- `"5 dəqiqə sonra mənə xatırlat"` - Vaxtlı xatırladıcı
|
|
67
|
+
- `"Hər gün saat 09:00da mənə xatırlat"` - Günlük xatırladıcı
|
|
68
|
+
- `"Xatırladıcılarmı göstər"` - Siyahı
|
|
69
|
+
- `"X xatırladıcınızı dayandırın"` - Pause
|
|
70
|
+
- `"X xatırladıcınızı davam et"` - Resume
|
|
71
|
+
- `"X xatırladıcınızı sil"` - Sil
|
|
72
|
+
|
|
73
|
+
## Fayl struktur
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
azerai_plugins_reminder/
|
|
77
|
+
├── __init__.py
|
|
78
|
+
├── info.py
|
|
79
|
+
├── main.py
|
|
80
|
+
└── prompts.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Fayllar
|
|
84
|
+
|
|
85
|
+
- `azerai_reminders.json` - Xatırladıcı məlumatları
|
|
86
|
+
|
|
87
|
+
## Asılılıqlar
|
|
88
|
+
|
|
89
|
+
- `livekit-agents` - AI agent framework
|
|
90
|
+
- `apscheduler` - Zamanlayıcı
|
|
91
|
+
|
|
92
|
+
## 📄 Lisenziya
|
|
93
|
+
|
|
94
|
+
Bu layihə MIT Lisenziyası ilə lisenziyalaşdırılıb - [LICENSE](https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/blob/main/LICENSE) faylına baxın.
|
|
95
|
+
|
|
96
|
+
## 📞 Əlaqə
|
|
97
|
+
|
|
98
|
+
- **Müəllif:** AzerStudio Dev
|
|
99
|
+
- **Email:** Info.AzerStudioDev@gmail.com
|
|
100
|
+
- **GitHub:** https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder
|
|
101
|
+
- **PyPI:** https://pypi.org/project/AzerAI-Plugins-Reminder/
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**🇦🇿 Azərbaycanın ilk tam plugin ekosistemli AI asistentinin Reminder plugini!** 🚀
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
azerai_plugins_reminder/__init__.py
|
|
5
|
+
azerai_plugins_reminder/info.py
|
|
6
|
+
azerai_plugins_reminder/main.py
|
|
7
|
+
azerai_plugins_reminder/prompts.py
|
|
8
|
+
azerai_plugins_reminder.egg-info/PKG-INFO
|
|
9
|
+
azerai_plugins_reminder.egg-info/SOURCES.txt
|
|
10
|
+
azerai_plugins_reminder.egg-info/dependency_links.txt
|
|
11
|
+
azerai_plugins_reminder.egg-info/requires.txt
|
|
12
|
+
azerai_plugins_reminder.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
azerai_plugins_reminder
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "azerai-plugins-reminder"
|
|
7
|
+
version = "5.0.0"
|
|
8
|
+
description = "**AzerAI Reminder Plugin** - Xatırladıcı Plugin"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "AzStudio Dev", email = "Info.AzerStudioDev@gmail.com"}
|
|
13
|
+
]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 5 - Production/Stable",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: MIT License",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.8",
|
|
20
|
+
"Programming Language :: Python :: 3.9",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Operating System :: OS Independent",
|
|
25
|
+
"Operating System :: Microsoft :: Windows",
|
|
26
|
+
"Operating System :: Microsoft :: Windows :: Windows 10",
|
|
27
|
+
"Operating System :: Microsoft :: Windows :: Windows 11",
|
|
28
|
+
"Operating System :: POSIX :: Linux",
|
|
29
|
+
"Operating System :: MacOS",
|
|
30
|
+
"Operating System :: MacOS :: MacOS X",
|
|
31
|
+
]
|
|
32
|
+
keywords = ["azerai", "plugins", "ai", "azerbaijani", "reminder"]
|
|
33
|
+
requires-python = ">=3.8"
|
|
34
|
+
|
|
35
|
+
dependencies = [
|
|
36
|
+
"livekit-agents",
|
|
37
|
+
"apscheduler"
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
[project.urls]
|
|
41
|
+
Homepage = "https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder"
|
|
42
|
+
Repository = "https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder.git"
|
|
43
|
+
"Bug Tracker" = "https://github.com/AzerStudio-Dev/AzerAI-Plugins-Reminder/issues"
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.packages.find]
|
|
46
|
+
where = ["."]
|
|
47
|
+
include = ["azerai_plugins_reminder*"]
|
|
48
|
+
|
|
49
|
+
[tool.setuptools.package-data]
|
|
50
|
+
azerai_plugins_reminder = ["*.txt", "*.md"]
|