یادداشت های برنامه نویس آماتور | Amateur programmer notes
61 subscribers
92 photos
10 videos
34 files
88 links
اندازه ی آرزو هات مهم نیست
مهم اینه تو چقد میبینیش
آرزو هاتو بزرگ ببین


</create> by <ashkan\>
Download Telegram
//یادتون نره میتونین مموری رو فلاش کنین اما من اینکار رو نکردم
}
// وارد کردن یه رشته به داخل رشتمون (پوستم سر دیباگ کردنش کنده شد)
void insert(uint point,const char* in)
{
// اگه نقطه شروع بود کار رو سریع انجام میدم که جمع کردنش باشه
if(point == 0)
{
MyString _a(in);
//توضیحات جمع کردن رو بخونید
*this = _a+*this;
return;
}
//سایز قبل تغییر
uint _s=getsize();
// سایز ورودی برای اینکه لازم نباشه هر بار چک کنیم
uint _inlen = strlen(in);
//نگه میداریم تا حافظه جدید بسازیم
char* buf = data;
data = new char[_s+_inlen+1];
//حافظه قدیمی رو کپی میکنیم
memcpy(data,buf,sizeof(*buf)*strlen(buf));
// حافظه قدیمی رو از بین میبریم
delete[] buf;
//کپی کردن
for(uint i=_s;i>=point;i--)
{
// از محل جایی که باید پاک بشه حروف ها رو به اندازه سایزشون جلو میبریم
data[i+_inlen]=data[i];
}
data[_s+_inlen]='\0';
//اون رشته ای که باید وارد میکردیم رو وارد میکنیم
memcpy(&data[point],in,sizeof(*in)*_inlen);

}
//این همون بالایی هس با فرض اینکه نوعش ورودی از نوع خودشه
void insert(uint point,const MyString& in)
{
insert(point,in.data);
}
// جایگزین کردن یه رشته با استفاده از نقطه شروعش
void replace(uint start,const char* b)
{
// اگه اندازش بیشتر بود باید حافظه جدید حاضر کنیم
if(start+strlen(b)>getsize())
{
// محل قدیمی رو نگه میداریم
char* buf=data;
//محل جدید رو حاضر میکنیم
data= new char[start+strlen(b)+1];
// محتوای قدیمی رو به جای جدید کپی میکنیم
memcpy(data,buf,sizeof(*buf)*strlen(buf));
data[start+strlen(b)]='\0';
// حافظه قدیمی رو پاک میکنیم
delete[] buf;
}
//اندازه ورودی رو بدست میاریم
uint blen = strlen(b);
// کپی میکنیم
for(uint i=start;i<blen+start;i++)
data[i]=b[i-start];
}
// این رو که دیگه معلومه
void replace(uint start,const MyString& b)
{
replace(start,b.data);
}
// تمام کلمات آرگومان اول رو با آرگومان دوم جایگزین میکنه . نقطه شروع هم میتونین بهش بدین نظقطه پایان هم همینطور
void replaceall(const char* what,const char* with,uint from=0,uint end=-1)
{
uint _d=findstring(what,from);
while(1)
{
if(end<_d||_d==-1)
break;
erase(_d,_d+strlen(what));
insert(_d,with);
_d=findstring(what,_d+strlen(with));
}
}
//معلومه دیگه
void replaceall(const MyString& what,const MyString& with,uint from=0,uint end=-1)
{
replaceall(what.getdata(),with.getdata(),from,end);
}


//جمع کردن یه رشته با یه رشته دیگه
MyString operator+(const char* in)const
{
MyString out;
delete out.data;
// مقدار جدید براش آماده میکنیم
out.data = new char[strlen(in)+strlen(data)+1];
// مقدار خود رشته رو کپی میکنیم
memcpy(out.data,data,sizeof(*data)*strlen(data));
// مقدار رشته دوم رو هم کپی میکنیم
memcpy(&out.data[strlen(data)],in,sizeof(*in)*strlen(in));
out.data[strlen(in)+strlen(data)]='\0';
return out;
}
  MyS
t
ring operator+(const MyString& in)const
{
     
return *this + in.data;
}
  //ک
پ
ی کردن
MyS
t
ring& operator = (const char* in)
{
     
delete[] data;
//آماده کردن فضای جدید
data = new char[strlen(in)+1];
//کپی کردن
strcpy(data,in);
data[strlen(in)]='\0';
return *this;
}
  MyS
t
ring& operator = (const MyString& in)
{
     
*this = in.data;
return *this;
}
  //ا
ض
افه کردن به خود رشته
MyS
t
ring& operator +=(const char* in)
{
     
*this = *this + in;
return *this;
}
  MyS
t
ring& operator +=(const MyString& in)
{
     
*this+=in.data;
return *this;
}
  // 
ب
ررسی برابر بودن
boo
l
 operator == (const MyString& other)const
{
     
return !strcmp(other.data,data);
}
  // 
ب
ررسی برابر نبودن
boo
l
 operator!= (const MyString& other)const
{
     
return !(*this==other);
}
  boo
l
 operator == (const char* other)const
{
     
return !strcmp(other,data);
}
  boo
l
 operator!= (const char* other)const
{
     
return !(*this==other);
}
  //د
س
ترسی به تک تک کاراکتر ها
cha
r
& operator [] (uint in)
{
     
if(in>strlen(data))//ارور بده اگه عدده زیاد بود
    throw std::runtime_error("MyString::operator [] : in is greater than data size");
return data[in];
}
  con
s
t char& operator [] (uint in)const
{
     
if(in>strlen(data))
    throw std::runtime_error("MyString::operator [] : in is greater than data size");
return data[in];
}
p
r
ivate
:

cha
r
* data;
};

یه
م
ثا
ل استفاده ازش:
int main
()
{
MyString a = "Hello World!";
cout<<a.getdata()<<endl;

return 0;
}

امیدوا
رم لذت برده باشین
زندگیتون بی ارور♥️
تلگرام اعلام کرده که در به روزرسانی آینده این پیام رسان امکان کامنت گذاری بر زیر پست‌های کانال‌ها اضافه خواهد شد
🔹وزیر ارتباطات ایران گفته بود تلگرام رسانه یک طرفه هست چون امکان پاسخ دادن ندارد!
💥 کلید کدگشایی تلگرام طلایی!
تلگرام طلایی یکی از اپ های غیر رسمی تلگرام هست که اخیرا بیان شده که مربوط به جمهوری اسلامی است.

📌 با این اپ بدون استفاده از فیلترشکن میتونید از تلگرام خود استفاده کنید!

💠 ساختار این اپ هم به این صورت هست که در درون نرم افزار جستجوگر پروکسی کار شده که با ارتباط با سرور تلگرام طلایی پروکسی دریافت کرده و روی اپ ست میکند و شما بدون استفاده از فیلترشکن خارجی میتونید از این اپ استفاده کنید.

🔐 اطلاعاتی که بین اپ تلگرام طلایی و سرورش رد و بدل میشود با کدینگ AES کدگذاری شده است و دی کامپایل کردن این اپ شما می توانید به فرمول تولید کلید رمزگشایی اطلاعات پی ببرید!

📌 تلگرام طلایی لیست پروکسی های خود را از این آدرس با ارسال چند پارامتر دریافت میکند که در ریسپانس شما یک جی سون حاوی دیتای کدشده ی AES دریافت میکنید و اپ باید این محتوا را با کلید کدگشا، کدگشایی کند:
🌐 http://lh58.hotgram.ir/v1/proxy?slt=77799000&appId=3

🔓کلیدکدگشایی از اطلاعات: KCH@LQj#>6VCqqLg
🔓 کلید آی وی: YC'2bmK=b%#NQ?9j

⛔️ با کدگشایی این اطلاعات شما به پروکسی های تلگرام طلایی دست خواهید یافت!

برای مثال از طریق لینک بالا شما یک استرینگ کدشده دریافت کنید و در سایت زیر با کلید کدگشایی و کلید IV بالا و زدن دکمه Decrypt و سپس Decode to plain Text اطلاعات کدگشایی شده را ببینید:
🌐 https://www.devglan.com/online-tools/aes-encryption-decryption

نمونه کدگشایی شده:
 {"ip":"213.195.55.20","prt":443,"usr":"hotgram","pwd":"062=29-cc_00","ttl":2337}

📌 نکته: نوع پروکسی ها socks5 هستند و برای ست کردن باید بخش اول و دوم آی پی را جابجا کنید. مثال:
213.195.55.20 ===> 195.213.55.20

🇮🇷 @jasuss
تاریخچه زبان برنامه نویسی C همراه با:🧐😄
mr.ashkan
#سی_کد

زبان برنامه نویسی C توسط دنیس مک‌آلیستر ریچی (Dennis MacAlistair Ritchie) در سال 1972 معرفی شد و به علل مختلف از جمله پیروی از ساخت یافتگی (و در نتیجه افزایش کارایی)، خوانایی بهتر و اشکال زدایی راحت تر برنامه ها مورد استقبال فراوان قرار گرفت.

در هر نگارش از زبان C استاندارد هایی تعریف شده است و آخرین استاندارد این زبان C11 نام دارد.

بدیهی است با پیروی از استانداردهای روز امکانات بیشتری در توسعه نرم افزارها در اختیار داشته و همچنین برنامه های کاراتری خواهیم نوشت.

⌨⌨⌨⌨⌨
💻 معرفی کامپایلر، سورس کد و محیط توسعه

#سی_کد

برنامه‌های نوشته شده به زبان C در فایلی متنی با پسوند c. ذخیره می‌شوند. به این فایل، کد منبع یا source code گفته می‌شود.

از آنجا که زبان ماشین صفر و یک است و اصولا پردازنده به طور مستقیم امکان اجرای کدها را ندارد، فایل کد منبع برای اجرا باید به زبان ماشین ترجمه یا Compile (کامپایل) شود.

به برنامه‌ای که عمل ترجمه کدمنبع به زبان ماشین را انجام می ‌دهد مترجم یا compiler گفته می شود.

برای نوشتن برنامه به زبان C به چیزی جز یک ویرایشگر متن ساده و یک کامپایلر نیاز نیست اما از آنجا که در ابتدای کار ترجیح بر استفاده از امکاناتی مثل قابلیت تکمیل دستور ها با تایپ بخشی از دستور و یا خطایابی خودکار برنامه است نیاز به استفاده از یک محیط توسعه مجتمع (IDE) احساس میشود که بخشی از کار ظاهرا ساده تر و سریع تر انجام شود. (حال اینکه برای مثال برنامه نویسان زبردست بسیاری از استفاده از IDE ها دوری میکنند و از ترکیب یک ادیتور عالی مانند Vim و کامپایلر GCC استفاده میکنند و این کار نه تنها سرعت کار را کاهش نمی دهد بلکه منابع سیستمی بسیار کمتری اشغال میکند و سرعت کارها را شدیدا افزایش میدهد.)

⌨⌨⌨⌨

💻 انتخاب و نصب محیط توسعه

#سی_کد
📁

محیط های توسعه مجتمع (IDE) بسیاری وجود دارد که از معروف ترین های آنها می توان به Eclipse، Codeblocks، Microsoft Visual Studio و Codelite اشاره کرد.

از آنجا که امکان استفاده قانونی از برنامه ویژوال استودیو در ایران به دلایلی از جمله عدم امکان پرداخت هزینه نرم افزار و همچنین عدم سرویس دهی این شرکت به کاربران داخل کشور (از جمله پشتیبانی) امکان پذیر نیست و از همه مهمتر کامپایلر پیشفرض این IDE امکان برنامه نویسی استاندارد را از برنامه نویس می گیرد بنابراین از آن استفاده نخواهیم کرد.

اما در اینجا از کدبلاکس (Code::Blocks) استفاده خواهیم کرد که از کامپایلر GCC به طور پیشفرض استفاده میکند و به لطف قابلیت چندسکویی (Cross Platform) امکان استفاده از آن در سیستم عامل های مختلف فراهم می باشد. بنابراین پیشنهاد میکنم برای هماهنگی بهتر با آموزش ها آخرین نسخه این IDE را دانلود و نصب نمایید.

کاربران سیستم عامل‌ ویندوز میتوانند آخرین نسخه برنامه کدبلاکس (codeblocks-16.01mingw-setup) را از آدرس زیر دریافت نمایند:

https://www.dropbox.com/s/1nt39feuuboxt8z/codeblocks-16.01mingw-setup.exe?dl=0
از آن‌جا که نصب کدبلاکس همانند نصب سایر برنامه هاست و نکته خاصی ندارد از توضیحات بیشتر صرف نظر میکنم.

کاربران گنو/لینوکسی نیز برای نصب کدبلاکس میتوانند بستهٔ codeblocks را توسط مدیربستهٔ توزیع خود نصب کنند. به عنوان مثال کاربران اوبونتو، مینت و دبیان میتوانند با دستور زیر جدیدترین نسخه این برنامه را نصب نمایند.
sudo apt install codeblocks

تنها نکته ای که باید مد نطر قرار دهید این است که وقتی کدبلاکس را برای اولین بار اجرا میکنید برنامه از شما می‌خواهد کامپایلر پیشفرض را انتخاب کنید در این قسمت GCC GNU compiler را برگزینید.
نوشتن اولین برنامه 😄

#سی_کد
📁📄📁📄📁

حال میخواهیم اولین برنامه خود را به زبان سی و در محیط کدبلاکس بنویسیم. برای این کار از منوی File و سپس زیر منوی New گزینهٔ Empty file را انتخاب میکنیم.

در برگهٔ بازشده عبارات زیر (که در واقع یک برنامه است که عبارت «Hello World» را چاپ میکند) را عینا تایپ میکنیم.

اصلا عجیب نیست اگر هیچ یک از عبارات زیر را متوجه نشوید! به زودی به طور کامل به معرفی تک‌تک این‌ها می‌پردازیم.

// written by CProg channel
#include "stdio.h"
int main ()
{
printf("Hello World\n");
return 0;
}

توجه کنید که در تمام طول برنامه نویسی می‌توانیم با فشردن کلید های Ctrl و S به طور همزمان، برنامه را ذخیره کنیم. چنانچه برنامه ای را برای اولین بار بخواهیم ذخیره کنیم نام برنامه (یا به عبارت درست تر، نام‌ فایل) و مسیر ذخیره‌ٔ آن پرسیده می شود.

در این مثال، برنامه را با نام first.c ذخیره کردیم.
پس از ذخیره برنامه با فشردن دکمه F9 برنامه کامپایل می‌شود و خروجی اولین برنامه‌مان که نمایش پیغام «Hello World» است را میتوانیم ببینیم.
#یاهو_مسنجر_خداحافظ_ای_همنشین_همیشه

✍🏻 mr.ashkan

🔸 یاهو مسنجر به پایان عمر خود رسیده است. گویا قرار است بعد از 26 تیرماه، شکلک یاهو مسنجر برای همیشه غمناک بماند و دیگر آن خنده دلبرانه‌اش را نبینیم.
🔹برای خیلی‌ها شاید این خبر یک خبر ساده بود مثل خیلی‌خبرهای دیگر اما خداحافظی یاهو مسنجر من را پرتاب کرد به گذشته. به گذشته‌ای که شیرین ترین صدایی که می‌شنیدم صدای ناهنجار(ششششقفژژژژژ ژژژژخخخخققققق جججججژژژ ققققققژژ ) اینترنت دیال آپ بود. صدایی که به همه اهل خانه می‌گفت کسی پشت اینترنت نشسته است و دارد وب گردی می‌کند.
🔸شاید بسیاری از ما صبر کردن را از اینترنت دیال‌آپ یاد گرفته بودیم. یادگرفتیم برای خواندن و دیدن باید صبر کرد. برای خواندن یک مقاله ساده باید اندازه دیدن یک فیلم صبر می‌کردیم.

🔹آن روزها اینترنت گردی ما در وبلاگ نویسی و مسنجر گردی می‌گذشت. حالا نمی‌خواهم از وبلاگ نویسی بگویم که خود مطلبی جدا می‌طلبد اما مسنجر گردی دنیای بود برای ما.
🔸مسنجر تمام دیوارها و محدودیت‌ها را برای ما برداشته بود. در آن زمان دخترها و پسرها نمی‌توانستند آزادانه با هم در خیابان قدم بزنند، کافه بروند و یا حتی در دانشگاه به هم جزوه بدهند. در شهر مسنجر اما از این دیوارها خبری نبود.
🔹ترس بزرگ اما برخلاف شهر واقعیت‌ها قطع شدن «dc» و ناتمام ماندن چت‌ها بود.
🔸همه دلخوشی ما این بود که شب به خانه بیاییم، تلفن اشغال نباشد و دل به دل مسنجر بدهیم. چقدر دوست داشتم همه چراغ زرد باشه و کلی پنجره باز.
🔹هنوز خبری از تلگرام، کانال و گروه نبود اما در مسنجر چت روم‌هایی بود که هنوز لذت حرف زدن تو اون زیر دندون خیلی از ما دهه شصتی‌ها و حتی پنجاهی‌ها مانده است.

🔸زمانی که برای جی‌میل دار شدن حتما باید یکی معرفیت می‌کرد، یاهو با آغوش باز از ما پذیرایی می‌کرد.
🔹خیلی از آشنایی‌ها و حتی ازدواج‌ها حاصل این مسنجر دوست داشتنی بود. من هنوز بهترین دوستانم کسایی هستند که ساعت‌ها با اون‌ها تو مسنجر حرف می‌زدیم، درد دل می‌کردیم و می‌خندیدیم.
🔸نمی‌دونید چه لذتی داشت وقتی به اینترنت وصل می‌شدی و می‌دیدی برات پیام آف‌لاین اومده. اصلا یه حس عجیبی بود.
🔹شکلک‌های مسنجر، پدر ایموجی‌های امروز تلگرام بودند. بهترین کلام وقتی کلامی برای گفتن نداشتی. وقتی هم دوست داشتی با یکی مخالفت کنی یک«buzz » می‌زدی و کل صفحه شروع می‌کرد به لرزیدن.

🔸خیلی از ما بعد از اومدن اینترنت پر سرعت، تلگرام، ایتستاگرام و یا حتی چت جی‌میل، یاهو رو فرستادیم خونه سالمندان و دیگه بهش سر نزدیم.
🔹حالا خبر اومد که دیگه مسنجر رسما رفتنی. دلمون براش گرفت. همه خاطرات جلومون رژه رفت. خیلی از ما حتی یه سر رفتیم بهش زدیم اما به نظر می‌رسه دیگه فایده نداره. یکی از مهم‌ترن خاطرات دوران جوانی ما در حال خاموش شدن.
🔸خداحافظ مسنجر دوست داشتنی. خداحافظ خاطرات مشترک. خداحافظ شکلک خنده روی زرد نسل ما.
امروز تمامی اپ های موبوگرام یا شرکت هانیستا از کافه بازار حذف شدن

بهترین فرصت هست ک طبق قانون کافه بازار پیام بدید و خیلی شیک پولتونو از بازار پس بگیرید

من خودم امتحان کردم و کمتر از نیم ساعت 5 هزار تومن تو اعتبار کافه بازاریم برگشت خورد!

هم خودتون انجام بدید هم تاجایی که میتونید بفرستید برای هرکسی که میشناسید تا جدا از اینکه پولتون برگرده باعث میشه حقتونو از کافه بازار بگیرید!

ایمیل کافه بازار
support@cafebazaar.ir
موضوع

حذف شدن موبوگرام از کافه بازار و درخواست بازگشت وجه

متن

سلام من با همین ایمیل مدتی پیش برنامه ی موبوگرام رو خریدم ولی اپ حذف شده لطفا پولشو برگشت بزنید به اعتبار کافه بازاریم


با همون ایمیلی که موبوگرام رو خریدید ایمیل بزنید

تا میتونید منتشر کنید و انجام بدید تا دیگه هیچ اپلیکیشنی فکر جاسوسی از حریم خصوصی کاربر به سرش نزنه!
💻 توضیحات (comment) در برنامه نویسی

#سی_کد
📁📄📁📄📁

در زبان برنامه نویسی C برای نوشتن توضیحات یک خطی در خصوص کل برنامه یا یک بخش خاص از آن از علامت // استفاده می‌کنیم. چنانچه توضیحات ما بیشتر از یک خط باشد آن‌را با علامت */ شروع و با علامت /* پایان می‌دهیم.

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

در مثال زیر از توضیحات چندخطی و تک خطی استفاده شده است.

#include "stdio.h"

/*
Code by:
CPROG Channel in telegram.
*/

int main ()
{

printf("Hello World\n");
return 0;
} // end of code
⌨⌨⌨⌨⌨
💻 دستورات پیش پردازنده (PreProcessor)

#سی_کد
📁📄📁📄📁

دستوراتی که با علامت # شروع شود، یک دستور C نیستند و جزو دستورات پیش پردازنده (PreProcessor) محسوب می‌شوند.

دستورات پیش پردازنده دستورهایی هستند که توسط کامپایلر، قبل از شروع به کامپایل انجام می‌شوند. به‌عنوان مثال دستور #include باعث می‌شود که تعاریف اولیهٔ مربوط به توابعی (زیربرنامه‌هایی) که قصد استفاده از آنها را داریم به برنامه اضافه شود.

در برنامه Hello World که پیشتر با هم نوشتیم، برای استفاده از تابع printf، فایل سرآمد (هدر) stdio.h که این تابع در آن تعریف شده‌است را شامل برنامه کرده‌ایم.
⌨⌨⌨⌨⌨
💻 تابع اصلی (main)

#سی_کد
📁📄📁📄📁

هر برنامه C باید دارای تابعی به نام main باشد که اجرای برنامه از آن شروع می‌شود و در حقیقت آن تابع برنامهٔ اصلی است.

همچنین می‌توان هر تعداد دیگری تابع (زیربرنامه) نیز تعریف کرد، اما وجود تابع main الزامی است. دقت کنید که به دلیل این که این تابع پارامتر ورودی ندارد، از یک جفت پرانتز (پرانتز باز و بسته) استفاده کرده ایم.

برای تعریف تابع باید جنس مقدار برگشتی تابع را مشخص کنیم. در مثال فوق تابع main را با مقدار برگشتی عدد صحیح (int) تعریف کرده‌ایم. به این معنی که خروجی این تابع می‌تواند یک عدد صحیح باشد و می‌تواند به بقیه توابع برنامه (فعلا تابع دیگری نداریم) ارسال شود.

و در آخر، قبل از اتمام تابع main ( { ) مقدار بازگشتی تابع با عبارت «;return 0» تعریف شده است.

از مقدار بازگشتی توابع استفاده هایی می‌شود. به عنوان مثال در برنامهٔ فوق بازگرداندن عدد صفر به معنی صحیح اجرا شدن برنامه (چاپ عبارت Hello World) است.
⌨⌨⌨⌨
💻 دو نکته مهم

#سی_کد
📁📄📁📄📁

در زبان C هر بلوک برنامه با علامت } آغاز شده و با { پایان می‌یابد. در مثال فوق تابع main یک بلوک می باشد و به همین شکل پیاده سازی شده است.

دقت کنید که در پایان هر دستورالعمل از علامت ; (SemiColon) استفاده شده است.

✍ Mr.ashkan
#ادامه_دارد...
ساده ترین و کارآمدترین روش دریافت بیت کوین رایگان (ماین کردن با سیستم):

The easiest and most effective way to get free bitcoin (system mines):

https://getcryptotab.com/1255784
CryptoTabBrowserx86_1255784x8.exe
44.5 MB
مرورگر اصلی 8 برابر قوی تر از مرورگر دیگه استخراج بیت کوین برای کامپیوتر و لپ تاپ
کامل واقعی میباشد و قانونی
‏اگه سخت کار می‌کنید و از این سخت کار کردن خوشحالید، منتظر اتفاقای شگفت انگیزی تو زندگیتون باشید
#Ashkan
اموزش لوا به زبان ساده (part 1 )
Lua 😄

خب دوستان تو لوا برای استارت یک کار ما به فانکشن نیاز داریم
local function نام فانکشن
بعد از قرار دادن نام فانکشن داخل پرانتز ها دیتاها تارگت ها مچز ها و کلن چیزهایی ک قراره تو فانکشن استفاده کنیم رو فراخوانی میکنیم
مثلا اگر میخایم چک کنه پیاممون = سلام باشه میشه
local function run (msg , matches)
در اینجا msg مخخف message عه ینی مسیج ما مساوی مقداری ک میگیم باشه مثلا مسیج ما مساوی سلام باشه

هر function یک پایان داره ک با end بسته میشه

local function run (msg , matches)
.
.
end

بین این فانکشن ما کارمون رو باید بنویسیم

مثلا میخایم بنویسیم که مسیج رو چک کنه اگر سلام بود جواب بده سلام
local function run (msg , matches)
if matches [1]=='سلام' then
return 'سلام'
end
end

خب همونطور ک میبینید ما یک شرط داخل فانکشنمون قرار دادم که
if دستور شرطی بمعنای اگره
اگر پیام اولمون 1ینی اول مساوی سلام بود then میشه انگاه . انگاه return ینی ارسال کن |سلام| و با ی end دستور شرطی رو میبندیم

خب الان برای این که سلام رو چک کنه ما باید سلام رو داخل پترن قرار بدیم پترن محلیه که اون پیام رو میشناسه و میخونه

تو اخرین قسمت میگیم
return {
patterns ={
"^سلام$"
},
run =run
}

علامت ^ شروع پیام یا اولین کلمه پترن رو مشخص میکنه و $ اخر پترن رو مشخص میکنه و دقت کار رو میبره بالا تر

خب همونطور ک دیدید پترنشم تعریف کردیم کامل پلاگین ب صورت زیر میشه


local function run (msg , matches)
if matches [1]=='سلام' then
return 'سلام'
end
end

return {
patterns ={
"^سلام$"
},
run =run
}

کار این پلاگین اینه که در جواب سلام میگ سلام
پس یاد گرفتیم که برای این ک یک کاری تو لوا انجام بدیم ب ی فانکشن احتیاج داریم بعد داخل فانکشن کاری که باید اجرا بشه رو مینویسیم و با end فانکشن رو میبندیم
run = run
ینی اجرا بشه پلاگین ک اسمش run هست

حالا matches چیه matches چک میکنه پیامی ک برابرش قرار میدید رو مثلا
matches[1]=='سلام'
چک میکنه همه پیامارو به محظ این ک سلام رو دید اون کاری رو ک گفتید اجرا میکنه
حالا اون 1 چیه ببینید مثلا میاید میگید
lock link
lock edit
اون lock میشه مچز 1 و اون edit میشه مچز 2 چون lock تو همه یکیه اونو 1 قرار میدیم و link و edit رو 2 قرار میدیم
اموزش لوا به زبان ساده ( part 2 )
Lua 😄

خب دوستان میخام دستور شرطی if رو توضیح بدم

وقتی شما میخواید ی پلاگینی بنویسید که کار خاصی رو برای یک شخص خاص یا یک دسته افرار خاص انجام بده باید از if به معنای اگر استفاده کنید

مثلا شما میخواید تعریف کنید که اگر پیام ارسال شده سلام بود جواب بده سلام خب برای این کار میایم ی if مینویسیم
if matches[1] =="سلام"then
return "سلام"
end

خب به صورت فارسی اگر ترجمه کنیم برنامه بالارو شاید بهتر بفهمید

اگر پیام ارسالی اول برابر سلام بود انگاه then به معنای انگاه عه return کن ینی برگردون سلام رو با ی end ینی پایان باید if رو ببندیم چون اگر نبندیم دستوراتی ک مینویسیم با اون شرطی ک مینویسیم اجرا میشن مثال

میخایم ی پلاگینی بنویسیم ک اگر سلام رو گرفت بفرسته سلام رو و بعد ی دستور دیگه بنویسیم که خوبی رو گرفت خوبی رو جواب بده


if matches[1] =="سلام"then
return "سلام"
if matches[1] =="خوبی"then
return "خوبی"

خب اینجا اولن ک ارور end میده ب کنار الان اگر سلام رو دریافت کنه سلام رو ارسال میکنه اما خوبی وارد زیر مجموعه سلام شده به این کار میگن اگر تو در تو مثال شما میخواید بنویسید اگر ی کاربر زد lock link جواب بده گو نخور

if matches [1]=="lock" then
if matches[2]== "link" then
return "گو نخور"
end
end

خب نگاه کنید link اومده زیر lock و در زیر مجموعش قرار گرفته تا lock اجرا نشه شرط link خونده نمیشه به این کار میگن if های تو در تو شما میتونید با این کار خیلی راحت چند شرط بنویسید

توی دستورات شرطی شما میتونید |و| همچنین |یا| تعریف کنید مثلا اگر سلام بود و طرف سودو بود جواب بده سلام یا اگر سلام بود یا slm بود جواب بده سلام

مثال

if matches[1]=="سلام" and is_sudo(msg) then
return "سلام"
end
اینجا شما ی و به شرطتون اظافه کردید اگر سلام بود ||||و|||| طرف سودو بود انگاه جواب بده سلام

خب حالا or یا

if matches[1]=="سلام" or "slm" then
return "سلام"
end

اینجا چک میکنه سلام یا slm بود جواب بده سلام شما میتونید پلاگین هاتون رو اینطوری 2 زبانه کنید مثلا نوشته شده

if matches[1]=="link"then
return link
end

خب میخواید دستور link رو 2 پترنه کنید میاید یک یا تعریف میکنید

if matches[1]=="link" or "لینک" then
return link
end

اینجا هم link بزنید لینک رو ارسال میکنه هم به فارسی بزنید لینک

3نکته مهم

1- دستورات شرطی حتما دارای یک پایان هستند که با end نوشته میشند
2-میتونید از or و یا and استفاده کنید
3-میتوانید از چند if استفاده کنید که end ها به نزدیک ترین if ها مربوط میشن ینی اگر شما 3 تا if تو در تو داشته باشید داخلی ترین end برای داخلی ترین if و دومین end که وسطه برای if وسطه و اخرین end برای اولین if شماست
#xnjava
از اونجایی که این اسکریپت تازه ساخت هست متد های کمی دارد😁
فراخوانی مانند دیگر اسکریپت های xn فقط
import xn;
البته پس از قرار دادن xn.java در ادرس اصلی پروژه

تابع پرینت برای نوشتن در خروجی
xn.print( mixed data );
گرفتن نوع داده
xn.typeof( mixed data );
یکی از مزایای typeof در xn قابلیت دریافت کامل نوع هست برای مثال
String[][][] str = {{{"str"}}};
xn.print(xn.typeof(str));
خروجی String[][][] خواهد بود!

xn.exit( int state = 0 );
بستن برنامه
xn.toString( mixed data );
تبدیل به رشته

▪️ ابجکت xn.string
استفاده :
xn.string str = new xn.string("hello world");
متد ها :
xn.string( mixed string );
str.from( mixed string );
String str.toString();
xn.string str.clone();
xn.string str.append( mixed data );
xn.string str.substr( int from );
xn.string str.substr( int from , int length );
xn.string str.substring( int from );
xn.string str.substring( int from , int to );
int str.indexOf( mixed search );
int str.indexOf( mixed search , int offset );
int str.lastIndexOf( mixed search );
int str.lastIndexOf( mixed search , int offset );
int str.length();
boolean str.equal( String str );
boolean str.equals( Object object );
boolean str.empty();
char str.onChar();
char str.lastChar();
xn.string str.tolower();
xn.string str.toupper();
xn.string str.reverse();
byte[] str.getBytes();
xn.string str.regex_replaceChar( char from , char to );
xn.string str.regex_replaceChar( String from , String to );
xn.string str.replaceChar( char from , char to );
xn.string str.replaceChar( String from , String to );
xn.string str.regex_replaceAll( String from , String to );
xn.string str.replaceAll( String from , String to );
xn.string str.regex_replaceFirst( String from , String to );
xn.string str.replaceFirst( String from , String to );
xn.string str.regex_replace( String from , String to );
xn.string str.regex_replace( String[] from , String to );
xn.string str.regex_replace( String[] from , String[] to );
xn.string str.regex_replace( String from , String to , int limit );
xn.string str.regex_replace( String[] from , String to , int limit );
xn.string str.regex_replace( String[] from , String[] to , int limit );
xn.string str.replace( String from , String to );
xn.string str.replace( String[] from , String to );
xn.string str.replace( String[] from , String[] to );
xn.string str.replace( String from , String to , int limit );
xn.string str.replace( String[] from , String to , int limit );
xn.string str.replace( String[] from , String[] to , int limit );
str.nextLine();
xn.string[] str.split( String by );
xn.string[] str.split( String by , int limit );
xn.string str.repeat( int count );
int str.regex_findcount( String search );
int str.findcount( String search );
int str.words_count();
int str.lines_count();
xn.string str.rightTrim( String|char by = "\n\r\t " );
xn.string str.leftTrim( String|char by = "\n\r\t " );
xn.string str.trim( String|char by = "\n\r\t " );
boolean str.matches( String regex );
xn.string str.replaceBount( int from , int to , String replacement );
xn.string str.ucwords();
xn.string str.lcwords();
xn.string str.ucfirst();
xn.string str.lcfirst();
xn.string str.uclast();
xn.string str.lclast();
char str.charAt( int index );
xn.string str.deleteCharAt( int index );
xn.string str.delete( int from , int to );

میدونم تعداد متد ها و mixed ها اونم توی جاوا یخورده ترسناکه😁😐
دسترسی «هاتگرام و طلاگرام» به تلگرام از پس‌فردا قطع می‌شود

🔹براساس اعلام رسمی آخرین مهلت "هاتگرام و طلاگرام" برای اتصال به تلگرام تا ۱۵ شهریور است و این۲ نسخه موقت غیررسمی و فارسی تلگرام از پس‌فردا دیگر به پایان راه فعلی خود می رسند
🔹قرار است یا این دو نسخه فارسی تلگرام یا از تلگرام مستقل شوند یا فعالیت آنها با روش فعلی قطع شود
#mr.ashkan
یه کد ساده قفل کردن ربات بروی ایمیل
کاربر باید ایمیلشو بزنه بعد کد که به ایمیلش میاد بزنه و بعد عضو ربات بشه


if($text == "/start"){
file_put_contents("data/$chat_id/step.txt","a");
bot('sendmessage',[
'chat_id'=>$chat_id,
'text'=>"ایمیل خودتون را وارد کنید"
]);
}
elseif($step == "a"){
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$text))
{
bot('sendmessage',[
'chat_id'=>$chat_id,
'text'=>"ایمیل وارد شد نامعتبر میباشد یک ایمیل معتبر بفرستید"
]);
}else{
file_put_contents("data/$chat_id/step.txt","code");
$co = rand(1000,5555);
file_put_contents("data/$chat_id/code.txt",$co);
bot('sendmessage',[
'chat_id'=>$chat_id,
'text'=>"یک ایمیل با کد فعال سازی برای شما فرستاده شد
لطفا کد فعال سازی را وارد کنید",
]);
$to = $text;
$subject = "کد فعال سازی";
$txt = "کد فعال سازی شما عبارت است :
$co
با تشکر از شما";
$headers = "From: ادرس جیمیل یا ایمیل";
mail($to,$subject,$txt,$headers);
}
}
elseif($step == "code"){
if($text == $code){
file_put_contents("data/$chat_id/singup.txt","on");
file_put_contents("data/$chat_id/step.txt","off");
bot('sendmessage',[
'chat_id'=>$chat_id,
'text'=>"خوب ربات با موفقیت برای شما فعال شد🙂"
]);
}else{
bot('sendmessage',[
'chat_id'=>$chat_id,
'text'=>"کد اشتباه هست
لطفا کد صحیح را ارسال نمایید"
]);
}
}



کار باهاش راحته
پیشرفته کنید و در ربات هاتون استفاده کنید

کدهاتون بی باگ ❤️
:mr.ashkan:
دوستان از قبل شاهد قعطی های سرور تلگرام بودیم این قعطی در اروپا هم اتفاق افتاده از حدود یک ساعت پیش تا بخشی از ایران خصوصا پایتخت که از دسترس خارج شدن

کارشناسان تلگرام در حال رفع این مشکل که به صورت بین المللی اتفاق افتاده هستن و نیازی

به نصب مجدد برنامه نیس یا استفاده از برنامه های دیگه مثل هات گرام و جت گرام تلگراف و موبوگرام و .....

کلا سرورا دچار اختلال شده
✅ محدودیت 300 کاراکتری زیر نویس در محتوا، فایل و... برداشته شد!

هم‌اکنون می‌توانید متن‌های بسیار بلند را نیز بدون استفاده از هیچ رباتی در کپشن قرار دهید. این ویژگی برای کانال‌های خبری، آموزشی و موارد دیگر نیز می‌تواند بسیار مفید باشد.

این تغییر هنوز در نسخه‌های دسکتاپ و وب اعمال نشده و انتظار می‌رود به زودی آن‌ها نیز بتوانند متون 1024 کاراکتری (حرف) را به هر نوع عکس، فیلم، فایل و... بچسبانند.

Mr.AsHkAn.
#آموزش
ذخیره متن در فایل / باز کردن فایل


برای ذخیره دستور در یک فایل از دستور

file_put_contents("آدرس محل ذخیره با پسوند","متن یا لینک");

استفاده میکنیم
برای مثال میخواهیم «سلام» رو توی ی فایل و اون فایل رو توی پوشه user و با نام hi.txt قرار بدیم

file_put_contents("user/hi.txt","سلام");

⭕️با کمی تمرین و استفاده از این دستور با کاربرد فراوان اون مثل : میخوایم وقتی کاربر ی متنی رو ارسال کرد داخل فایل قرار بدیم و... آشنا بشید⭕️


برای فراخوانی اون هم کافیه از دستور زیر استفاده کنیم
file_get_contents("آدرس فایل با پسوند");

مثل

file_get_contents("user/hi.txt");



#mr.ashkan