From 7c272d7066f8bfce91c1f3ae66a9b54050bb0efb Mon Sep 17 00:00:00 2001
From: Daniel Heinrich <148484595+danielatgoogle@users.noreply.github.com>
Date: Fri, 27 Oct 2023 11:41:52 -0700
Subject: [PATCH] Add files via upload (#425)

* Add files via upload

Hello DevRel friends,

Working with @gtondello, I'm uploading code samples for the upcoming Google Chat Advanced Service in Apps Script launch.  These code samples pair with the following bugs and documentation changelists.

* Updating chat.gs with sqrrrl's feedback

* Update advanced/chat.gs

Co-authored-by: Gustavo Tondello <gustavo@tondello.com>

* Fixing member >>> membership in chat.gs

Fixing member >>> membership per Gustavo's feedback in https://github.com/googleworkspace/apps-script-samples/pull/425#discussion_r1374625393.

* Update advanced/chat.gs

Co-authored-by: Gustavo Tondello <gustavo@tondello.com>

* Fixing linter errors in chat.gs

Fixing the following linter errors:

1.  On line 107, "Expected parentheses around arrow function argument".

2.  On lines, 108, 109, and 110, " Expected indentation of 10 spaces but found 8".

---------

Co-authored-by: Gustavo Tondello <gustavo@tondello.com>
---
 advanced/chat.gs | 118 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 118 insertions(+)
 create mode 100644 advanced/chat.gs

diff --git a/advanced/chat.gs b/advanced/chat.gs
new file mode 100644
index 000000000..9cb506934
--- /dev/null
+++ b/advanced/chat.gs
@@ -0,0 +1,118 @@
+/**
+ * Copyright Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// [START chat_post_message_with_user_credentials]
+/**
+ * Posts a new message to the specified space on behalf of the user.
+ * @param {string} spaceName The resource name of the space.
+ */
+function postMessageWithUserCredentials(spaceName) {
+  try {
+    const message = {'text': 'Hello world!'};
+    Chat.Spaces.Messages.create(message, spaceName);
+  } catch (err) {
+    // TODO (developer) - Handle exception
+    console.log('Failed to create message with error %s', err.message);
+  }
+}
+// [END chat_post_message_with_user_credentials]
+
+// [START chat_post_message_with_app_credentials]
+/**
+ * Posts a new message to the specified space on behalf of the app.
+ * @param {string} spaceName The resource name of the space.
+ */
+function postMessageWithAppCredentials(spaceName) {
+  try {
+    // See https://developers.google.com/chat/api/guides/auth/service-accounts
+    // for details on how to obtain a service account OAuth token.
+    const appToken = getToken_();
+    const message = {'text': 'Hello world!'};
+    Chat.Spaces.Messages.create(
+        message,
+        spaceName,
+        {},
+        // Authenticate with the service account token.
+        {'Authorization': 'Bearer ' + appToken});
+  } catch (err) {
+    // TODO (developer) - Handle exception
+    console.log('Failed to create message with error %s', err.message);
+  }
+}
+// [END chat_post_message_with_app_credentials]
+
+// [START chat_get_space]
+/**
+ * Gets information about a Chat space.
+ * @param {string} spaceName The resource name of the space.
+ */
+function getSpace(spaceName) {
+  try {
+    const space = Chat.Spaces.get(spaceName);
+    console.log('Space display name: %s', space.displayName);
+    console.log('Space type: %s', space.spaceType);
+  } catch (err) {
+    // TODO (developer) - Handle exception
+    console.log('Failed to get space with error %s', err.message);
+  }
+}
+// [END chat_get_space]
+
+// [START chat_create_space]
+/**
+ * Creates a new Chat space.
+ */
+function createSpace() {
+  try {
+    const space = {'displayName': 'New Space', 'spaceType': 'SPACE'};
+    Chat.Spaces.create(space);
+  } catch (err) {
+    // TODO (developer) - Handle exception
+    console.log('Failed to create space with error %s', err.message);
+  }
+}
+// [END chat_create_space]
+
+// [START chat_list_memberships]
+/**
+ * Lists all the members of a Chat space.
+ * @param {string} spaceName The resource name of the space.
+ */
+function listMemberships(spaceName) {
+  let response;
+  let pageToken = null;
+  try {
+    do {
+      response = Chat.Spaces.Members.list(spaceName, {
+        pageSize: 10,
+        pageToken: pageToken
+      });
+      if (!response.memberships || response.memberships.length === 0) {
+        pageToken = response.nextPageToken;
+        continue;
+      }
+      response.memberships.forEach((membership) => console.log(
+          'Member resource name: %s (type: %s)',
+          membership.name,
+          membership.member.type));
+      pageToken = response.nextPageToken;
+    } while (pageToken);
+  } catch (err) {
+    // TODO (developer) - Handle exception
+    console.log('Failed with error %s', err.message);
+  }
+}
+// [END chat_list_memberships]