کداکسپلور | CodeExplore
7.92K subscribers
2.01K photos
343 videos
103 files
1.82K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
پلاگین Bootstrap IntelliSense برای Visual Studio Code که تجربه برنامه نویسی با بوت استرپ رو برای شما بهتر و موثرتر میکنه. تکمیل خودکار کلاس های CSS، کاهش خطاها و صرفه جویی در زمان و سادگی کار با بوت استرپ از ویژگی های این ابزار هستش.

این اکستنشن از Tailwind CSS IntelliSense الهام گرفته شده و زمانی که در حال نوشتن بوت استرپ هستید کلاس های CSS رو به شما پیشنهاد میده.

🔗لینک دانلود

#bootstrap #IntelliSense
☕️ @CodeExplore | </Sina>
Please open Telegram to view this post
VIEW IN TELEGRAM
9❤‍🔥4🔥3
🔥خوش اومدین به یه آموزش دیگه از سری آموزشی OOP ، امروز قصد داریم راجب تو مفهوم دیگه از OOP صحبت کنیم

💥چندریختی ( Polymorphism ) در OOP
چندریختی یکی از پایه‌های اصلی برنامه نویسی شیءگراس که مفهومش میشه همون چندشکلی یا قابلیت داشتن چندین شکل که البته واضحه. این مفهوم به آبجکت هامون این اجازه رو میده تا رفتار های متفاوتی برای یه متود یا یه عمل یکسان از خودشون نشون بدن. یعنی میتونیم یه متود رو چندین بار تعریف کنیم و کارای مختلفی باهاش کنیم با اینکه اسمشون یکیه

◀️ویژگی های چندریختی:
🔴کد تمیزتر و قابل نگهداری تر
🔴انعطاف پذیری بالا
🔴توسعه پذیری بالا

مثال زیر نحوه استفاده از چند ریختی در زمان بارگذاری متود ( Method Overloading ) رو نشونتون میده:
class Shape {
draw() {
console.log("Drawing a shape");
}

draw(width, height) {
console.log("Drawing a shape with width:", width, "and height:", height);
}
}

class Circle extends Shape {
draw() {
console.log("Drawing a circle");
}

draw(radius) {
console.log("Drawing a circle with radius:", radius);
}
}

const circle = new Circle();

circle.draw(); // Output: Drawing a circle
circle.draw(10); // Output: Drawing a circle with radius: 10

const shape = new Shape();
shape.draw(); // Output: Drawing a shape

☄️توی مثال بالا ما اومدیم و چندریختی رو روی متود draw پیاده کردیم و درسته چندین متود drow داریم ولی هرکدوم یه کار جدا میکنن و طبق ورودی خودش مشخص میشه دقیقا کدوم یکیش صدا زده بشه

👑وابستگی ( Dependency ) در OOP
وابستگی در OOP اشاره به ارتباط دوتا کلاس به هم داره که یعنی یه کلاس برای اینکه کارشو انجام بده نیاز به یه کلاس دیگه داره، این وابستگی ها هم میتونه به صورت مستقیم یا غیر مستقیم باشه

◀️ویژگی های وابستگی در OOP
🔵کد تمیز تر
🔵قابلیت ازمایش پذیری بیشتر
🔵انعطاف پذیری بالا
🔵استفاده مجدد

یه مثال هم از وابستگی باهم ببینیم:
class Animal {
constructor(name, soundMaker) {
this.name = name;
this.soundMaker = soundMaker;
}

makeSound() {
this.soundMaker.makeSound(this);
}
}

class SoundMaker {
makeSound(animal) {
console.log(`${animal.name} makes a ${animal.sound}`);
}
}

const dog = new Animal("Dog", new SoundMaker());
const cat = new Animal("Cat", new SoundMaker());

dog.makeSound(); // Output: Dog makes a bark
cat.makeSound(); // Output: Cat makes a meow


#oop #oop_7
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥84🔥2💔1
چرخش صفحه با استفاده از پایتون ⌨️

⚡️توی این پست، یک برنامه ای میخوایم بنویسیم که هر یک ثانیه صفحه رو بچرخونه، البته که این کار با کتابخونه انجام میشه پس حتما این خط رو توی cmd تون اجرا کنید:
pip install rotate-screen

حالا ایمپورتش میکنیم و کدمون رو مینویسیم:

import time
import rotatescreen as rs

display = rs.get_primary_displayed()
listOfAngels = [90,180,270,0]

while True:
for x in listOfAngels:
display.rotate_to(x)
time.sleep(1)

⚠️فقط حواستون باشه که قبل از اجرای این حتما کاراتون رو ذخیره بکنید چون ممکنه بعد از اجراش خیلی سخت بشه جلوش رو بگیرید(مخصوصا اگر توی وی اس کد در حال اجراش هستید)

#python #rotatescreen
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥4❤‍🔥2
‌‏🧠 مدیرعامل OpenAI: هوش مصنوعی GPT-5 مانند یک مغز مجازی خواهد بود

▪️سم آلتمن (Sam Altman)، مدیرعامل شرکت OpenAI و یکی از سرمایه‌گذاران خطرپذیر سیلیکون ولی، در تازه‌ترین مصاحبه خود به پیچیدگی‌های GPT-4 پرداخته و برنامه‌های آینده این شرکت برای توسعه GPT-5 اشاره کرده است.

▪️آلتمن در صحبت‌های خود چشم‌انداز در حال تکامل هوش مصنوعی و تأثیر عمیق آن بر تعاملات انسانی و زمینه‌های برنامه‌نویسی را مطرح کرد. به گفته وی، طی 12 ماه گذشته قابلیت‌های هوش مصنوعی در حوزه برنامه‌نویسی به اوج خود خواهد رسید. وی همچنین معتقد است که GPT-5 ممکن است مانند یک مغز مجازی عمل کرده و به کاربر در رابطه با انجام وظایف مختلف کمک کند.

#Ai #ChatGPT
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥5😁4❤‍🔥2
با من آماده شین بریم کد SQL بنویسیم 😄

#fun
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
😁503🔥1
تعریف و مقداردهی اولیه آرایه‌ها:
توی javascript میتونم یه آرایه رو به طوری مدیریت کنیم که تعداد اعضا و اندازش رو مشخص کنیم و با یسری مقادیر پیش فرض هم پرش کنیم

const array = Array(5).fill('');
const matrix = Array(5).fill(0).map(()=>Array(5).fill(0));

#javascript
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥4❤‍🔥1
ری‌اکت ۱۹ که به تازگی رونمایی شده است‌:

1️⃣یکی از جدیدترین قابلیت‌ها در react compiler این است که react به صورت خودکار تصمیم میگیرد که چگونه و چه زمانی state را تغییر دهد و رابط کاربری را بروز کند.
با این کار، ما دیگر نیازی به انجام این کار به صورت دستی نداریم. همچنین به این معنی است که نیازی به استفاده از ()useMemo()، useCallbackو ()memo نیست.


2️⃣تا به حال، اجزای React عمدتاً در سمت کلاینت اجرا می شدند. اما React در حال معرفی مفهوم پیشگامانه اجرای اجزا در سمت سرور است.
در react 19 مولفه‌های سرور مستقیما در react ادغام میشوند . برای استفاده از این منظور شما فقط باید "use server" را به عنوان خط اول جز اضافه کنید. که کامپوننت خود را به یک کامپوننت سمت سرور تبدیل میکند.


3️⃣یکی دیگر از قابلیت‌های جالب Action است که به جای استفاده از onsubmit در form ها میتونیم از این ویژگی استفاده کنیم . مقدار ویژگی action روشی برای ارسال داده‌ها در سمت مشتری یا سرور خواهد بود.هدف این است که کار با فرم ها و مدیریت داده‌ها آسان تر شود.


4️⃣اگر بخواهید از metadata برای تعیین title , description هر صفحه استفاده کنید میتوانید از قابلیت جدید ریکت که در بهینه‌ سازی سئو بسیار موثر استفاده کنید .
از آنجا که React ۱۹ از Server Side Rendering (SSR) پشتیبانی می‌کند، شما می‌توانید این اطلاعات را به طور دینامیک در سمت سرور تولید کرده و به صفحات خود اضافه کنید.


5️⃣در ریکت باید عملکرد برنامه‌ها رو به ویژه با تصاویر و سایر فایل‌های دارایی به دقت مدیریت کنیم اغلب view ابتدا در مرورگر رندر میشود سپس تصاویر و فایل‌ها و ... که این میتواند منجر به کند شدن یا نمایش یک محتوای بدون استایل شود .
در React 19، تصاویر و سایر فایل‌ها در پس‌زمینه بارگذاری می‌شوند که باعث بهبود زمان بارگذاری صفحه و کاهش دوره انتظار میشود.


6️⃣یک hook جدید به اسم use()
این هوک نحوه استفاده از promises , async code را ساده‌ تر میکند از این هوک برای اجرای fetch‌ها به جای استفاده از useEffect یا useState استفاده میکنیم.


7️⃣یک hook جدید به اسم useFormState()
این هوک به شما این امکان را میدهد که state هارا بر اساس نتیجه ارسال فرم خود به روز کنید.
const [state, formAction] = useFormState(fn, initialState, permalink?);

🔥🔥🔥🔥🔥🔥🔥🔥
منبع :
🖥 https://www.linkedin.com/in/paria-jokar

#react19
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
12❤‍🔥4🔥3
سایت برای مشارکت در پروژه های اوپن سورس 💻

🟢تا حالا دلتون خواسته توی پروژه های بزرگ اوپن سورس دست ببرید؟ و یا باگی پیدا بکنید و بخواید حلش بکنید؟ خب این سایت دقیقا کاربردش همینه!

🟢 توی این سایت میتونید پروژه های مورد علاقتون رو انتخاب کنید، و شروع بکنید به رفع باگ هاشون، پروژه هایی از جمله فلاتر، گودوت و ...

🔗 codetriage

#opensource
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥63🔥2
📌خوش اومدین به آخرین قسمت از سری آموزشی OOP و امروز هم قراره راجب 2 مفهوم دیگه از برنامه نویس شیءگرا بپردازیم

🔥ترکیب ( Composition ) در OOP
-ترکیب یه مفهوم پایه تو OOP به حساب میاد که این امکانو به ما میده که آبجکت هامون رو از یه آبجکت دیگه بسازیم. و خصوصیات و ویژگی های هردورو باهم ترکیب کنیم
ترکیب در اصل یه نوعی از ارتباط بین آبجکت هاس که توی اون یه آبجکت که آبجکت صاحب هست، تمام خصوصیات و ویژگی های یک یا چند آبجکت دیگه رو توی خودش جا میده، یعنی آبجکت صاحب از بقیه آبجکت های جزء به عنوان اجزاء خودش استفاده میکنه

◀️ترکیب ( Composition ) در OOP سه تا مرحله مهم داره
🔵تعریف کلاس های پایه
🔵ایجاد کردن رابطه ترکیب
🔵استفاده از خصوصیات شیء های جزء

مزایاش چیه؟
🔵قابلیت استفاده مجدد
🔵ماژولار بودن
🔵قابلیت نگهداری بالاتر

یه مثال ازش ببینیم:
class VendingMachine {
constructor(products, coins) {
this.products = products;
this.coins = coins;
}

selectProduct(productCode) {
const product = this.products.find(p => p.code === productCode);
if (!product) {
throw new Error("Invalid product code");
}
return product;
}

insertCoin(coinValue) {
this.coins.push(coinValue);
}

returnCoins() {
const totalCoins = this.coins.reduce((sum, coin) => sum + coin, 0);
this.coins = [];
return totalCoins;
}

dispenseProduct(productCode) {
const product = this.selectProduct(productCode);
const price = product.price;

const totalCoins = this.coins.reduce((sum, coin) => sum + coin, 0);
if (totalCoins < price) {
throw new Error("Insufficient funds");
}

const change = totalCoins - price;
this.coins = [];

console.log(`Here is your ${product.name}.`);
if (change > 0) {
console.log(`Your change is ${change} coins.`);
}
}
}

class Product {
constructor(code, name, price) {
this.code = code;
this.name = name;
this.price = price;
}
}

class Coin {
constructor(value) {
this.value = value;
}
}

// Create products and coins
const products = [
new Product("A1", "Snickers", 100),
new Product("B2", "Coke", 80),
new Product("C3", "Chips", 60),
];

const coins = [
new Coin(50),
new Coin(20),
new Coin(10),
];

// Create vending machine
const vendingMachine = new VendingMachine(products, coins);

// Simulate usage
vendingMachine.insertCoin(50);
vendingMachine.insertCoin(50);
vendingMachine.selectProduct("B2");
vendingMachine.dispenseProduct("B2");

console.log("Remaining coins:", vendingMachine.returnCoins());


💎واسط ( Interface ) ها در OOP
-یک واسط در OOP مجموعه‌ای از متدهارو تعریف میکنه که یه کلاس یا شیء باید اون مجموعه رو پیاده سازی کنه. واسط ها این قابلیت رو به ما میدن که بدون نیاز به وراثت، بین آبجکت هامون رفتار های مشابه ایجاد کنیم، دقت کنین توی زبان های مختلف ممکنه مفهومش متفاوت باشه، مثلا ما توی Javascript اگه بخایم از واسط ها استفاده کنیم باید بریم Typescript و اینترفیس تعریف کنیم که توی مثال باهم میبینیم

◀️مزایای استفاده از واسط ها:
🟢انعطاف پذیری بالا
🟢قابلیت استفاده مجدد
🟢طراحی شیءگرا

مثال استفاده از واسط ها:
interface Shape {
draw();
getArea();
}

class Circle implements Shape {
constructor(radius) {
this.radius = radius;
}

draw() {
console.log("Drawing a circle with radius", this.radius);
}

getArea() {
return Math.PI * this.radius * this.radius;
}
}

class Square implements Shape {
constructor(sideLength) {
this.sideLength = sideLength;
}

draw() {
console.log("Drawing a square with side length", this.sideLength);
}

getArea() {
return this.sideLength * this.sideLength;
}
}

// Create shapes
const circle = new Circle(5);
const square = new Square(10);

// Draw and calculate area
circle.draw();
console.log("Circle area:", circle.getArea());

square.draw();
console.log("Square area:", square.getArea());


🩷خب دوستان دیگه مباحث اصلی OOP تموم شد و ما سعی کردیم کامل و با مثال براتون توضیح بدیم امیدوارم از این سری آموزشی لذت برده باشین و ممنونیم از اینکه حمایتمون میکنین

#oop #oop_8
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥115❤‍🔥2
جایگزین های مختلف برای نرم افزار ها ☑️

💬تا حالا دقت نکرده بودم که بینگ از گوگل امن تره،البته چکش هم نکردم، نظر شما چیه؟

#security
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥5❤‍🔥2
ایده های بزرگ کم نیستند، چیزی که کم است فقدان اراده لازم برای اجرای آنهاست!

"ست گادین"

#motivational
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥255🔥3💔3
آماده باشید که آموزش رجکس تو راهه 🗿💙

#fun
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30😁10
سایت can I use 🆒

💥 توی این سایت میتونید بررسی کنید که المنت یا فریمورکی یا فرمت فایل یا ... ای که میخواید استفاده کنید توی کدوم مرورگرا و چه ورژن هایی کار میکنن.

🔗 caniuse.com

#caniuse
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤‍🔥33
🔵 با استفاده از اکستنشن GoFullPage میتونید از صفحات وب اسکرین شات کامل بگیرید و با فرمت های مختلف PNG، JPEG و یا PDF دانلود کنید.

همچنین این ابزار توی آپدیت های جدید آپشن ادیت رو بصورت پریمیوم اضافه کرده تا بتونید تصویر گرفته شده از صفحه مورد نظرتون رو به دلخواه خودتون ادیت کنید.

📥 لینک دانلود

#extension #gofullpage
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7🔥42
📌شاید دلتون بخاد یسری تکنیک خفن درباره Clean Code بدونین یا یادآوری کنین

دوتا سایت پایین نکات مهمی رو میتونن درباره این موضوع بهتون بگن!

FreeCodeCamp

CodingDojo

☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤‍🔥43
1️⃣ آموزش ریجکس (regex) (عبارت های با قاعده) ☺️ - قسمت اول

☹️ بزارید تو قسمت اول یکم با خود regex و تاریخچش آشنا بشیم و اصلا ببینیم چه کاربردی داره و به چه کارمون میاد!

🫀 تاریخچه ریجکس: پیدایش ریجکس در واقع از ریاضیات گرفته شده و ریشه اون در برنامه نویسی به سال 1986 بر میگرده که یه شخصی مثل من و شما توی ویرایشگر متنی QED همچین جستجوی متنی رو پیاده سازی کرد 😀

👻حالا اصلا ریجکس واقعا چیه؟ ریجکس یک زبان یا فریمورک یا یه کتابخونه وابسته به زبان نیست! بلکه یک تکنولوژی و سینتکس ثابته که توی اکثر زبان های برنامه نویسی قابل استفاده است.

👽 کاربرد عمو ریجکس (شایدم عمه!) چیه؟ نمیدونم چقدر با متن ها توی برنامه نویسی سر کار داشتید اما ممکنه زمانی یه متن طولانی داشته باشید و بخواید یه چیزی رو ازش پیدا کنید.
شاید الان بگید توابع آماده برای پیدا کردن کلمه وجود داره! ولی بعضی وقتا ما دنبال یه کلمه ثابت نیستیم! بزارید یه مثال ریز بزنم تا متوجه بشید 🐱

سلام من امیر هستم . شماره من 09112345678 است و همچنین شماره دوستمم 09112345050 است. من دوستمو خیلی دوست دارم ، اسمش ریجکسه!

توی متن بالا ، اگه بخوایم شماره تلفن ها رو در بیاریم باید چیکار کنیم؟ آفرین ، کاربرد ریجکس دقیقا همینجا نمایان میشه !
همونجوری که توی عنوان هم نوشتم، Regex به فارسی میشه عبارت منظم ، یعنی اگه بخواید توی رشته (متن) دنبال بخش های منظم بگردید که از الگوی خاصی پیروی میکنن ، میتونید از regex استفاده کنید 🐱

همچنین کاربرد ریجکس فقط توی پیدا کردن نیست ، یه زمانی ما میخوایم چیزایی که پیدا کردیم رو با یه چیز دیگه جایگزین کنیم ، مثلا تو همین مثال بالا اگه فردی همچین نظری رو توی سایتمون ثبت کرد ما نمیخوایم همینجوری نمایش داده بشه بلکه میخوایم شماره های تلفن با *** جایگزین بشن ، پس بازم ریجکس میتونه بهمون کمک کنه 👁

به صورت کلی هدف عمو ریجکس اینه که به صورت پیشرفته بتونیم داخل متنمون بگردیم و عبارتی که الگو ثابتی داره رو پیدا کنیم 🫠
عبارت منظم یک گروه از کارکترها یا نمادهاست که برای پیدا کردن یک الگوی مشخص در یک متن به کار گرفته می شود.

⬅️ ادامه در پست بعدی
#regex #regular_expression
#regex_1 #regex_start
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
16❤‍🔥7🔥5
😮 خب یه سوالی رو ممکنه بپرسید و بگید آیا regex سخته ؟ منم خیلی ساده میگم هرچیزی سختی خودشو داره ! اما اگه تمرین کنید و خوب یاد بگیرید ریجکس خیلی ساده و منظمه! مثل ریاضی! که شاید بخاطر آموزش نادرست برای خیلیا غول به نظر بیاد و برای خیلیا شیرین و راحت 🤡
من که میگم ریجکس ایزی پیزیه (easy peasy lemon squeezy)


تا یادم نرفته اینم بگم که توی زبان های برنامه نویسی تقریبا استفادش به یک صورته و فقط اسم توابع یا بکارگیریش فرق داره (مثل استفاده JSON در زبان های مختلف میمونه)
چنتا از استفاده هاشم توی زبان های مختلف این زیر میزارم :

$str = "Our Channel is CodeExplore";
$pattern = "/CodeExplore/"; // Regex
echo preg_match_all($pattern, $str);


⌨️ توی زبانی مثل php باید regex خودمون رو بین دوتا / قرار بدیم و با تابع preg_match_all عبارت های خودمون رو پیدا کنیم .

let str = "Our Channel is CodeExplore";
let pattern = "/CodeExplore/" // Regex
console.log(str.search(pattern))
// OR
let arr = [...str.matchAll(/CodeExplore/g)]
console.log(arr)



⌨️ توی جاوا اسکریپت هم مثل php باید بین دوتا / قرار بدیم ولی برای پیدا کردن از تابع search میتونیم استفاده کنیم و برای پارامترش بهش ریجکس پاس بدیم (همچنین روش درستش استفاده از matchAll هست برای پیدا کردن تمامی عبارت ها)

import re
str = "Our Channel is CodeExplore";
pattern = r"CodeExplore" # Regex
x = re.search(pattern, str)
print(x)


⌨️ توی پایتون هم که میبینید استفادش به این صورته و نیازی به / اول و آخرم نداره (کلا پایتون شُل کرده! البته بهتره قبلش یه r بزارید تا متوجه بشه regex)


این پست رو همینجا به پایان میرسونم تا خسته نشید، در پست بعدی با خود ریجکس آشنا میشیم و دیپ تر میشیم 🍸

😀همچنین زیر همین پست کامنت بزارید که برای آموزش دوست دارید روی چه زبانی برنامه نویسی تست انجام بشه (با اینکه خیلی از موارد آموزش هیچ ربطی به زبان استفاده شده نداره)

روز خوبی داشته باشید 🔋

#regex #regular_expression
#regex_1 #regex_start
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥7❤‍🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 یک نکته خفن تو CSS

👍 از توابع مثلثاتی تو CSS می تونیم تاخیر انتقال پلکانی روون بسازیم
.character {
  transition-delay:
    calc(sin((var(--index) / 12) * 45deg) * 0.475s);
}

#css #function
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
13❤‍🔥7🔥6
💻هوش مصنوعی Copilot به صورت رسمی به تلگرام اومد

▪️مایکروسافت بالاخره به جمع غول‌های تکنولوژی که در تلگرام حضور دارن پیوست و هوش مصنوعی قدرتمند خودش رو به نام Copilot رو به این پلتفرم محبوب پیام‌رسان آورد.

▪️ اینطوری که معلومه تجربه کاربری خوبی داره و تنها مشکلش اینه که فعلا تو کشورهای کمی فعال هست.چون وقتی بهش پیام بدید برای وریفای درخواست می‌کنه که شماره تلگرامی خودتون رو براش بفرستید و اینجاست که متوجه میشه از ایران هستیم :(

📱@CopilotOfficialBot

#bot #telegram #copilot
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
💔193🔥2❤‍🔥1😁1
وقتی بقیه میخوان طلا استخراج کنن تو بیل بفروش!
فانِ انگیزشی 🗿

#fun #motivational
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥36🔥73😁2