Initial commit: Nextcloud Node-RED Docker image and custom nodes

This commit is contained in:
newkle3r
2026-05-15 14:50:48 +02:00
commit fd7cc695f7
44 changed files with 3936 additions and 0 deletions
+106
View File
@@ -0,0 +1,106 @@
<script type="text/javascript">
RED.nodes.registerType('talk', {
category: 'nextcloud', color: '#0082C9',
defaults: {
name: { value: "" }, nextcloud: { type: "nextcloud-config", required: true },
operation: { value: "room:list" },
token: { value: "" }, messageId: { value: "" }, attendeeId: { value: "" },
pollId: { value: "" }, banId: { value: "" }, threadId: { value: "" },
fileId: { value: "" }, shareToken: { value: "" },
bodyMessage: { value: "" }, bodyRoomName: { value: "" }, bodyRoomType: { value: "" },
bodyLevel: { value: "" }, bodyReplyTo: { value: "" }, bodySilent: { value: "" },
bodyDescription: { value: "" }, bodyQuestion: { value: "" }, bodyPassword: { value: "" },
bodyEmoji: { value: "" }, bodyTimestamp: { value: "" }, bodyReaction: { value: "" },
bodyActorType: { value: "" }, bodyActorId: { value: "" }, bodyFlags: { value: "" },
bodyState: { value: "" }, bodyKey: { value: "" }, bodyValue: { value: "" },
bodyCalendarUri: { value: "" }, bodyStart: { value: "" }, bodyThreadTitle: { value: "" },
bodySendAt: { value: "" }, bodyPinUntil: { value: "" }, bodyMode: { value: "" },
bodyAmount: { value: "" }, bodyStatus: { value: "" }
},
inputs: 1, outputs: 1, icon: "talk.svg",
label: function() { return this.name || "Talk"; }
});
</script>
<script type="text/html" data-template-name="talk">
<div class="form-row"><label for="node-input-name"><i class="fa fa-tag"></i> Name</label><input type="text" id="node-input-name" placeholder="Talk"></div>
<div class="form-row"><label for="node-input-nextcloud"><i class="fa fa-cloud"></i> Config</label><input type="text" id="node-input-nextcloud" placeholder="Select config node"></div>
<div class="form-row"><label for="node-input-operation"><i class="fa fa-cog"></i> Operation</label>
<select id="node-input-operation" style="width:100%;">
<optgroup label="Rooms">
<option value="room:list">List Rooms</option><option value="room:listed">List Listed Rooms</option>
<option value="room:get">Get Room</option><option value="room:create">Create Room</option>
<option value="room:rename">Rename Room</option><option value="room:delete">Delete Room</option>
<option value="room:noteToSelf">Note to Self</option>
<option value="room:description">Set Description</option>
<option value="room:password">Set Password</option>
<option value="room:readOnly">Set Read-Only</option>
<option value="room:listable">Set Listable</option>
<option value="room:archive">Archive</option><option value="room:unarchive">Unarchive</option>
<option value="room:important">Mark Important</option><option value="room:unimportant">Unmark Important</option>
<option value="room:sensitive">Mark Sensitive</option><option value="room:insensitive">Unmark Sensitive</option>
<option value="room:messageExpiration">Set Message Expiration</option>
<option value="room:capabilities">Get Capabilities</option>
<option value="room:scheduleMeeting">Schedule Meeting</option>
</optgroup>
<optgroup label="Favorites &amp; Notifications">
<option value="favorite:add">Add Favorite</option><option value="favorite:remove">Remove Favorite</option>
<option value="notify:level">Set Notification Level</option><option value="notify:calls">Set Call Notifications</option>
</optgroup>
<optgroup label="Public/Private">
<option value="room:public">Make Public</option><option value="room:private">Make Private</option>
</optgroup>
<optgroup label="Participants">
<option value="participant:list">List Participants</option><option value="participant:add">Add Participant</option>
<option value="participant:remove">Remove Attendee</option><option value="participant:removeSelf">Leave Room</option>
<option value="participant:join">Join Room</option><option value="participant:leave">Leave Active</option>
<option value="participant:sessionState">Set Session State</option>
<option value="participant:promote">Promote Moderator</option><option value="participant:demote">Demote Moderator</option>
</optgroup>
<optgroup label="Permissions">
<option value="permissions:default">Set Default Permissions</option>
<option value="permissions:call">Set Call Permissions</option>
<option value="permissions:attendee">Set Attendee Permissions</option>
</optgroup>
<optgroup label="Chat">
<option value="chat:send">Send Message</option><option value="chat:receive">Receive Messages</option>
<option value="chat:delete">Delete Message</option><option value="chat:edit">Edit Message</option>
<option value="chat:context">Get Context</option><option value="chat:reminderSet">Set Reminder</option>
<option value="chat:reminderGet">Get Reminder</option><option value="chat:reminderDelete">Delete Reminder</option>
<option value="chat:readMarker">Set Read Marker</option><option value="chat:unread">Mark Unread</option>
<option value="chat:pin">Pin Message</option><option value="chat:unpin">Unpin Message</option>
<option value="chat:clearHistory">Clear History</option>
<option value="chat:share">Share Object</option><option value="chat:sharedOverview">Shared Overview</option>
<option value="chat:sharedObjects">Shared Objects</option>
<option value="chat:mentions">Search Mentions</option>
<option value="chat:schedule">Schedule Message</option>
<option value="chat:scheduledGet">Get Scheduled</option><option value="chat:scheduledDelete">Delete Scheduled</option>
</optgroup>
<optgroup label="Call">
<option value="call:peers">Get Peers</option><option value="call:join">Join Call</option>
<option value="call:updateFlags">Update Flags</option><option value="call:leave">Leave Call</option>
<option value="call:ring">Ring Attendee</option>
</optgroup>
<optgroup label="Reactions"><option value="reaction:add">Add Reaction</option><option value="reaction:delete">Delete Reaction</option><option value="reaction:list">List Reactions</option></optgroup>
<optgroup label="Polls"><option value="poll:create">Create Poll</option><option value="poll:get">Get Poll</option><option value="poll:vote">Vote</option><option value="poll:close">Close Poll</option></optgroup>
<optgroup label="Bans"><option value="ban:list">List Bans</option><option value="ban:add">Ban Actor</option><option value="ban:remove">Unban</option></optgroup>
<optgroup label="Avatar"><option value="avatar:get">Get Avatar</option><option value="avatar:emoji">Set Emoji Avatar</option><option value="avatar:delete">Delete Avatar</option></optgroup>
<optgroup label="Breakout Rooms"><option value="breakout:configure">Configure</option><option value="breakout:start">Start</option><option value="breakout:stop">Stop</option><option value="breakout:remove">Remove</option><option value="breakout:broadcast">Broadcast</option><option value="breakout:list">List Breakout Rooms</option></optgroup>
<optgroup label="Recording"><option value="recording:start">Start</option><option value="recording:stop">Stop</option></optgroup>
<optgroup label="Signaling"><option value="signaling:settings">Get Settings</option></optgroup>
<optgroup label="Files"><option value="file:getRoomByFileId">Get Room by File ID</option><option value="file:getRoomByShare">Get Room by Share Token</option></optgroup>
<optgroup label="Threads"><option value="thread:recent">Recent Threads</option><option value="thread:subscribed">Subscribed Threads</option><option value="thread:get">Get Thread</option><option value="thread:rename">Rename Thread</option><option value="thread:notify">Set Thread Notification</option></optgroup>
<optgroup label="Calendar"><option value="calendar:dashboard">Dashboard Events</option><option value="calendar:mutual">Mutual Events</option></optgroup>
<optgroup label="Settings"><option value="settings:set">Set User Setting</option></optgroup>
</select>
</div>
<hr><div style="font-weight:bold;margin-bottom:6px;">Path Parameters</div>
<div class="form-row"><label>Room Token</label><input type="text" id="node-input-token" placeholder="msg.token"></div>
<div class="form-row"><label>Message ID</label><input type="text" id="node-input-messageId" placeholder="msg.messageId"></div>
<div class="form-row"><label>Attendee ID</label><input type="text" id="node-input-attendeeId" placeholder="msg.attendeeId"></div>
<div class="form-row"><label>Poll ID</label><input type="text" id="node-input-pollId" placeholder="msg.pollId"></div>
<div class="form-row"><label>Ban ID</label><input type="text" id="node-input-banId" placeholder="msg.banId"></div>
<div class="form-row"><label>Thread ID</label><input type="text" id="node-input-threadId" placeholder="msg.threadId"></div>
<div class="form-row"><label>File ID</label><input type="text" id="node-input-fileId" placeholder="msg.fileId"></div>
<div class="form-row"><label>Share Token</label><input type="text" id="node-input-shareToken" placeholder="msg.shareToken"></div>
<div class="form-tips"><p>All path params and body fields overridable via <code>msg.*</code>. Poll options: pass as <code>msg.options</code> array.</p></div>
</script>