ifa-nextcloud 0.1.1__py3-none-any.whl
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.
- ifa_nextcloud-0.1.1.dist-info/METADATA +560 -0
- ifa_nextcloud-0.1.1.dist-info/RECORD +10 -0
- ifa_nextcloud-0.1.1.dist-info/WHEEL +4 -0
- ifa_nextcloud-0.1.1.dist-info/licenses/LICENSE +6 -0
- nextcloud/__init__.py +9 -0
- nextcloud/bot/__init__.py +6 -0
- nextcloud/bot/bot.py +1238 -0
- nextcloud/bot/models.py +91 -0
- nextcloud/email/__init__.py +5 -0
- nextcloud/email/client.py +11 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ifa_nextcloud
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Python библиотека для создания ботов в Nextcloud Talk с API, похожим на python-telegram-bot
|
|
5
|
+
Project-URL: Homepage, https://github.com/ifake/nextcloud
|
|
6
|
+
Project-URL: Repository, https://github.com/ifake/nextcloud.git
|
|
7
|
+
Project-URL: Issues, https://github.com/ifake/nextcloud/issues
|
|
8
|
+
Author-email: ifake <your@email.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: bot,chat,ifa,messaging,nextcloud,talk
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Requires-Dist: loguru>=0.6.0
|
|
20
|
+
Requires-Dist: requests>=2.25.0
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Nextcloud Talk Bot
|
|
24
|
+
|
|
25
|
+
Python библиотека для создания ботов в Nextcloud Talk с API, похожим на python-telegram-bot.
|
|
26
|
+
|
|
27
|
+
## Возможности
|
|
28
|
+
|
|
29
|
+
- 🚀 **Простой API** — интерфейс, похожий на python-telegram-bot
|
|
30
|
+
- 📝 **Отправка сообщений** с поддержкой Markdown
|
|
31
|
+
- 📎 **Отправка файлов** (документы, фото, любые вложения)
|
|
32
|
+
- 🔄 **Автоматическое управление членством** в комнатах
|
|
33
|
+
- 💬 **Поддержка threading и ответов на сообщения**
|
|
34
|
+
- 🔌 **Автоматическое определение версии API** (v1-v4)
|
|
35
|
+
- 🛡️ **Автоматическая переавторизация** при ошибках
|
|
36
|
+
- 📡 **Polling режим** для получения сообщений
|
|
37
|
+
|
|
38
|
+
## Требования
|
|
39
|
+
|
|
40
|
+
- Python 3.7+
|
|
41
|
+
- Nextcloud 33.x и выше (с установленным приложением Talk)
|
|
42
|
+
- Аккаунт бота в Nextcloud (рекомендуется использовать токен приложения)
|
|
43
|
+
|
|
44
|
+
## Установка
|
|
45
|
+
|
|
46
|
+
### Из исходного кода
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
git clone https://github.com/your-username/nextcloud-talk-bot.git
|
|
50
|
+
cd nextcloud-talk-bot
|
|
51
|
+
pip install -r requirements.txt
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Использование как библиотеки
|
|
55
|
+
|
|
56
|
+
Скопируйте папку `core/` в ваш проект или установите как модуль:
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
# Просто скопируйте файлы в ваш проект
|
|
60
|
+
from nextcloudbot import Bot
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Быстрый старт
|
|
64
|
+
|
|
65
|
+
### Минимальный пример
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from nextcloudbot import Bot
|
|
69
|
+
|
|
70
|
+
# Создаем бота
|
|
71
|
+
bot = Bot(
|
|
72
|
+
host="https://nextcloud.example.com",
|
|
73
|
+
user="bot_user",
|
|
74
|
+
password="your-app-token", # или пароль
|
|
75
|
+
default_room="room_token_here"
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# Отправляем сообщение
|
|
79
|
+
bot.send_message("Hello, World!")
|
|
80
|
+
|
|
81
|
+
# Запускаем получение сообщений
|
|
82
|
+
bot.run_polling()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Бот с обработкой команд
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from nextcloudbot import Bot
|
|
89
|
+
|
|
90
|
+
bot = Bot(
|
|
91
|
+
host="https://nextcloud.example.com",
|
|
92
|
+
user="my_bot",
|
|
93
|
+
password="app-xxxxx",
|
|
94
|
+
default_room="room_token"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Обработчик команды /start
|
|
98
|
+
@bot.command("start")
|
|
99
|
+
def start_command(update, context):
|
|
100
|
+
update.message.reply_text("👋 Привет! Я бот для Nextcloud Talk!")
|
|
101
|
+
|
|
102
|
+
# Обработчик команды /help
|
|
103
|
+
@bot.command("help")
|
|
104
|
+
def help_command(update, context):
|
|
105
|
+
help_text = """
|
|
106
|
+
🤖 **Доступные команды:**
|
|
107
|
+
/start - Приветствие
|
|
108
|
+
/help - Эта справка
|
|
109
|
+
/echo <текст> - Повторить сообщение
|
|
110
|
+
"""
|
|
111
|
+
update.message.reply_text(help_text)
|
|
112
|
+
|
|
113
|
+
# Обработчик команды /echo
|
|
114
|
+
@bot.command("echo")
|
|
115
|
+
def echo_command(update, context):
|
|
116
|
+
# Получаем текст после команды
|
|
117
|
+
text = update.message.text.replace("/echo", "").strip()
|
|
118
|
+
if text:
|
|
119
|
+
update.message.reply_text(f"🔊 {text}")
|
|
120
|
+
else:
|
|
121
|
+
update.message.reply_text("❌ Напишите что-нибудь после /echo")
|
|
122
|
+
|
|
123
|
+
# Обработчик всех текстовых сообщений
|
|
124
|
+
@bot.message_handler
|
|
125
|
+
def handle_message(update, context):
|
|
126
|
+
message = update.message
|
|
127
|
+
user = message.from_user
|
|
128
|
+
print(f"Получено сообщение от {user.full_name}: {message.text}")
|
|
129
|
+
message.reply_text(f"Получил: {message.text}")
|
|
130
|
+
|
|
131
|
+
# Запускаем бота
|
|
132
|
+
if __name__ == "__main__":
|
|
133
|
+
bot.run_polling()
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Отправка сообщений
|
|
137
|
+
|
|
138
|
+
### Текстовые сообщения
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
# Простой текст
|
|
142
|
+
bot.send_message("Hello, World!")
|
|
143
|
+
|
|
144
|
+
# Markdown форматирование
|
|
145
|
+
bot.send_message("**Жирный текст** и *курсив*")
|
|
146
|
+
|
|
147
|
+
# Ответ на сообщение
|
|
148
|
+
bot.send_message(
|
|
149
|
+
chat_id="room_token", # optional
|
|
150
|
+
text="Это ответ на ваше сообщение",
|
|
151
|
+
reply_to_message_id=12345
|
|
152
|
+
)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Отправка файлов
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
# Отправить файл с подписью
|
|
159
|
+
bot.send_message(
|
|
160
|
+
chat_id="room_token", # optional
|
|
161
|
+
text="Смотрите документ",
|
|
162
|
+
file_path="/path/to/document.pdf"
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
# Отправить фото
|
|
166
|
+
bot.send_file("/path/to/photo.jpg", caption="Красивый закат")
|
|
167
|
+
|
|
168
|
+
# Или через метод send_photo
|
|
169
|
+
bot.send_photo(
|
|
170
|
+
"room_token", # optional
|
|
171
|
+
"/path/to/photo.jpg",
|
|
172
|
+
caption="Красивый закат"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# Отправить документ
|
|
176
|
+
bot.send_document(
|
|
177
|
+
"room_token", # optional
|
|
178
|
+
"/path/to/report.pdf",
|
|
179
|
+
caption="Ежемесячный отчет"
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
# Отправить файл из памяти (например, сгенерированный)
|
|
183
|
+
import io
|
|
184
|
+
|
|
185
|
+
# Создаем файл в памяти
|
|
186
|
+
file_content = b"Hello, this is a text file!"
|
|
187
|
+
bot.send_message(
|
|
188
|
+
chat_id="room_token", # optional
|
|
189
|
+
text="Сгенерированный файл",
|
|
190
|
+
file_content=file_content,
|
|
191
|
+
file_name="hello.txt",
|
|
192
|
+
mime_type="text/plain"
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# Отправить файл из BytesIO
|
|
196
|
+
from io import BytesIO
|
|
197
|
+
|
|
198
|
+
buffer = BytesIO()
|
|
199
|
+
buffer.write(b"Some data")
|
|
200
|
+
buffer.seek(0)
|
|
201
|
+
|
|
202
|
+
bot.send_document(
|
|
203
|
+
"room_token", # optional
|
|
204
|
+
buffer,
|
|
205
|
+
caption="Данные из буфера"
|
|
206
|
+
)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Работа с сообщениями
|
|
210
|
+
|
|
211
|
+
### Получение сообщений через polling
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# Запускаем получение сообщений
|
|
215
|
+
bot.run_polling(chat_id="room_token", poll_interval=2)
|
|
216
|
+
|
|
217
|
+
# Параметры:
|
|
218
|
+
# - chat_id: токен комнаты (если не указан, используется default_room)
|
|
219
|
+
# - poll_interval: интервал опроса в секундах (по умолчанию 2)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Объект Message
|
|
223
|
+
|
|
224
|
+
При получении сообщения вы получаете объект `Message` со следующими атрибутами:
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
@bot.message_handler
|
|
228
|
+
def handle_message(update, context):
|
|
229
|
+
message = update.message
|
|
230
|
+
|
|
231
|
+
# Основные атрибуты
|
|
232
|
+
print(f"ID: {message.message_id}")
|
|
233
|
+
print(f"Текст: {message.text}")
|
|
234
|
+
print(f"От: {message.from_user.full_name}")
|
|
235
|
+
print(f"Время: {message.date}")
|
|
236
|
+
|
|
237
|
+
# Ответить на сообщение
|
|
238
|
+
message.reply_text("Получил ваше сообщение!")
|
|
239
|
+
|
|
240
|
+
# Или использовать метод reply (алиас)
|
|
241
|
+
message.reply("Тоже самое")
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Управление комнатами
|
|
245
|
+
|
|
246
|
+
### Присоединение к комнате
|
|
247
|
+
|
|
248
|
+
```python
|
|
249
|
+
# Автоматическое присоединение при запуске
|
|
250
|
+
bot = Bot(
|
|
251
|
+
host="https://nextcloud.example.com",
|
|
252
|
+
user="bot_user",
|
|
253
|
+
password="password",
|
|
254
|
+
default_room="room_token",
|
|
255
|
+
auto_join_room=True # По умолчанию True
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
# Ручное присоединение
|
|
259
|
+
bot.join_room("room_token", password="room_password")
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Получение информации о комнатах
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
# Список всех доступных комнат
|
|
266
|
+
rooms = bot.get_rooms()
|
|
267
|
+
for room in rooms:
|
|
268
|
+
print(f"Комната: {room.get('name')} ({room.get('token')})")
|
|
269
|
+
print(f"Участников: {room.get('participantCount')}")
|
|
270
|
+
|
|
271
|
+
# Информация о конкретной комнате
|
|
272
|
+
room_info = bot.get_room_info("room_token")
|
|
273
|
+
print(f"Название: {room_info.get('name')}")
|
|
274
|
+
print(f"Тип: {room_info.get('type')}")
|
|
275
|
+
|
|
276
|
+
# Список участников
|
|
277
|
+
participants = bot.get_room_participants("room_token")
|
|
278
|
+
for p in participants:
|
|
279
|
+
print(f"Участник: {p.get('actorDisplayName')}")
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Диагностика
|
|
283
|
+
|
|
284
|
+
### Проверка подключения
|
|
285
|
+
|
|
286
|
+
```python
|
|
287
|
+
# Проверка статуса сессии
|
|
288
|
+
status = bot.check_session_status()
|
|
289
|
+
if status['authenticated']:
|
|
290
|
+
print(f"✅ Подключен как: {status['user']}")
|
|
291
|
+
else:
|
|
292
|
+
print("❌ Ошибка аутентификации")
|
|
293
|
+
|
|
294
|
+
# Диагностика доступа к комнате
|
|
295
|
+
diagnostic = bot.diagnose_room_access("room_token")
|
|
296
|
+
print(json.dumps(diagnostic, indent=2, ensure_ascii=False))
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Логирование
|
|
300
|
+
|
|
301
|
+
Библиотека использует `loguru` для логирования. Вы можете настроить уровень логирования:
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
from loguru import logger
|
|
305
|
+
|
|
306
|
+
# Установка уровня логирования
|
|
307
|
+
logger.remove() # Удаляем стандартный обработчик
|
|
308
|
+
logger.add(sys.stderr, level="INFO") # Только INFO и выше
|
|
309
|
+
# или
|
|
310
|
+
logger.add(sys.stderr, level="DEBUG") # Подробное логирование
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Конфигурация
|
|
314
|
+
|
|
315
|
+
### Параметры Bot
|
|
316
|
+
|
|
317
|
+
| Параметр | Тип | По умолчанию | Описание |
|
|
318
|
+
|----------|-----|--------------|------------------------------------------------------------------|
|
|
319
|
+
| `host` | str | - | URL Nextcloud сервера |
|
|
320
|
+
| `user` | str | - | Имя пользователя бота |
|
|
321
|
+
| `password` | str | - | Пароль или токен приложения |
|
|
322
|
+
| `default_room` | str | None | Токен комнаты по умолчанию |
|
|
323
|
+
| `read_all_chat` | bool | False | Читать всю историю (c новых к старым) или только новые сообщения |
|
|
324
|
+
| `auto_join_room` | bool | True | Автоматически присоединяться к комнатам |
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
## Примеры
|
|
328
|
+
|
|
329
|
+
### Простой эхо-бот
|
|
330
|
+
|
|
331
|
+
```python
|
|
332
|
+
from core.nextcloud import Bot
|
|
333
|
+
|
|
334
|
+
bot = Bot(
|
|
335
|
+
host="https://nextcloud.example.com",
|
|
336
|
+
user="echo_bot",
|
|
337
|
+
password="app-xxxxx",
|
|
338
|
+
default_room="room_token"
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
@bot.message_handler
|
|
342
|
+
def echo(update, context):
|
|
343
|
+
message = update.message
|
|
344
|
+
if message.text:
|
|
345
|
+
message.reply_text(f"🔊 Эхо: {message.text}")
|
|
346
|
+
else:
|
|
347
|
+
message.reply_text("Напишите текст, я его повторю!")
|
|
348
|
+
|
|
349
|
+
bot.run_polling()
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Бот для отправки уведомлений
|
|
353
|
+
|
|
354
|
+
```python
|
|
355
|
+
import time
|
|
356
|
+
from core.nextcloud import Bot
|
|
357
|
+
|
|
358
|
+
class NotificationBot:
|
|
359
|
+
def __init__(self, host, user, password, room_token):
|
|
360
|
+
self.bot = Bot(
|
|
361
|
+
host=host,
|
|
362
|
+
user=user,
|
|
363
|
+
password=password,
|
|
364
|
+
default_room=room_token
|
|
365
|
+
)
|
|
366
|
+
self.room = room_token
|
|
367
|
+
|
|
368
|
+
def send_notification(self, title, message, priority="info"):
|
|
369
|
+
"""Отправить уведомление в чат"""
|
|
370
|
+
emoji = {
|
|
371
|
+
"info": "ℹ️",
|
|
372
|
+
"success": "✅",
|
|
373
|
+
"warning": "⚠️",
|
|
374
|
+
"error": "❌"
|
|
375
|
+
}.get(priority, "📢")
|
|
376
|
+
|
|
377
|
+
text = f"{emoji} **{title}**\n{message}"
|
|
378
|
+
self.bot.send_message(self.room, text)
|
|
379
|
+
|
|
380
|
+
def send_file_notification(self, title, file_path, message=None):
|
|
381
|
+
"""Отправить уведомление с файлом"""
|
|
382
|
+
full_text = f"📎 **{title}**"
|
|
383
|
+
if message:
|
|
384
|
+
full_text += f"\n{message}"
|
|
385
|
+
|
|
386
|
+
self.bot.send_message(
|
|
387
|
+
chat_id=self.room,
|
|
388
|
+
text=full_text,
|
|
389
|
+
file_path=file_path
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
# Использование
|
|
393
|
+
notifier = NotificationBot(
|
|
394
|
+
host="https://nextcloud.example.com",
|
|
395
|
+
user="notifier",
|
|
396
|
+
password="app-xxxxx",
|
|
397
|
+
room_token="room_token"
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
notifier.send_notification("Система", "Резервное копирование завершено", "success")
|
|
401
|
+
notifier.send_file_notification("Отчет", "/tmp/report.pdf", "Ежемесячный отчет готов")
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Бот с обработкой команд
|
|
405
|
+
|
|
406
|
+
```python
|
|
407
|
+
from core.nextcloud import Bot
|
|
408
|
+
from datetime import datetime
|
|
409
|
+
|
|
410
|
+
bot = Bot(
|
|
411
|
+
host="https://nextcloud.example.com",
|
|
412
|
+
user="helper_bot",
|
|
413
|
+
password="app-xxxxx",
|
|
414
|
+
default_room="room_token"
|
|
415
|
+
)
|
|
416
|
+
|
|
417
|
+
# Хранилище данных пользователей
|
|
418
|
+
user_data = {}
|
|
419
|
+
|
|
420
|
+
@bot.command("start")
|
|
421
|
+
def cmd_start(update, context):
|
|
422
|
+
user = update.message.from_user
|
|
423
|
+
update.message.reply_text(
|
|
424
|
+
f"👋 Привет, {user.first_name}!\n"
|
|
425
|
+
"Я бот-помощник. Доступные команды:\n"
|
|
426
|
+
"/time - текущее время\n"
|
|
427
|
+
"/ping - проверить работу\n"
|
|
428
|
+
"/note <текст> - сохранить заметку\n"
|
|
429
|
+
"/mynote - показать заметку"
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
@bot.command("time")
|
|
433
|
+
def cmd_time(update, context):
|
|
434
|
+
now = datetime.now().strftime("%d.%m.%Y %H:%M:%S")
|
|
435
|
+
update.message.reply_text(f"🕐 Текущее время: {now}")
|
|
436
|
+
|
|
437
|
+
@bot.command("ping")
|
|
438
|
+
def cmd_ping(update, context):
|
|
439
|
+
update.message.reply_text("🏓 Pong!")
|
|
440
|
+
|
|
441
|
+
@bot.command("note")
|
|
442
|
+
def cmd_note(update, context):
|
|
443
|
+
user_id = update.message.from_user.id
|
|
444
|
+
text = update.message.text.replace("/note", "").strip()
|
|
445
|
+
|
|
446
|
+
if text:
|
|
447
|
+
user_data[user_id] = text
|
|
448
|
+
update.message.reply_text("✅ Заметка сохранена!")
|
|
449
|
+
else:
|
|
450
|
+
update.message.reply_text("❌ Напишите текст заметки после /note")
|
|
451
|
+
|
|
452
|
+
@bot.command("mynote")
|
|
453
|
+
def cmd_mynote(update, context):
|
|
454
|
+
user_id = update.message.from_user.id
|
|
455
|
+
note = user_data.get(user_id)
|
|
456
|
+
|
|
457
|
+
if note:
|
|
458
|
+
update.message.reply_text(f"📝 Ваша заметка:\n{note}")
|
|
459
|
+
else:
|
|
460
|
+
update.message.reply_text("📭 У вас нет сохраненных заметок")
|
|
461
|
+
|
|
462
|
+
@bot.message_handler
|
|
463
|
+
def handle_unknown(update, context):
|
|
464
|
+
text = update.message.text
|
|
465
|
+
if text:
|
|
466
|
+
update.message.reply_text(
|
|
467
|
+
f"Неизвестная команда. Напишите /help для списка команд."
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
if __name__ == "__main__":
|
|
471
|
+
bot.run_polling()
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
## API Reference
|
|
475
|
+
|
|
476
|
+
### Bot
|
|
477
|
+
|
|
478
|
+
#### Методы отправки
|
|
479
|
+
|
|
480
|
+
| Метод | Описание |
|
|
481
|
+
|-------|----------|
|
|
482
|
+
| `send_message(chat_id, text, ...)` | Универсальный метод отправки (текст/файлы) |
|
|
483
|
+
| `send_file(chat_id, file_path, caption, ...)` | Отправить файл |
|
|
484
|
+
| `send_photo(chat_id, photo, caption, ...)` | Отправить фото |
|
|
485
|
+
| `send_document(chat_id, document, caption, ...)` | Отправить документ |
|
|
486
|
+
|
|
487
|
+
#### Управление комнатами
|
|
488
|
+
|
|
489
|
+
| Метод | Описание |
|
|
490
|
+
|-------|----------|
|
|
491
|
+
| `join_room(chat_id, password)` | Присоединиться к комнате |
|
|
492
|
+
| `get_rooms()` | Получить список всех комнат |
|
|
493
|
+
| `get_room_info(chat_id)` | Получить информацию о комнате |
|
|
494
|
+
| `get_room_participants(chat_id)` | Получить список участников |
|
|
495
|
+
|
|
496
|
+
#### Диагностика
|
|
497
|
+
|
|
498
|
+
| Метод | Описание |
|
|
499
|
+
|-------|----------|
|
|
500
|
+
| `check_session_status()` | Проверить статус сессии |
|
|
501
|
+
| `diagnose_room_access(chat_id)` | Диагностика доступа к комнате |
|
|
502
|
+
|
|
503
|
+
### Message
|
|
504
|
+
|
|
505
|
+
| Атрибут/Метод | Описание |
|
|
506
|
+
|---------------|----------|
|
|
507
|
+
| `message_id` | ID сообщения |
|
|
508
|
+
| `text` | Текст сообщения |
|
|
509
|
+
| `from_user` | Объект User (отправитель) |
|
|
510
|
+
| `chat` | Объект Chat (комната) |
|
|
511
|
+
| `date` | Время отправки |
|
|
512
|
+
| `reply_to_message` | Ответ на сообщение (если есть) |
|
|
513
|
+
| `reply_text(text)` | Ответить на сообщение |
|
|
514
|
+
| `reply(text)` | Алиас для reply_text |
|
|
515
|
+
|
|
516
|
+
## Устранение неполадок
|
|
517
|
+
|
|
518
|
+
### Ошибка аутентификации
|
|
519
|
+
|
|
520
|
+
```python
|
|
521
|
+
# Проверьте подключение
|
|
522
|
+
status = bot.check_session_status()
|
|
523
|
+
if not status['authenticated']:
|
|
524
|
+
print(f"Ошибка: {status.get('error')}")
|
|
525
|
+
print("Проверьте логин и пароль/токен")
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### Комната не найдена
|
|
529
|
+
|
|
530
|
+
```python
|
|
531
|
+
# Получите список доступных комнат
|
|
532
|
+
rooms = bot.get_rooms()
|
|
533
|
+
print("Доступные комнаты:")
|
|
534
|
+
for room in rooms:
|
|
535
|
+
print(f" - {room.get('name')} (токен: {room.get('token')})")
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### Проблемы с отправкой файлов
|
|
539
|
+
|
|
540
|
+
```python
|
|
541
|
+
# Используйте диагностику
|
|
542
|
+
result = bot.diagnose_room_access("room_token")
|
|
543
|
+
print(json.dumps(result, indent=2))
|
|
544
|
+
|
|
545
|
+
# Проверьте права на запись в WebDAV
|
|
546
|
+
# Убедитесь, что у бота есть права на загрузку файлов
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
## Лицензия
|
|
550
|
+
|
|
551
|
+
MIT License
|
|
552
|
+
|
|
553
|
+
## Вклад в проект
|
|
554
|
+
|
|
555
|
+
Буду рад вашим pull requests и issue!
|
|
556
|
+
|
|
557
|
+
## Ссылки
|
|
558
|
+
|
|
559
|
+
- [Nextcloud Talk API Documentation](https://nextcloud-talk.readthedocs.io/)
|
|
560
|
+
- [Nextcloud Developer Documentation](https://docs.nextcloud.com/server/latest/developer_manual/)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
nextcloud/__init__.py,sha256=CyAYogUyfKy3mONwEpdRb-kJPAFCjFNIfs5D7iuz2aI,287
|
|
2
|
+
nextcloud/bot/__init__.py,sha256=P7OrX6TtngcodpiKWGdnfOhwLjJCFPghjcRfQ2oQw-w,161
|
|
3
|
+
nextcloud/bot/bot.py,sha256=fCMyAYMOlV2A8QkZc4X2CT4jWqEAXSBdyP2eZVpf29o,51703
|
|
4
|
+
nextcloud/bot/models.py,sha256=lmrfYrJRfIY13gPCBQNXLk9LIZGSnEsCNvIVHw18GKY,2397
|
|
5
|
+
nextcloud/email/__init__.py,sha256=y12NdYjZWD5ko-oxkCVhiFQjVAYC_hmp1b70Pdwgnzw,106
|
|
6
|
+
nextcloud/email/client.py,sha256=-juRCrepwmrcbfkkoA0too7IUdm19yN5MPSi7tHfFy0,338
|
|
7
|
+
ifa_nextcloud-0.1.1.dist-info/METADATA,sha256=MpRJM_vFiV-H_-ol9HesQDquRKyO6ZvcnErlZPReT1A,17904
|
|
8
|
+
ifa_nextcloud-0.1.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
9
|
+
ifa_nextcloud-0.1.1.dist-info/licenses/LICENSE,sha256=1DHkgeJmVHbuJNOMNVNqoH1eXyYJYdrGOrU0RnEb8Lc,119
|
|
10
|
+
ifa_nextcloud-0.1.1.dist-info/RECORD,,
|
nextcloud/__init__.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Nextcloud Talk Bot — библиотека для создания ботов в Nextcloud Talk.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from src.nextcloud.bot.bot import Bot
|
|
6
|
+
from src.nextcloud.bot.models import Update, Message, User, Chat
|
|
7
|
+
|
|
8
|
+
__version__ = "0.1.0"
|
|
9
|
+
__all__ = ["Bot", "Update", "Message", "User", "Chat"]
|