iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

Discord-bot,從0開始到做出一個機器人系列 第 18

簡單建立一個銀行系統

  • 分享至 

  • xImage
  •  

創建你的錢包

  • 一樣,對比前面的match檔,現在新增一個bank的json檔案

  • 回到bot檔,現在我們必須撰寫2個部分,一個是讀取,一個是確認你的這個key是否存在......

# cogs/includebanksystem.py
async def open_account(user):
    pass

# 省略

async def get_bank_data():
    pass
  • 前者必須確認key,後者只須要做read的這個部分即可
async def open_account(user):
    users = await get_bank_data()
    if str(user.id) in users:
        return False
    else:
        # 省略
    with open("bank.json", "w") as f:
        json.dump(users, f)
        
    return True

async def get_bank_data():
    with open("bank.json", "r")as f:            
        users = json.load(f)
    return users
  • 回到我們剛才省略的部分,原始資料一律用0
users[str(user.id)] = {}
users[str(user.id)]["wallet"] = 0
users[str(user.id)]["bank"] = 0
  • bank檔
{

}

顯示出你的錢包

  • 一樣,先打開你的json,然後依照欄位做處理
# 略
@commands.command()
async def money(self, ctx):
    await open_account(ctx.author)
    user = ctx.author
    users = await get_bank_data()
    wallet = users[str(user.id)]["wallet"]
    bank = users[str(user.id)]["bank"]
  • 將資料拿出來後,使用先前的方法,做元素添加
  • 這邊比較不一樣的是,user.avatar_url(這個東西就是自己的頭像 XD
em = discord.Embed(title = f"{ctx.author.name}'s 錢包", color = discord.Color.red())
em.set_thumbnail(url = user.avatar_url)
em.add_field(name = "Wallet", value = wallet)
em.add_field(name = "Bank", value = bank)
await ctx.send(embed = em)
  • 示意圖

貨物上架

  • 在bot最上放以json的格式,輸入你想要的貨物
# 略
shop = [
            {"name": "Watch", "price": 8},
            {"name": "Laptop", "price": 87},
            {"name": "PC", "price": 870},
            {"name": "PS5", "price": 690},
            {"name": "Cat", "price": 1000}
        ]
  • 回到下方,寫出函式
@commands.command()
async def market(self, ctx):
        pass
  • 利用for......in......迴圈
em = discord.Embed(title = "market", color = 0x6345)
em.set_thumbnail(url = "https://www.formula-ai.com/wp-content/uploads/2020/09/python_or_java_meme.jpg")
    
for item in shop:
    name = item["name"]
    price = item["price"]
    em.add_field(name = name, value = f"${price}")
await ctx.send(embed = em)
  • 示意圖

上一篇
加上random與time模組,限制次數與時間的管理(3)
下一篇
沒錢就跟別人要錢,別人的錢就是我的錢,但我的錢還是我的錢
系列文
Discord-bot,從0開始到做出一個機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言