نزاع بوت مع الاقتصاد مع sqlite

مرحبا يا هبر!


كنت أرغب في مشاركة تجربتي ، حيث كتبت روبوتًا مع الاقتصاد لخادم الفتنة باستخدام sqlite وأشياء صغيرة أخرى.

المرحلة التحضيرية


بوت خلق


لذلك ، قبل كتابة روبوت ، نحتاج إلى إنشائه والحصول على رمز مميز:

  1. انتقل إلى موقع المطور
  2. انقر على زر "تطبيق جديد" وقم بتسمية الروبوت
  3. احصل على الرمز المميز للبوت عن طريق تسجيل الدخول إلى الروبوت الخاص بك والعثور على علامة التبويب Bot في قائمة الإعدادات

الوحدات المطلوبة


بعد كل شيء ، نكتب في الثعبان ، وليس ASM ، لذلك نحن بحاجة إلى بعض الوحدات

$ pip install discord.py # api     

 $ pip install tabulate #     

مرحلة الكتابة


استيراد وحدات


استيراد الوحدات بسيط مثل كتابة صفحة واحدة في HTML + CSS.

 import sqlite3 # sqlite import discord # discord api from discord.ext import commands #     from tabulate import tabulate #     import json #    ,        

الاتصال sqlite


لا يوجد شيء معقد هنا. فقط بعد الاستيراد ، اكتب ما يلي:

 conn = sqlite3.connect("Discord.db") #  :memory: cursor = conn.cursor() 

إعداد قاعدة البيانات


سيكون هناك 2 متجر وجداول المستخدمين في قاعدة البيانات.

 CREATE TABLE "shop" ( "id" INT, "type" TEXT, "name" TEXT, "cost" INT ) 

 CREATE TABLE "users" ( "id" INT, "nickname" TEXT, "mention" TEXT, "money" INT, "rep_rank" TEXT, "inventory" TEXT, "lvl" INT, "xp" INT ) 

تستعد لكتابة منطق البوت


إنشاء متغير بوت.

 bot = commands.Bot(command_prefix="_")#  command_prefix    , , ,   .. 

في نهاية كل الشفرة ، نكتب طريقة تطلق روبوتنا.

 bot.run(" ,       ") 

الآن لنبدأ في كتابة روبوتنا.

 bot = commands.Bot(command_prefix="_") #     bot.run(" ,       ") 

بعد ذلك ، نكتب حدث on_ready () ، وهو المسؤول عن توفر الروبوت.

 @bot.event async def on_ready(): print("Bot Has been runned")#   for guild in bot.guilds:#..    ,       print(guild.id)# id  serv=guild#    for member in guild.members:#,    cursor.execute(f"SELECT id FROM users where id={member.id}")#,      if cursor.fetchone()==None:#   cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#       else:#  pass conn.commit()#    

بعد ذلك ، من أجل عدم إعادة تشغيل الروبوت مرة أخرى ، اكتب طريقة on_member_join ()

 @bot.event async def on_member_join(member): cursor.execute(f"SELECT id FROM users where id={member.id}")# ,      if cursor.fetchone()==None:#   cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#       else:#  pass conn.commit()#    

إذا كان روبوتنا اقتصاديًا ، فيجب أن يكون هناك عملة وأرباحها وإنفاقها. يمكن ترتيب الأرباح باستخدام نظام الخبرة.

 @bot.event async def on_message(message): if len(message.content) > 10:#    > 10 ... for row in cursor.execute(f"SELECT xp,lvl,money FROM users where id={message.author.id}"): expi=row[0]+random.randint(5, 40)#     cursor.execute(f'UPDATE users SET xp={expi} where id={message.author.id}') lvch=expi/(row[1]*1000) print(int(lvch)) lv=int(lvch) if row[1] < lv:#    ,     ,... await message.channel.send(f' !')#  ... bal=1000*lv cursor.execute(f'UPDATE users SET lvl={lv},money={bal} where id={message.author.id}')#    await bot.process_commands(message)#     ctx  conn.commit()#    

لقد كتبنا أحد الأجزاء الرئيسية. يبقى لكتابة الأوامر مثل الحساب ، المتجر ، إلخ. أعتقد كذلك بشكل حدسي.

 @bot.command() async def account(ctx): # _account ( "_",     ) table=[["nickname","money","lvl","xp"]] for row in cursor.execute(f"SELECT nickname,money,lvl,xp FROM users where id={ctx.author.id}"): table.append([row[0],row[1],row[2],row[3]]) await ctx.send(f">\n{tabulate(table)}") @bot.command() async def inventory(ctx):# _inventory ( "_",     ) counter=0 for row in cursor.execute(f"SELECT inventory FROM users where id={ctx.author.id}"): data=json.loads(row[0]) table=[["id","type","name"]] for row in data: prt=row for row in cursor.execute(f"SELECT id,type,name FROM shop where id={prt}"): counter+=1 table.append([row[0],row[1],row[2]]) if counter==len(data): await ctx.send(f'>\n{tabulate(table)}') @bot.command() async def shop(ctx):# _shop ( "_",     ) counter=0 table=[["id","type","name","cost"]] for row in cursor.execute(f"SELECT id,type,name,cost FROM shop"): counter+=1 table.append([row[0],row[1],row[2],row[3]]) if counter==4: await ctx.send(f'>\n{tabulate(table)}') 

إذا كان لديك متجر ، يمكنك شراء؟ أليس كذلك؟

 async def buy(ctx, a: int): uid=ctx.author.id await ctx.send('...    ,   id  [buy {id}]') for row in cursor.execute(f"SELECT money FROM users where id={uid}"): money = row[0] for row in cursor.execute(f"SELECT id,name,cost FROM shop where id={a}"): cost=row[2] if money >= cost:#    ,... money -=cost await ctx.send(f'  "{row[1]}"  {row[2]}') for row in cursor.execute(f"SELECT inventory FROM users where id={uid}"): data=json.loads(row[0]) data.append(a) daed=json.dumps(data) cursor.execute('UPDATE users SET money=?,inventory = ? where id=?',(money,daed,uid))#     pass if money < cost:#    await ctx.send(f' ') pass conn.commit()#    

استنتاج


هنا لدينا مثل هذا الروبوت البسيط. آمل أن يكون هذا يساعد شخص ما.

أدرك أنه من الممكن (ضروري) إضافة الكثير من الوظائف والرقائق إليها ، لكن هذه نسخة عارية من الكود يمكن للمبتدئين استخدامها لفهم كيفية عمل أساليب discord.py و sqlite المدمجة و python المدمجة.

شكرا لكم جميعا على اهتمامكم. إلى الاتصال!

Source: https://habr.com/ru/post/ar482290/


All Articles