ifa-nextcloud 0.1.1__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.
- ifa_nextcloud-0.1.1/.github/workflows/publish-to-pypi.yml +50 -0
- ifa_nextcloud-0.1.1/LICENSE +6 -0
- ifa_nextcloud-0.1.1/PKG-INFO +560 -0
- ifa_nextcloud-0.1.1/README.md +538 -0
- ifa_nextcloud-0.1.1/pyproject.toml +36 -0
- ifa_nextcloud-0.1.1/reqirements.txt +6 -0
- ifa_nextcloud-0.1.1/src/__init__.py +7 -0
- ifa_nextcloud-0.1.1/src/nextcloud/__init__.py +9 -0
- ifa_nextcloud-0.1.1/src/nextcloud/bot/__init__.py +6 -0
- ifa_nextcloud-0.1.1/src/nextcloud/bot/bot.py +1238 -0
- ifa_nextcloud-0.1.1/src/nextcloud/bot/models.py +91 -0
- ifa_nextcloud-0.1.1/src/nextcloud/email/__init__.py +5 -0
- ifa_nextcloud-0.1.1/src/nextcloud/email/client.py +11 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Publish Python π distribution to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- '*' # ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π³Π°
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Build distribution π¦
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.x"
|
|
19
|
+
|
|
20
|
+
- name: Install pypa/build
|
|
21
|
+
run: python -m pip install build --user
|
|
22
|
+
|
|
23
|
+
- name: Build a binary wheel and a source tarball
|
|
24
|
+
run: python -m build
|
|
25
|
+
|
|
26
|
+
- name: Store the distribution packages
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: python-package-distributions
|
|
30
|
+
path: dist/
|
|
31
|
+
|
|
32
|
+
publish-to-pypi:
|
|
33
|
+
name: Publish to PyPI
|
|
34
|
+
needs: [build]
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
environment:
|
|
37
|
+
name: pypi
|
|
38
|
+
url: https://pypi.org/p/ifa_nextcloud
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write # ΠΠΠ―ΠΠΠ’ΠΠΠ¬ΠΠ Π΄Π»Ρ Trusted Publishing
|
|
41
|
+
|
|
42
|
+
steps:
|
|
43
|
+
- name: Download all the dists
|
|
44
|
+
uses: actions/download-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: python-package-distributions
|
|
47
|
+
path: dist/
|
|
48
|
+
|
|
49
|
+
- name: Publish to PyPI
|
|
50
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -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/)
|