魔法でシステムは作れない

魔法でシステムは作れない

甘えん坊SEが独学を進めるためのノート

【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()

DiscrodのBOTソースコード.py

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)