NFTメタ情報をランダムに抽出して、宝くじ当選のプログラム
とみます(@20tomimasu)です。
discord.pyを触り始めて、早1週間。
ようやく、SCONFTのメタ情報に応じて、おみくじ? 宝くじ機能を実装することができました。
free mint してくれた方が、先月の1人に対して、今月は計4人になったので、ランダムで当選者を決めれます。w
プログラムは書いてないと忘れるので、ログに残しておきます。
randomモジュールを使いたい
前回、discord.pyのBOTアカウントを作成し、簡単な返答プログラムを描いてみた。
>>discord.pyの始め方 ‘intents’エラーに対して
なんとなく、コードの雰囲気を読み取れたので、
もう少し、具体的な機能を実装していこう。
NFTのメタ情報に応じて、
各カテゴリーにつき、ランダムに1つのデータをピックアップしていくというもの。
検索していくと、
が使えるそうで。
早速、pip でインストールしようとしたが、最近は、デフォルトで導入されているそうで、不要だった。w
rondomの実装
彼の記事が大変シンプルで分かりやすかった。
>>PythonでDiscordのボットサンプルを作成(rewrite版)
自分で作ったSCO-NFTのメタ情報を基に、書き換えていこう↓
最低限の必要な箇所を引用している。
import discord
import random
# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'XXXXXXXXXX'
# 接続に必要なオブジェクトを生成
client = discord.Client(intents=discord.Intents.all())
# 起動時に動作する処理
@client.event
async def on_ready():
# 起動したらターミナルにログイン通知が表示される
print('ログインしました')
print(client.user.name) # ボットの名前
print(client.user.id) # ボットのID
print(discord.__version__) # discord.pyのバージョン
print('------')
# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
# メッセージ送信者がBotだった場合は無視する
if message.author.bot:
return
# 「/sco」と発言したら「にゃーん」が返る処理
if message.content == '/sco':
await message.channel.send('にゃーん')
# 「/xxx」と発言したら、ランダムにNFTメタ情報が返る処理
elif message.content == '/background':
embed = discord.Embed(title="ランダムで抽出するにゃん!!",color=0xFFD700)
embed.add_field(name="①BACKGROUNDは…", value=random.choice(('[R]earth','[R]galaxy','[R]heart','[R]light','[SR]chaos','blue','pink','purple')), inline=False)
await message.channel.send(embed=embed)
elif message.content == '/body':
embed = discord.Embed(title="ランダムで抽出するにゃん!!",color=0xFFD700)
embed.add_field(name="②bodyは…", value=random.choice(('boiled','normal','wood')), inline=False)
await message.channel.send(embed=embed)
elif message.content == '/face':
embed = discord.Embed(title="ランダムで抽出するにゃん!!",color=0xFFD700)
embed.add_field(name="③faceは…", value=random.choice(('angry','cold','enjoy','satisfied','shock')), inline=False)
await message.channel.send(embed=embed)
elif message.content == '/fronthair':
embed = discord.Embed(title="ランダムで抽出するにゃん!!",color=0xFFD700)
embed.add_field(name="④fronthairは…", value=random.choice(('beer','cowboy','doller','glass','mugiwara','ribbon','sake','sensu')), inline=False)
await message.channel.send(embed=embed)
# Botの起動とDiscordサーバーへの接続
client.run(TOKEN)
ってな感じ。
SCO-NFTには、4つのカテゴリーが存在する↓
- background
- body
- face
- fronthair
openseaで見ると↓
↑Propetiesで描かれたところだね。
この4つのカテゴリーの中から、ランダムに1つずつ、pick up しようと。
Generative NFTを作った時のメタ情報の中から↓
①background 計8つの中から
- [R]earth
- [R]galaxy
- [R]heart
- [R]light
- [SR]chaos
- blue
- pink
- purple
②body 計3つの中から
- boiled
- normal
- wood
③face 計5つの中から
- angry
- cold
- enjoy
- satisfied
- shock
④fronthair 計8つの中から
- beer
- cowboy
- doller
- glass
- mugiwara
- ribbon
- sake
- sensu
結果↓
discordでBOTが動作することを確認できた
↑じゃん!!
指定したコマンドを入力すると、BOTのSCOちゃんが、ランダムに返答してくれた。w
可愛い💛
例えば、今回の場合は、
- 背景色が、宇宙で、
- 身体の色がノーマルな黄色で、
- 顔は、クールな目で、
- 飾りが、麦わら帽子
といった感じに。
まだ、free mint数が4人なので、
全部の箇所が該当するNFT保有者はいなかったものの、
該当するメタ情報が多い人を当選者とした。
自分のできる範囲で、NFTを使った企画を楽しみつつ。
おわりに
以上「NFTメタ情報をランダムに抽出して、宝くじ当選のプログラム」でした。
discordとpythonの相性が良いように思え。
chatworkから、引越して正解だったかもですね。
SCO-NFT保有者への勝手に配当企画!!
まだまだfree mintをお待ちしております!
気楽に参加してねん。記事下の企画からどうぞ!
それでは、また。