مرحبا يا هبر!
كنت أرغب في مشاركة تجربتي ، حيث كتبت روبوتًا مع الاقتصاد لخادم الفتنة باستخدام sqlite وأشياء صغيرة أخرى.
المرحلة التحضيرية
بوت خلق
لذلك ، قبل كتابة روبوت ، نحتاج إلى إنشائه والحصول على رمز مميز:
- انتقل إلى موقع المطور
- انقر على زر "تطبيق جديد" وقم بتسمية الروبوت
- احصل على الرمز المميز للبوت عن طريق تسجيل الدخول إلى الروبوت الخاص بك والعثور على علامة التبويب Bot في قائمة الإعدادات
الوحدات المطلوبة
بعد كل شيء ، نكتب في الثعبان ، وليس ASM ، لذلك نحن بحاجة إلى بعض الوحدات
$ pip install discord.py
$ pip install tabulate
مرحلة الكتابة
استيراد وحدات
استيراد الوحدات بسيط مثل كتابة صفحة واحدة في HTML + CSS.
import sqlite3
الاتصال sqlite
لا يوجد شيء معقد هنا. فقط بعد الاستيراد ، اكتب ما يلي:
conn = sqlite3.connect("Discord.db")
إعداد قاعدة البيانات
سيكون هناك 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="_")
في نهاية كل الشفرة ، نكتب طريقة تطلق روبوتنا.
bot.run(" , ")
الآن لنبدأ في كتابة روبوتنا.
bot = commands.Bot(command_prefix="_")
بعد ذلك ، نكتب حدث 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:
استنتاج
هنا لدينا مثل هذا الروبوت البسيط. آمل أن يكون هذا يساعد شخص ما.
أدرك أنه من الممكن (ضروري) إضافة الكثير من الوظائف والرقائق إليها ، لكن هذه نسخة عارية من الكود يمكن للمبتدئين استخدامها لفهم كيفية عمل أساليب discord.py و sqlite المدمجة و python المدمجة.
شكرا لكم جميعا على اهتمامكم. إلى الاتصال!