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)
因此,我目前创建了一个命令,该命令将遍历一个文本文件并告诉您是否在 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)