Workflow n8n

Automatisation Google Sheets avec n8n : gestion des membres Discord

Ce workflow n8n a pour objectif de faciliter la gestion des membres d'un serveur Discord en automatisant l'interaction avec Google Sheets. Dans un contexte où les équipes doivent souvent gérer des listes de membres, ce workflow permet de récupérer, filtrer et mettre à jour des données de membres directement depuis une feuille de calcul. Par exemple, une entreprise peut utiliser ce workflow pour s'assurer que seules les personnes ayant un rôle spécifique sont incluses dans une liste, optimisant ainsi la gestion des accès et des communications. Étape 1 : le workflow est déclenché manuellement via un nœud de type 'manualTrigger'. Étape 2 : il récupère les membres du serveur Discord à l'aide du nœud 'Get First 100 Members', puis vérifie s'il y a d'autres membres à traiter. Étape 3 : les membres sont filtrés selon leur rôle grâce au nœud 'Filter to only include members with role'. Étape 4 : les données sont ensuite enregistrées ou mises à jour dans Google Sheets avec les nœuds 'SaveID' et 'Delete ID'. Ce processus permet de maintenir une base de données à jour et d'éviter les erreurs humaines. En intégrant cette automatisation n8n, les entreprises gagnent en efficacité, réduisent les risques d'erreurs et améliorent la collaboration au sein de leurs équipes. Tags clés : Google Sheets, Discord, automatisation.

Catégorie: Manual · Tags: Google Sheets, Discord, automatisation, workflows, gestion des membres0

Vue d'ensemble du workflow n8n

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Détail des nœuds du workflow n8n

  • When clicking "Test workflow"

    Déclenche le workflow lorsque l'utilisateur clique sur 'Test workflow'.

  • Delete ID

    Supprime une entrée spécifiée dans une feuille Google Sheets.

  • SaveID

    Enregistre un identifiant dans une feuille Google Sheets.

  • Get ID

    Récupère un identifiant à partir d'une feuille Google Sheets.

  • Merge

    Fusionne les données provenant de plusieurs sources dans le workflow.

  • Check if we have more members left

    Vérifie s'il reste des membres à traiter dans le workflow.

  • We're done

    Indique que le workflow est terminé sans effectuer d'action.

  • Check if we have an ID

    Vérifie si un identifiant est présent avant de continuer.

  • Filter to only include members with role

    Filtre les membres pour n'inclure que ceux ayant un rôle spécifique.

  • Get First 100 Members

    Récupère les 100 premiers membres d'un serveur Discord.

  • Get next 100 Members after last ID

    Récupère les 100 membres suivants après un identifiant donné sur Discord.

  • Sticky Note

    Crée une note autocollante avec des paramètres de couleur, largeur, hauteur et contenu.

  • Setup: Edit this to get started

    Configure les options et les affectations pour démarrer le workflow.

  • Webhook

    Définit un webhook pour recevoir des requêtes HTTP.

  • Send Response

    Envoie une réponse à la requête du webhook avec les données spécifiées.

  • Sticky Note1

    Crée une autre note autocollante avec des paramètres de couleur, hauteur et contenu.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "instanceId": "257476b1ef58bf3cb6a46e65fac7ee34a53a5e1a8492d5c6e4da5f87c9b82833",
    "templateId": "2105"
  },
  "nodes": [
    {
      "id": "3abfbefa-0a41-4dd2-a79b-99aa02447a6f",
      "name": "When clicking \"Test workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        380,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5233daa6-9b3f-4048-8187-b78decac0bbd",
      "name": "Delete ID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1900,
        380
      ],
      "parameters": {
        "operation": "delete",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Last Member"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "9",
          "name": "Nik's Google"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "d3be48cd-9652-43ea-9bbf-d9d3a6c972ae",
      "name": "SaveID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2040,
        380
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $('Merge').last().json.user.id }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ]
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "9",
          "name": "Nik's Google"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a8cb3b10-1143-4467-936c-36ea29c3489a",
      "name": "Get ID",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        920,
        240
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lj15jPOKrfS0-EAnCmths4-SVXwQJ78eBnq8C4DFRx4/edit#gid=0",
          "cachedResultName": "Last Member"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "9",
          "name": "Nik's Google"
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "82bdeec7-5ff5-4ed5-8c57-f3007bd7f81e",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1520,
        240
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "19247435-e0b0-4eac-8807-cb9e4ac532ab",
      "name": "Check if we have more members left",
      "type": "n8n-nodes-base.if",
      "position": [
        1740,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "11bd5681-d979-40a8-ba0c-8c697532cf0d",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $input.all().length }}",
              "rightValue": 100
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9845c82b-942e-4265-be8c-c4b1a9199b1e",
      "name": "We're done",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2040,
        160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86bf2fe1-22b3-4563-a4b7-b3603f96cada",
      "name": "Check if we have an ID",
      "type": "n8n-nodes-base.if",
      "position": [
        1100,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8cabfe61-be13-462f-a8ce-99ba5304fa10",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.ID }}",
              "rightValue": ""
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 2
    },
    {
      "id": "96324abb-2464-418a-850f-c6f8d3ce209f",
      "name": "Filter to only include members with role",
      "type": "n8n-nodes-base.filter",
      "position": [
        1740,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cac0aeae-ff45-4717-b11e-4e19995649fe",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.roles.filter(role => role === $('Setup: Edit this to get started').first().json['Role ID']).length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bc012053-c619-479b-8bcb-9325c209d999",
      "name": "Get First 100 Members",
      "type": "n8n-nodes-base.discord",
      "position": [
        1300,
        260
      ],
      "parameters": {
        "guildId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"
        },
        "options": {
          "simplify": true
        },
        "resource": "member"
      },
      "credentials": {
        "discordBotApi": {
          "id": "M7ApR1tTlF4HFHn4",
          "name": "Discord Bot account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "7214e807-5a51-438d-9db8-32821307f4ea",
      "name": "Get next 100 Members after last ID",
      "type": "n8n-nodes-base.discord",
      "position": [
        1300,
        80
      ],
      "parameters": {
        "after": "={{ $('Get ID').first().json.ID }}",
        "guildId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"
        },
        "options": {
          "simplify": true
        },
        "resource": "member"
      },
      "credentials": {
        "discordBotApi": {
          "id": "M7ApR1tTlF4HFHn4",
          "name": "Discord Bot account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "158d3e7a-cc8c-4ab3-b59f-5a2251c79613",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        517,
        -60.44028103044491
      ],
      "parameters": {
        "color": 5,
        "width": 350.3145253526498,
        "height": 491.3512880562059,
        "content": "## Setup\n1. Add your Google Sheets and Discord credentials.\n2. Create a Google Sheets document that contains `ID` as a column. We're using this to remember which member we received last.\n3. Edit the fields in the setup node `Setup: Edit this to get started`. *You can read up on how to get the Discord IDs via [this link](https://www.pythondiscord.com/pages/guides/pydis-guides/contributing/obtaining-discord-ids/).*\n4. Link to your Discord server in the Discord nodes\n5. Activate the workflow\n6. Call the production webhook URL in your browser"
      },
      "typeVersion": 1
    },
    {
      "id": "11926dbb-a5e0-48f9-8453-7dc21ecf6717",
      "name": "Setup: Edit this to get started",
      "type": "n8n-nodes-base.set",
      "position": [
        640,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7c8cce4f-1330-425a-baff-4c40320f2335",
              "name": "Role ID",
              "type": "string",
              "value": "<Enter your roleID here>"
            },
            {
              "id": "8533b358-d8e6-4eba-9159-f6bdd2e0df65",
              "name": "Google Sheets URL",
              "type": "string",
              "value": "<Enter your Sheets URL here>"
            },
            {
              "id": "bb87e6f5-def9-4625-818a-ce6ff7b44ed7",
              "name": "Discord ID",
              "type": "string",
              "value": "<Enter your server/guild ID here>"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "334377fc-ddb8-4c0d-9ddc-f6949b98578c",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "disabled": true,
      "position": [
        380,
        420
      ],
      "webhookId": "b40c1140-75a7-481e-b8c7-789eef1f8bac",
      "parameters": {
        "path": "discord-template",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 1.1
    },
    {
      "id": "8fac2863-a046-4ce7-8391-72486141ea98",
      "name": "Send Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1960,
        -80
      ],
      "parameters": {
        "options": {},
        "respondWith": "allIncomingItems"
      },
      "typeVersion": 1
    },
    {
      "id": "10677a2d-9bcb-4b51-8cab-a49c7f16a8d7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1900,
        -180
      ],
      "parameters": {
        "color": 7,
        "height": 265.6674473067916,
        "content": "You can replace this node according to your use case. In my case, I've send a DM to all users"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Check if we have more members left",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter to only include members with role",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get ID": {
      "main": [
        [
          {
            "node": "Check if we have an ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SaveID": {
      "main": [
        [
          {
            "node": "Get ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Setup: Edit this to get started",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete ID": {
      "main": [
        [
          {
            "node": "SaveID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get First 100 Members": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check if we have an ID": {
      "main": [
        [
          {
            "node": "Get next 100 Members after last ID",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get First 100 Members",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Test workflow\"": {
      "main": [
        [
          {
            "node": "Setup: Edit this to get started",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Setup: Edit this to get started": {
      "main": [
        [
          {
            "node": "Get ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if we have more members left": {
      "main": [
        [
          {
            "node": "We're done",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Delete ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get next 100 Members after last ID": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter to only include members with role": {
      "main": [
        [
          {
            "node": "Send Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Pour qui est ce workflow ?

Ce workflow s'adresse aux équipes de gestion de communauté, aux responsables de serveurs Discord et aux entreprises qui utilisent Google Sheets pour gérer leurs données. Il est adapté aux utilisateurs ayant des compétences techniques intermédiaires et souhaitant automatiser leurs processus de gestion.

Problème résolu

Ce workflow résout le problème de la gestion manuelle des membres sur Discord, qui peut être chronophage et sujet à des erreurs. En automatisant le processus de récupération et de mise à jour des données dans Google Sheets, les utilisateurs peuvent se concentrer sur des tâches à plus forte valeur ajoutée. De plus, il réduit le risque d'erreurs humaines lors de la gestion des accès et des communications avec les membres.

Étapes du workflow

Étape 1 : Le workflow est déclenché manuellement. Étape 2 : Il récupère les premiers 100 membres du serveur Discord. Étape 3 : Une vérification est effectuée pour déterminer s'il y a d'autres membres à traiter. Étape 4 : Les membres sont filtrés selon leur rôle. Étape 5 : Les identifiants des membres sont enregistrés ou supprimés dans Google Sheets. Étape 6 : Le processus se termine lorsque tous les membres ont été traités.

Guide de personnalisation du workflow n8n

Pour personnaliser ce workflow, vous pouvez modifier l'URL du webhook pour l'adapter à votre serveur Discord. Il est également possible de changer le nom de la feuille Google Sheets et d'ajuster les colonnes pour correspondre à vos besoins spécifiques. Si vous souhaitez inclure d'autres rôles ou critères de filtrage, vous pouvez ajuster les conditions dans le nœud 'Filter to only include members with role'. Assurez-vous que les autorisations d'accès à Google Sheets sont correctement configurées pour éviter les erreurs de connexion.