Skip to content

Commit 85f2ab5

Browse files
authored
added POC of two bots in one app (#121)
This will be needed for AppAPI test Signed-off-by: Alexander Piskun <[email protected]>
1 parent d5c5709 commit 85f2ab5

File tree

13 files changed

+259
-10
lines changed

13 files changed

+259
-10
lines changed

.run/TalkBotMulti.run.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="TalkBotMulti" type="PythonConfigurationType" factoryName="Python">
3+
<module name="nc_py_api" />
4+
<option name="INTERPRETER_OPTIONS" value="" />
5+
<option name="PARENT_ENVS" value="true" />
6+
<envs>
7+
<env name="APP_ID" value="talk_bot_multi" />
8+
<env name="APP_PORT" value="9033" />
9+
<env name="APP_SECRET" value="12345" />
10+
<env name="APP_VERSION" value="1.0.0" />
11+
<env name="NEXTCLOUD_URL" value="http://nextcloud.local" />
12+
<env name="PYTHONUNBUFFERED" value="1" />
13+
</envs>
14+
<option name="SDK_HOME" value="" />
15+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
16+
<option name="IS_MODULE_SDK" value="true" />
17+
<option name="ADD_CONTENT_ROOTS" value="true" />
18+
<option name="ADD_SOURCE_ROOTS" value="true" />
19+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
20+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/examples/as_app/talk_bot_multi/src/main.py" />
21+
<option name="PARAMETERS" value="" />
22+
<option name="SHOW_COMMAND_LINE" value="false" />
23+
<option name="EMULATE_TERMINAL" value="false" />
24+
<option name="MODULE_MODE" value="false" />
25+
<option name="REDIRECT_INPUT" value="false" />
26+
<option name="INPUT_FILE" value="" />
27+
<method v="2" />
28+
</configuration>
29+
</component>

.run/ToGif(28).run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<env name="APP_PORT" value="9031" />
99
<env name="APP_SECRET" value="12345" />
1010
<env name="APP_VERSION" value="1.0.0" />
11-
<env name="NEXTCLOUD_URL" value="http://nextcloud.local/index.php" />
11+
<env name="NEXTCLOUD_URL" value="http://nextcloud.local" />
1212
<env name="PYTHONUNBUFFERED" value="1" />
1313
</envs>
1414
<option name="SDK_HOME" value="" />

.run/_app_security_checks.run.xml renamed to .run/register_nc_py_api (26).run.xml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
<component name="ProjectRunConfigurationManager">
2-
<configuration default="false" name="_app_security_checks" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
2+
<configuration default="false" name="register_nc_py_api (26)" type="PythonConfigurationType" factoryName="Python">
33
<module name="nc_py_api" />
44
<option name="INTERPRETER_OPTIONS" value="" />
55
<option name="PARENT_ENVS" value="true" />
66
<envs>
7+
<env name="PYTHONUNBUFFERED" value="1" />
78
<env name="APP_ID" value="nc_py_api" />
9+
<env name="APP_PORT" value="9009" />
810
<env name="APP_SECRET" value="12345" />
9-
<env name="PYTHONUNBUFFERED" value="1" />
11+
<env name="APP_VERSION" value="1.0.0" />
12+
<env name="NEXTCLOUD_URL" value="http://stable26.local/index.php" />
1013
</envs>
1114
<option name="SDK_HOME" value="" />
1215
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests" />
1316
<option name="IS_MODULE_SDK" value="true" />
1417
<option name="ADD_CONTENT_ROOTS" value="true" />
1518
<option name="ADD_SOURCE_ROOTS" value="true" />
1619
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17-
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tests/_app_security_checks.py" />
18-
<option name="PARAMETERS" value="http://127.0.0.1:9009" />
20+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tests/_install.py" />
21+
<option name="PARAMETERS" value="" />
1922
<option name="SHOW_COMMAND_LINE" value="false" />
2023
<option name="EMULATE_TERMINAL" value="false" />
2124
<option name="MODULE_MODE" value="false" />

.run/register_nc_py_api (27).run.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="register_nc_py_api (27)" type="PythonConfigurationType" factoryName="Python">
3+
<module name="nc_py_api" />
4+
<option name="INTERPRETER_OPTIONS" value="" />
5+
<option name="PARENT_ENVS" value="true" />
6+
<envs>
7+
<env name="PYTHONUNBUFFERED" value="1" />
8+
<env name="APP_ID" value="nc_py_api" />
9+
<env name="APP_PORT" value="9009" />
10+
<env name="APP_SECRET" value="12345" />
11+
<env name="APP_VERSION" value="1.0.0" />
12+
<env name="NEXTCLOUD_URL" value="http://stable27.local/index.php" />
13+
</envs>
14+
<option name="SDK_HOME" value="" />
15+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests" />
16+
<option name="IS_MODULE_SDK" value="true" />
17+
<option name="ADD_CONTENT_ROOTS" value="true" />
18+
<option name="ADD_SOURCE_ROOTS" value="true" />
19+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
20+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tests/_install.py" />
21+
<option name="PARAMETERS" value="" />
22+
<option name="SHOW_COMMAND_LINE" value="false" />
23+
<option name="EMULATE_TERMINAL" value="false" />
24+
<option name="MODULE_MODE" value="false" />
25+
<option name="REDIRECT_INPUT" value="false" />
26+
<option name="INPUT_FILE" value="" />
27+
<method v="2" />
28+
</configuration>
29+
</component>

.run/register_nc_py_api (28).run.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
<option name="INTERPRETER_OPTIONS" value="" />
55
<option name="PARENT_ENVS" value="true" />
66
<envs>
7-
<env name="PYTHONUNBUFFERED" value="1" />
87
<env name="APP_ID" value="nc_py_api" />
98
<env name="APP_PORT" value="9009" />
109
<env name="APP_SECRET" value="12345" />
1110
<env name="APP_VERSION" value="1.0.0" />
12-
<env name="NEXTCLOUD_URL" value="http://nextcloud.local/index.php" />
11+
<env name="NEXTCLOUD_URL" value="http://nextcloud.local" />
12+
<env name="PYTHONUNBUFFERED" value="1" />
1313
</envs>
1414
<option name="SDK_HOME" value="" />
1515
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests" />

examples/as_app/talk_bot/HOW_TO_INSTALL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ installation is a little bit tricky.
66

77
Steps to Install:
88

9-
1. [Install AppEcosystem](https://cloud-py-api.github.io/app_api/Installation.html)
9+
1. [Install AppAPI](https://cloud-py-api.github.io/app_api/Installation.html)
1010
2. Create a deployment daemon according to the [instructions](https://cloud-py-api.github.io/app_api/CreationOfDeployDaemon.html#create-deploy-daemon) of the AppPI
1111
3. php occ app_api:app:deploy talk_bot "daemon_deploy_name" \
1212
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot/appinfo/info.xml
@@ -22,7 +22,7 @@ Steps to Install:
2222
In a few months
2323
===============
2424

25-
1. Install AppEcosystem from App Store
26-
2. Configure Deploy Daemon with GUI provided by AppEcosystem
25+
1. Install AppAPI from App Store
26+
2. Configure Deploy Daemon with GUI provided by AppAPI
2727
3. Go to External Applications page in Nextcloud UI
2828
4. Find this bot in a list and press "Install" and "Enable" buttons, like with usual Applications.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM python:3.11-alpine
2+
3+
COPY requirements.txt /
4+
ADD /src/ /app/
5+
6+
RUN \
7+
python3 -m pip install -r requirements.txt && rm -rf ~/.cache && rm requirements.txt
8+
9+
WORKDIR /app
10+
ENTRYPOINT ["python3", "main.py"]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
How To Install
2+
==============
3+
4+
Currently, while AppAPI hasn't been published on the App Store, and App Store support hasn't been added yet,
5+
installation is a little bit tricky.
6+
7+
Steps to Install:
8+
9+
1. [Install AppAPI](https://cloud-py-api.github.io/app_api/Installation.html)
10+
2. Create a deployment daemon according to the [instructions](https://cloud-py-api.github.io/app_api/CreationOfDeployDaemon.html#create-deploy-daemon) of the AppPI
11+
3. php occ app_api:app:deploy talk_bot_multi "daemon_deploy_name" \
12+
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot_multi/appinfo/info.xml
13+
14+
to deploy a docker image with Bot to docker.
15+
16+
4. php occ app_api:app:register talk_bot_multi "daemon_deploy_name" -e --force-scopes \
17+
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot_multi/appinfo/info.xml
18+
19+
to call its **enable** handler and accept all required API scopes by default.
20+
21+
22+
In a few months
23+
===============
24+
25+
1. Install AppAPI from App Store
26+
2. Configure Deploy Daemon with GUI provided by AppAPI
27+
3. Go to External Applications page in Nextcloud UI
28+
4. Find this bot in a list and press "Install" and "Enable" buttons, like with usual Applications.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
.DEFAULT_GOAL := help
2+
3+
.PHONY: help
4+
help:
5+
@echo "Welcome to TalkBotMulti example. Please use \`make <target>\` where <target> is one of"
6+
@echo " "
7+
@echo " Next commands are only for dev environment with nextcloud-docker-dev!"
8+
@echo " They should run from the host you are developing on(with activated venv) and not in the container with Nextcloud!"
9+
@echo " "
10+
@echo " build-push build image and upload to ghcr.io"
11+
@echo " "
12+
@echo " deploy deploy example to registered 'docker_dev'"
13+
@echo " "
14+
@echo " run28 install TalkBotMulti for Nextcloud 28"
15+
@echo " run27 install TalkBotMulti for Nextcloud 27"
16+
@echo " "
17+
@echo " For development of this example use PyCharm run configurations. Development is always set for last Nextcloud."
18+
@echo " First run 'TalkBotMulti' and then 'make manual_register', after that you can use/debug/develop it and easy test."
19+
@echo " "
20+
@echo " manual_register perform registration of running 'TalkBotMulti' into the 'manual_install' deploy daemon."
21+
22+
.PHONY: build-push
23+
build-push:
24+
docker login ghcr.io
25+
docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag ghcr.io/cloud-py-api/talk_bot_multi:latest .
26+
27+
.PHONY: deploy
28+
deploy:
29+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:deploy talk_bot_multi docker_dev \
30+
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot_multi/appinfo/info.xml
31+
32+
.PHONY: run28
33+
run28:
34+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister talk_bot_multi --silent || true
35+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register talk_bot_multi docker_dev -e --force-scopes \
36+
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot_multi/appinfo/info.xml
37+
38+
.PHONY: run27
39+
run27:
40+
docker exec master-stable27-1 sudo -u www-data php occ app_api:app:unregister talk_bot_multi --silent || true
41+
docker exec master-stable27-1 sudo -u www-data php occ app_api:app:register talk_bot_multi docker_dev -e --force-scopes \
42+
--info-xml https://raw.githubusercontent.com/cloud-py-api/nc_py_api/main/examples/as_app/talk_bot_multi/appinfo/info.xml
43+
44+
.PHONY: manual_register
45+
manual_register:
46+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister talk_bot_multi --silent || true
47+
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register talk_bot_multi manual_install --json-info \
48+
"{\"appid\":\"talk_bot_multi\",\"name\":\"TalkBotMulti\",\"daemon_config_name\":\"manual_install\",\"version\":\"1.0.0\",\"secret\":\"12345\",\"host\":\"host.docker.internal\",\"port\":9033,\"scopes\":{\"required\":[\"TALK\", \"TALK_BOT\"],\"optional\":[]},\"protocol\":\"http\",\"system_app\":0}" \
49+
-e --force-scopes
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0"?>
2+
<info>
3+
<id>talk_bot_multi</id>
4+
<name>TalkBotMulti</name>
5+
<summary>Nextcloud TalkBotMulti Example</summary>
6+
<description>
7+
<![CDATA[Example of multiple Nextcloud Talk Bots in one app]]>
8+
</description>
9+
<version>1.0.0</version>
10+
<licence>MIT</licence>
11+
<author mail="[email protected]" homepage="https://github.com/andrey18106">Andrey Borysenko</author>
12+
<author mail="[email protected]" homepage="https://github.com/bigcat88">Alexander Piskun</author>
13+
<namespace>TalkBotMultiExample</namespace>
14+
<category>tools</category>
15+
<website>https://github.com/cloud-py-api/nc_py_api</website>
16+
<bugs>https://github.com/cloud-py-api/nc_py_api/issues</bugs>
17+
<repository type="git">https://github.com/cloud-py-api/nc_py_api</repository>
18+
<dependencies>
19+
<nextcloud min-version="27" max-version="28"/>
20+
</dependencies>
21+
<ex-app>
22+
<docker-install>
23+
<registry>ghcr.io</registry>
24+
<image>cloud-py-api/talk_bot_multi</image>
25+
<image-tag>latest</image-tag>
26+
</docker-install>
27+
<scopes>
28+
<required>
29+
<value>TALK</value>
30+
<value>TALK_BOT</value>
31+
</required>
32+
<optional>
33+
</optional>
34+
</scopes>
35+
<protocol>http</protocol>
36+
<system>0</system>
37+
</ex-app>
38+
</info>

0 commit comments

Comments
 (0)