目录
Welcome to Code Block's blog
本篇文章主要介绍了
[Telebot区块链游戏机器人]
❤博主广交技术好友,喜欢文章的可以关注一下❤
1.编写目的
本文章为记录自己开发基于区块链和Telebot实现的[石头、剪刀、布]游戏的过程,加深自己对区块链知识的理解和使用,加深对TeleBot依赖库的使用,同时希望可以帮助到有想实现相关功能的朋友.
2.实现功能
2.1 Wallet功能
用户可以通过/create命令命令创建游戏wallet,同时可以输入地址或扫码向该wallet发送一定数量的游戏代币,使用/wallet命令可以显示当前游戏wallet内的剩余代币数量。
2.2 游戏功能
用户可以将bot机器人添加到公开群组,同时在群组内发送/game命令创建具有奖励随机结果的游戏,使用不同的人向群组内回复该游戏/pk进行对战,获取对战结果并向游戏wallet发送设定的奖励游戏代币,用户可以使用/del删除当前已创建游戏。
2.3 提出功能
用户可以通过/bind命令绑定外部wallet并进行代币提出.
2.4 辅助功能
用户可以输入/rules查看游戏规则,输入/help命令查看机器人命令及解释。
3.功能实现详解
3.1 wallet功能
用户通过/create命令命令创建游戏wallet可以参考我的博客生成solana公私钥,/wallet显示wallet信息是通过solana.py根据保存的用户公钥查询.
def getBalance(publicKey:str):
solana_client = Client(rpc_url)
#公钥转换
pubkey=Pubkey.from_string(publicKey)
tokenPublicKey=Pubkey.from_string(BOGGY_TOKEN_MINT)
#获取SOL余额
sol_balance = solana_client.get_balance(pubkey)
#获取SPL代币余额
token_account=solana_client.get_token_accounts_by_owner_json_parsed(pubkey,TokenAccountOpts(mint=tokenPublicKey))
if noTokenAccount(token_account):
#不存在代币账户时,则余额为0
token_balance=0.0
else:
token_account_json=token_account.value[0].account.to_json()
token_balance=json.loads(token_account_json)['data']['parsed']['info']['tokenAmount']['uiAmount']
sol_balance=(sol_balance.value/10**9)
return sol_balance,token_balance
同时为方便用户使用,这边会将用户公钥通过qrcode库转换为二维码供用户扫码,主要代码为:
import qrcode
from io import BytesIO
from PIL import Image
import qrcode.main
def generate_qr(data):
# 生成普通二维码
qr = qrcode.main.QRCode(
version=1,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white")
# 将二维码图片保存到 BytesIO 对象中
img_io = BytesIO()