【python】BOTソースコードサンプル+スプレッドシートアクセスサンプル
gspreadのソースコード.py(spreadsheet_acesser.py)
import gspread import json from datetime import datetime, timedelta from oauth2client.service_account import ServiceAccountCredentials class member_scores(object): """docstring for member_scores.""" def __init__(self): super(member_scores).__init__() self.names={} self.scores={} self.margins={} # Googleスプレッドシートへのアクセス def connect_gspread(self, jsonf,key): scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(jsonf, scope) gc = gspread.authorize(credentials) SPREADSHEET_KEY = key worksheet = gc.open_by_key(SPREADSHEET_KEY) return worksheet def access_ws(self): # 認証用秘密鍵とブックのURL-keyの接続 jsonf = "JSONファイルのパス" spread_sheet_key = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" ws = self.connect_gspread(jsonf,spread_sheet_key) target = ws.worksheet("シート名") # A列取得(アドレス指定):メンバー情報 cmd_list = target.get("A:A") # B列取得(数値指定):過去基準のデータ score_list = target.col_values(1) # 単一セル取得(行, 列 指定):最新基準の府付けデータ date_time = target.cell(1, 2, value_render_option='UNFORMATTED_VALUE').value # 日付処理 date_time = str(datetime(1899, 12, 30) + timedelta(date_time))[:10] score_list[1] = date_time.replace("-","/") margin_list = target.col_values(number_margin_score_col) self.names = cmd_list self.scores = score_list self.margins = margin_list return self def get_obj(): users = member_scores() return users.access_ws()
import discord import asyncio # 自作のスプレッドシートアクセスのモジュール import spreadsheet_acesser # CONSTANTS # 自分のBotのアクセストークンに置き換えてください STR_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # 接続に必要なオブジェクトを生成 client = discord.Client() members = spreadsheet_acesser.get_obj() # 起動時に動作する処理 @client.event async def on_ready(): # ターミナルの方に出力 print('Logged in as') print(client.user.name) print(client.user.id) print('------') # メッセージ受信時に動作する処理 @client.event async def on_message(message): # メッセージ記載者判定 if message.author.bot: # BOTのメッセージには対応しない return # チャンネル未指定のメッセージ処理 # メッセージ内容判定 if message.content == '/Hello': await message.channel.send('Helloに対する返信') # チャンネル未指定のメッセージ処理 # メッセージ内容判定 if message.content == '/Bye': await message.channel.send('Byeに対する返信') # チャンネル判定 if message.channel.name == 'チャンネル名称': # メッセージ内容判定 if message.content.startswith('/'): # 処理割愛 pass # Botの起動とDiscordサーバーへの接続 client.run(STR_TOKEN)