Discord py 从 google sheet 读取数据

Discord py read data from a google sheet

因此,我目前创建了一个命令,该命令将遍历一个文本文件并告诉您是否在 txt 文件中找到您消息中的内容。

所以人们会做 !stake(用户名),机器人会通过文本文档并告诉他们他们的用户名是否显示在列表中。

但是,我需要有关如何让以下命令从 google sheet 而不是 txt 文档中读取的帮助。 google sheet 中的所有内容都在一行中,每个单元格中都有一个用户名。

例如: A 行: 1-用户1 2-用户2 3- 用户 3 4-用户4 等等

[我正在使用的命令。]

@client.command()
async def check(ctx, arg):
        user = arg
        if user in open("affiliates.txt").read():
             embed = discord.Embed(title=f"**Woohoo! @{ctx.author.name}**")
             embed.add_field(name=f"Your username is on the list", value=":white_check_mark:", inline=False)
             await ctx.send(embed=embed)
             await asyncio.sleep(10)
             await ctx.channel.purge(limit=2)
        else:
             embed = discord.Embed(title=f"**Woops! @{ctx.author.name}**")
             embed.add_field(name=f"Your username is not on the list!", value=":x:", inline=False)
             await ctx.send(embed=embed)
             await asyncio.sleep(10)
             await ctx.channel.purge(limit=2)

如有任何帮助,我们将不胜感激!

我想通了。我觉得很傻哈哈。以下是我如何实现目标的一些说明。

|

在 Google 云上创建一个新项目 转到以下link并创建一个新项目https://console.cloud.google.com/

加上 API 的

现在我们需要添加以下API的:

– google 驱动器

– google sheets

添加 google 驱动器 API 后,它会要求您创建凭据。按照这些步骤操作,您应该会看到 JSON 文件已下载。保存此文件并将其重命名为“credentials”并将其添加到 python 源文件的目录中。

分享Sheet

打开之前下载的json文件,找到客户端邮箱。复制电子邮件并与该电子邮件地址分享您的 google sheet。

安装模块

– gspread

– oauth2client

  • --升级google-api-python-client google-auth-httplib2 google-auth-oauthlib

完成所有设置并准备就绪后,您可以参考下面我的代码并根据需要重建它。

import discord, json, asyncio, gspread
from discord.ext import commands
from discord.ext.commands import cooldown, BucketType
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)

cli = gspread.authorize(creds)

sheet = cli.open("<ENTER GOOGLE SHEET NAME>").sheet1  # Open the spreadsheet

data = sheet.get_all_records()  # Get a list of all records

row = sheet.row_values(1) # Get a specific row

col = sheet.col_values(1) # Get a specific column

@client.command()
@commands.cooldown(1, 60, commands.BucketType.user) #Cooldown timer on command
async def stake(ctx, arg):
        user = arg
        cli.open("<ENTER GOOGLE SHEET NAME>").sheet1
        if user in col:
             embed = discord.Embed(title=f"**Woohoo! @{ctx.author.name}**")
             embed.add_field(name=f"Your username is on the list!", value=":white_check_mark:", inline=False)
             await ctx.send(embed=embed)
             await asyncio.sleep(10) ## Timer for purge
             await ctx.channel.purge(limit=2) ## Deletes the users command message and the bots response after 10 seconds.
             print(f" Affiliate name {arg} has been found!")
        else:
             embed = discord.Embed(title=f"**Woops! @{ctx.author.name}!**")
             embed.add_field(name=f"Your username is not on the list!!", value=":x:", inline=False)
             await ctx.send(embed=embed)
             await asyncio.sleep(10) ## Timer for purge
             await ctx.channel.purge(limit=2) ## Deletes the users command message and the bots response after 10 seconds.
             print(f" Affiliate name {arg} was not found!")

@stake.error
async def command_name_error(ctx, error):
        if isinstance(error, commands.CommandOnCooldown):
            await ctx.send(f"**@{ctx.author.name} Please wait 60s before using this command again! :warning:**")
            await asyncio.sleep(10)
            await ctx.channel.purge(limit=2)