①Botで実行したいこと
・ユーザーIDで関連づけられたスコアを初期値を0と置き、特定のチャンネルで!scoreと入力する事で、+1されて「[discordのニックネーム]のスコアは〇です。」と表示されるようにする。
スコアに応じて役職を付与&剥奪を行う。
また、特定のユーザーIDには初期値を違う数字で付与できるようにする。
②困っていること
・初めはshelveを使用していたのですが、HerokuでBotを使用し続けているとデータがリセットされる事態が起こることがわかりました。Herokuではshelveが使えないということがわかりました。
・shelveの部分(with以降の部分)をredisで書く方法がわからないです。
③現状のコード(shelveの部分が置き換わっていません。)
python
1import discord 2import random 3import redis 4import os 5 6client = discord.Client() 7 8pool = redis.ConnectionPool.from_url( 9 url=os.environ['REDIS_URL'], 10 db=0, 11 decode_responses=True 12) 13 14rc = redis.StrictRedis(connection_pool=pool) 15 16# Redis初期値入力群 17rc.set('ユーザーID-1', 10) 18rc.set('ユーザーID-2', 20) 19 20@client.event 21async def on_ready(): 22 print('Logged in as') 23 print(client.user.name) 24 print(client.user.id) 25 print('------') 26 27@client.event #新人はがしの術 28async def on_message(message): 29 #カウントしてその数字に対応する役職を付与する 30 if message.channel.id == チャンネルID and message.content == '!score': 31 CHANNEL_ID = Bot返答場所チャンネルID 32 channel = client.get_channel(CHANNEL_ID) 33 with redis.open("score.db") as scoredb: 34 oldscore = scoredb.get(str(message.author.id), 0) 35 newscore = oldscore + 1 36 scoredb[str(message.author.id)] = newscore 37 await channel.send(f'{message.author.display_name}の現在のスコアは{newscore}です。') 38 role1 = discord.utils.get(message.guild.roles,name="役職1") 39 role2 = discord.utils.get(message.guild.roles,name="役職2") 40 role3 = discord.utils.get(message.guild.roles,name="役職3") 41 role4 = discord.utils.get(message.guild.roles,name="役職4") 42 role5 = discord.utils.get(message.guild.roles,name="役職5") 43 if newscore>=30: 44 await message.author.remove_roles(role4) 45 await message.author.add_roles(role5) 46 await message.channel.send(f'**{message.author.display_name}**がランクアップ!``役職4➤役職5``') 47 elif newscore>=10: 48 await message.author.remove_roles(role3) 49 await message.author.add_roles(role4) 50 await message.channel.send(f'**{message.author.display_name}**がランクアップ!``役職3➤役職4``') 51 elif newscore>=5: 52 await message.author.remove_roles(role2) 53 await message.author.add_roles(role3) 54 await message.channel.send(f'**{message.author.display_name}**がランクアップ!``役職2➤役職3``') 55 elif newscore>=3: 56 await message.author.remove_roles(role1) 57 await message.author.add_roles(role2) 58 await message.channel.send(f'**{message.author.display_name}**がランクアップ!``役職1➤役職2``') 59 elif newscore>=1: 60 await message.author.add_roles(role1) 61 await message.channel.send(f'**{message.author.display_name}**がランクアップ!``無➤役職1``')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。