Create a custom Slack bot

Sep 16, 2025
कैसे करना है
Create a custom Slack bot
(छवि क्रेडिट: वेब डिजाइनर) [1 9]

स्लैक व्यवसायों और टीमों के लिए एक तेजी से लोकप्रिय उपकरण है जिन्हें तुरंत संवाद करने की आवश्यकता है। हालांकि, कुछ मामलों में - दैनिक व्यवधान माना जाता है, इसमें एक महान स्वचालन क्षमता भी होती है, जो सबकुछ एक ही स्थान पर रखने के लिए दर्जनों एकीकरण की पेशकश करती है, और यह धीरे-धीरे ईमेल को पीछे छोड़ रही है।

अपने सिस्टम को ढीले के साथ एकीकृत करने के कई तरीके हैं; मंच भी एक ब्रांडेड बॉट प्रदान करता है जो आपको अनुस्मारक, या आपके डिजिटल वर्कस्पेस में संदेश देने देता है। और और भी सहयोगी संवर्द्धन के लिए, इन्हें आज़माएं घन संग्रहण विकल्प।

  • डिजाइनरों के लिए सर्वश्रेष्ठ सहयोग उपकरण में से 18

स्लैक विभिन्न इकाइयों को प्रदान करता है जिन्हें 'बॉट' माना जा सकता है:

  • वेबहुक्स, जो अन्य ऐप्स से संदेशों को ढीले में पोस्ट करने की अनुमति देता है, लेकिन संचार का एक-तरफा रूप है,
  • ऐप्स, अग्रिम एकीकरण के लिए (अन्य ऐप्स के साथ),
  • बॉट उपयोगकर्ता, जल्द ही उन पर।

इस ट्यूटोरियल में हम विशेष रूप से 'बॉट उपयोगकर्ताओं' पर देख रहे होंगे, उन्हें कैसे प्रोग्राम करें (हमारी मार्गदर्शिका देखें सर्वश्रेष्ठ कोड संपादक अपने जीवन को आसान बनाने के लिए) और उन्हें अपनी जरूरतों के अनुरूप बनाएं। यह presupposes आपके पास एक ढीला स्थान तक पहुंच है जहां आप ऐप एकीकरण जोड़ सकते हैं। यदि आप पहले से ही एक का हिस्सा नहीं हैं, तो वे बनाने के लिए स्वतंत्र हैं।

निम्नानुसार, हम एक नोडेज ऐप का निर्माण करने के लिए एक नोडेज ऐप बनाते हैं और एक सुस्त चैनल में विशेष संदेशों का जवाब देते हैं। हम 'स्लैकबॉट्स' मॉड्यूल का उपयोग करते हैं, जो स्लैक रीयल-टाइम मैसेजिंग एपीआई के लिए एक रैपर है।

वेबसाइट बनाने में भी रुचि रखते हैं? एक शानदार चुनें वेबसाइट निर्माता और शीर्ष वेब होस्टिंग इसके साथ जाने के लिए सेवा।

01. कोड सेटअप [6 9]

यह ट्यूटोरियल मानता है कि आपके पास नोड स्थापित है। यदि नहीं, तो ऐसा करें। फिर संपत्ति डाउनलोड करें आपको ज़रूरत होगी। हमने आपको ट्यूटोरियल के लिए एक प्रारंभिक बिंदु और ढांचा प्रदान किया है।

पूरे दौरान, हम 'slackbots' और 'नोड-स्लैक-अपलोड' जैसे मॉड्यूल का उपयोग करते हैं। उन्हें इंस्टॉल कमांड चलाकर प्राप्त किया जा सकता है।

npm install

02. स्लैक सेटअप [6 9] [7 9]

Create a custom Slack bot: Slack setup

[9 2] अपने बॉट को एक उपयोगकर्ता नाम दें और इसे अपने चैनल में आमंत्रित करें

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

हम ढीले के लिए "बॉट उपयोगकर्ता" एकीकरण का उपयोग कर रहे हैं। ऐसा करने के लिए, हमें 'https: // & lt; yslackworkspace & gt; .slack.com / apps / a0f7ys25r-bots' पर जाकर एक टोकन प्राप्त करने की आवश्यकता है और "कॉन्फ़िगरेशन जोड़ें" पर क्लिक करें।

अपने बॉट के लिए उपयोगकर्ता नाम चुनें (हम बाद के चरण में इस प्रोग्रामेटिक रूप से ओवरराइड कर सकते हैं), और पुष्टि करें।

बॉट को वांछित चैनल में आमंत्रित करें।

एक बॉट उपयोगकर्ता बनाकर आपको निम्नलिखित प्रारूप में एक टोकन मिलेगा:

xoxb-00000000000000-x0x0xxxx0xxxx0x

अगले चरण के लिए टोकन की प्रतिलिपि बनाएँ।

03. पर्यावरण चर [6 9]

हम हार्ड-कोडिंग से बचने और गुप्त टोकन और चाबियों को प्रकट करने के लिए पर्यावरण चर (एएनवी 'फ़ाइल) का उपयोग करते हैं, जैसे कि हमने जेनरेट किए गए स्लैक टोकन की तरह, और आपके निजी स्लैक वर्कस्पेस में चैनल का नाम।

आगे बढ़ें और अपने टोकन के साथ '.env' फ़ाइल भरें, और उस चैनल का नाम जिसे आपने बॉट उपयोगकर्ता को आमंत्रित किया है।

 slack_token = xoxb- & lt; आपकी ओर से & gt;
Slack_channel = & lt; चैनल-नाम & gt; 

04. बॉट पैरामीटर [6 9]

यह अगला कदम हमें 2 फाइलों में ले जाता है: 'index.js', जिसे हमारे पास एक संक्षिप्त रूप होगा, और 'बिन / lib / bot.js', जहां हमारे अधिकांश विकास होते हैं। इंडेक्स फ़ाइल में, हम इसे एक नाम देकर हमारे बॉट को तत्काल करते हैं, जो 'डब्लूडीएमबीओटी' है।

'Bot.js' में हम नाम, टोकन इत्यादि के साथ प्रत्येक उदाहरण के पैरामीटर को नियंत्रित करते हैं।

 // index.js
कॉन्स बॉट = आवश्यकता ('/ बिन / lib / bot ')। init
('Wdmbot');

//bot.js
const botparams = {
icon_emoji: ': robot_face:',
as_user: गलत
};
बीओटी;
समारोह initbot (botname) {
बॉट = न्यू स्लैकबॉट ({
टोकन: process.env.slack_token,
नाम: बोटनाम
});
} 

05. चैनल पर पोस्ट करें [6 9] [7 9]

Create a custom Slack bot: Post to channel

[9 2] अब आप संदेश भेजने के लिए अपना बॉट प्राप्त कर सकते हैं

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

'SendMessage' फ़ंक्शन पर एक नज़र डालें। हम 'posto' विधि का उपयोग करते हैं। यह किसी भी प्रकार के चैनल, सार्वजनिक या निजी पर पोस्टिंग को संभालेगा। यदि आप केवल निजी चैनलों को पोस्ट करना चाहते हैं तो आप इसके बजाय 'पोस्टटोग्रुप' का उपयोग कर सकते हैं (या किसी सार्वजनिक के लिए 'posttochannel')। हमारा पहला संदेश भेजने के लिए, हम 'initbot' में कोड जोड़ सकते हैं।

 समारोह initbot (botname) {
bot = / * ऊपर देखें * /
SendMessage ('मैं यहाँ हूँ!');
}
// अब रन 'एनपीएम स्टार्ट' 

06. कस्टम बोटपारम [6 9]

आपको अपने चैनल में WDMBot से एक संदेश दिखाना चाहिए था। यह ध्यान देने योग्य है कि 'botparams' में, 'as_user' गलत पर सेट है, जो हमें नाम और छवि को ओवरराइड करने देता है। यदि सत्य पर सेट किया गया है, तो यह टोकन प्राप्त करते समय सेट नाम और छवि का उपयोग करेगा।

आप बॉट इमोजी को एक छवि में बदल सकते हैं जैसे:

 कॉन्स बोटपाराम = {
icon_url: 'https://pbs.twimg.com/
profile_images / 976112552081010688 /
Wllqvj8d_400x400.jpg ',
as_user: गलत
}; 

07. चैनल घटनाक्रम [6 9] [7 9]

[16 9] Create a custom Slack bot: Channel events

[9 2] संदेशों के लिए सुनने के लिए अपने बॉट को सेट करें

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

संदेश पोस्ट करना उपयोगी है, लेकिन बॉट को अधिक इंटरैक्टिव बनाने के लिए, हमें चैनल में अन्य उपयोगकर्ताओं के पदों की पहचान करने में सक्षम होना चाहिए। आइए संदेश ईवेंट सुनें, और फिर देखें कि जब हम चैनल में टाइप करते हैं तो क्या होता है। हमें अलग-अलग संदेश प्रकार लॉग किए जा रहे हैं, जैसे 'USER_TYPING' या 'संदेश'।

 समारोह initbot (botname) {
bot = / * ऊपर देखें * /
bot.on ('संदेश', डेटा = & gt; {
Console.log (डेटा);
});
} 

08. आने वाले संदेशों का जवाब [6 9]

इसके बाद, हम बिल्कुल सब कुछ जवाब देने से बचने के लिए 'संदेश' के आने वाले संदेशों और शायद एक विशिष्ट वाक्यांश या कीवर्ड के लिए उत्तर देना चाहते हैं। यदि हम एक सटीक वाक्यांश से मेल खाना चाहते हैं तो हम लोअरकेस स्ट्रिंग की तुलना करना सुनिश्चित करते हैं। हम यह भी देख सकते हैं कि एक संदेश '()' एक विशेष शब्द शामिल है या नहीं।

 Bot.on ('संदेश', डेटा = & gt; {
यदि (data.type === 'संदेश') {
if (data.text.tolowerceast () === 'कहां
क्या आप?') {
SendMessage ('मैं यहाँ हूँ!');
}
}
}); 

09. "मानव" उपयोगकर्ताओं को प्रतिबंधित करें [6 9]

बीओटी उपयोगकर्ताओं द्वारा भेजे गए संदेशों में 'bot_message' और bot_id के उप प्रकार जैसे विभिन्न गुण होते हैं। यदि आप अपने प्रतिक्रिया में से एक कीवर्ड में से एक कीवर्ड में से एक हैं, तो आप केवल मानव-पोस्ट किए गए संदेशों को केवल मानव-पोस्ट किए गए संदेशों को जवाब देने के लिए केवल मानव-पोस्ट किए गए संदेशों को उत्तर देने के लिए प्रतिबंधित करना चाहते हैं।

 Bot.on ('संदेश', डेटा = & gt; {
यदि (data.type === 'संदेश' & amp; & amp; डेटा।
उप प्रकार! == 'bot_message') {
यदि (data.text.tolowercelecte ()।
शामिल हैं ('हैलो')) {
SendMessage ('हैलो, मैं एक बॉट हूँ!');
}
}
}); 

10. व्यक्तिगत प्रतिक्रिया [6 9]

अधिक व्यक्तिगत प्रतिक्रिया देने के लिए, आप उस संदेश की उपयोगकर्ता आईडी का लाभ उठा सकते हैं जिसका आप उत्तर दे रहे हैं। टैग '& lt; @ & gt;' में संलग्न होने पर स्लैक स्वचालित रूप से उपयोगकर्ता नाम को उपयोगकर्ता नाम में परिवर्तित कर देगा। यह पहचानना कि आप किस प्रकार का जवाब दे रहे हैं, खासकर यदि एकाधिक चैनल सदस्य एक साथ आपके बॉट के साथ बातचीत कर रहे हैं।

 Bot.on ('संदेश', डेटा = & gt; {
यदि (data.type === 'संदेश' & amp; & amp; डेटा।
उप प्रकार! == 'bot_message') {
यदि (data.text.tolowercelecte ()।
शामिल हैं ('हैलो')) {
SendMessage ('हैलो & lt; @ $ {data.user}
& gt; मैं रोबोट हूं!');
}
}
}); 
[7 9]

generate CSS

[9 2] यदि आप अपने ग्राहक के काम, करियर या एजेंसी को अगले स्तर पर ले जाने के लिए नवीनतम रचनात्मक और व्यावहारिक कौशल सीखना चाहते हैं, तो वेब डिजाइनरों और डेवलपर्स के लिए हमारे सीएसएस-केंद्रित सम्मेलन - सीएसएस-केंद्रित सम्मेलन में हमसे जुड़ें। और अधिक जानकारी प्राप्त करें यहां । विशेष प्रस्ताव कोड का उपयोग करें WebDesigner2 टिकटों पर 10% की छूट के लिए!

(छवि क्रेडिट: गेट्टी / भविष्य) [1 9] [9 7]

11. अद्यतन प्रतिक्रियाएँ [6 9]

बॉट भी अपने प्रतिक्रियाओं को संपादित कर सकते हैं। हालांकि, केवल अपना ही। तो यदि आप एक टाइपो-स्पॉटिंग बॉट की उम्मीद कर रहे थे जो आपके संदेशों को स्वचालित रूप से सही करेगा जब यह गलती को स्पॉट करता है, तो यह वर्तमान सेटअप के साथ संभव नहीं है।

संदेश को अद्यतन करने के लिए, हम एक नया फ़ंक्शन, और एक वैश्विक बूलियन परिभाषित करते हैं जिसे हम अपने डेमो में उपयोग करेंगे।

 changereply = false चलो;
समारोह अद्यतन (MessageParams) {
bot.updatemessage (messageparams.channel,
MessageParams.ts, MessageParams.text,
बोटपाराम्स);
} 

12. संदेश बदलें [6 9] [7 9]

Create a custom Slack bot: Changing the message

[9 2]उन संदेशों को अपडेट करें जो बॉट भेजते हैं

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

आइए टेक्स्ट को अपडेट करने का प्रयास करें बॉट हमें भेजता है। इस मामले में, एक संदेश घटना पर, हमें आने वाले बॉट संदेश का जवाब देने की आवश्यकता है, इसलिए हम उस स्थिति को अपडेट के लिए मेल खाते हैं, और हम अद्यतन करने के लिए मूल संदेश के टाइमस्टैम्प का भी उपयोग करते हैं। ऐसा लगता है कि कौन सा संदेश अपडेट करने के लिए पहचान सकता है, अगर अन्य के बीच में पोस्ट किया जाता है।

 यदि (data.type === 'संदेश' & amp; & amp; data.subtype! ==
'bot_message' & amp; & amp; data.text) {
यदि (data.text.includes ('अपडेट')) {
SendMessage ('मैं 5 में अपडेट करूंगा
सेकंड ');
Changerepleply = सत्य;
}
}
यदि (data.type === 'संदेश' & amp; & amp; data.subtype ===
'bot_message' & amp; & amp; Changereply) {
changerepleply = false;
Settimeout (() = & gt; {
UpdateMessage ({चैनल: Data.Channel,
टीएस: डेटा। टीएस, टेक्स्ट: 'मैंने अपडेट किया है'});
}, 5000);
} 

13. क्षणिक संदेश [6 9] [7 9]

Create a custom Slack bot: Ephemeral messages

[9 2] अल्पकालिक संदेश केवल एक उपयोगकर्ता द्वारा देखा जाता है और हटाया जा सकता है

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

क्षणिक संदेश हैं, क्योंकि नाम का सुझाव दिया जा सकता है, अस्थायी। वे केवल एक उपयोगकर्ता के लिए भी दिखाई देते हैं और उनके द्वारा हटाया जा सकता है। उन प्रकार के संदेश एक टिप या अनुस्मारक के रूप में उपयोगी हो सकते हैं जिन्हें स्थायी रूप से रहने की आवश्यकता नहीं होती है।

 अगर (data.text.tolowercase ()। शामिल ('hr')) {
ephemeralmessage ({
चैनल: data.channel,
उपयोगकर्ता: data.user,
पाठ: 'यदि आपको एचआर से संपर्क करने की आवश्यकता है,
उनका ईमेल [email protected] है '
});
}

// वह फ़ंक्शन जिसे हम कॉल कर रहे हैं
समारोह epheralmessage (messageparams) {
bot.postephemeral (messageparams.channel,
MessageParams.user, MessageParams.text,
बोटपाराम्स);
} 

14. उपयोगकर्ता लुकअप [6 9]

विभिन्न तरीकों में थोड़ा अलग उपयोगकर्ता पैरामीटर (या तो आईडी या नाम, जो DISPLAIN_NAME और REAL_NAME से अलग है) ले जाएगा। हालांकि, केवल उपयोगकर्ता आईडी संदेश घटनाओं पर उपलब्ध है। इसलिए हम सभी उपयोगकर्ताओं को प्राप्त करके और आईडी से मेल करके उपयोगकर्ता नाम लुकअप को कार्यान्वित कर सकते हैं।

 Async फ़ंक्शन GetUserName (UserID) {
वापसी awit bot.getUsers ()
.then (डेटा = & gt; {
सदस्य = data.members.find
(उपयोगकर्ता = & gt; {
USER.ID === USERID;
});
वापसी सदस्य। नाम;
})
.कैच (ERR = & gt; console.log (ERR));
} 

15. प्रत्यक्ष संदेश भेजें [6 9]

नए उपयोगकर्ता लुकअप के साथ, अब हम किसी उपयोगकर्ता को प्रत्यक्ष संदेश भेज सकते हैं, जब क्षणिक संदेश सिर्फ नहीं करेंगे। ध्यान दें कि मूल संदेशों को मूल चैनल की तुलना में एक अलग आईडी के साथ एक नया / अलग चैनल माना जाता है। आप एक चैनल लुकअप को उसी तरह भी लागू कर सकते हैं जैसा कि हमने पहले किया है।

 // संदेश घटना में
यदि (data.text.tolowerceast ()। शामिल ('बॉट')) {
SendDM ({
उपयोगकर्ता: data.user,
पाठ: 'मैं कैसे मदद कर सकता हूं?'
});
}
// वह फ़ंक्शन जिसे हम कॉल कर रहे हैं
async समारोह SendDM (MessageParams) {
USER = AWAIT GETUSERNAME
(MessageParams.user);
वापसी bot.postmessagetouser (उपयोगकर्ता, संदेश
Param.text, Botparams, (ERR, डेटा) = & gt; {
Console.log (ERR)
});
} 

16. एक छवि के साथ जवाब दें [6 9]

बॉट उपयोगकर्ताओं को एक चैनल में फ़ाइलों और छवियों को अपलोड करने की अनुमति भी होती है। यह कार्यक्षमता 'स्लैकबॉट्स' द्वारा कवर नहीं की जाती है, इसलिए हमें नीचे प्रदर्शित किए गए एक नए अपलोडर को तत्काल करना होगा। इसमें कुछ छवियों के साथ, अपनी प्रोजेक्ट रूट पर 'संपत्तियां' फ़ोल्डर भी तैयार करें।

आइए अगले चरण में परिभाषित 'sendimage ()' को एक कॉल तैयार करें।

 // initbot () में
अपलोडर = नया slackupload (process.env।
Slack_token);

// संदेश घटना में
यदि (data.text.includes ('छवि')) {
अगर (data.upload) {
/ * इस मामले में, कोई संदेश नहीं है
उप प्रकार,
इसलिए हम जांचते हैं कि यह एक द्वारा ट्रिगर नहीं है
पिछला अपलोड संदेश * /
छवि = data.text.split ('' 
; sendimagage ('यह आप छवि है चाहता था ', छवि); } }

17. फ़ाइल अपलोड फ़ंक्शन [6 9] [7 9]

Create a custom Slack bot: The file upload function

[9 2] छवियों को अपलोड करने के लिए अपलोडर और फाइल सिस्टम का उपयोग करें

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

हम अपलोडर और फाइल सिस्टम (एफएस) मॉड्यूल का उपयोग करके छवियों को अपलोड करते हैं। बशर्ते कि उपयोगकर्ता का संदेश "छवि & lt; imagename.extension & gt;" प्रारूप में है, और ऐसी फ़ाइल 'संपत्तियों' फ़ोल्डर में मौजूद है, छवि को पढ़ा और अपलोड किया जाएगा। यदि नहीं, तो हम एक नियमित संदेश वापस भेजते हैं (यह एक क्षणिक भी हो सकता है)।

फंक्शन सेंडिमेज (संदेश, छवि) {
अपलोडर। uploadfile ({
फ़ाइल: fs.createreadstream (path.join
(__dirname, '.. /../assets/${image}')),
mimetype: 'छवि / *',
फाइल का प्रकार: '*',
शीर्षक: छवि,
प्रारंभिक: संदेश,
चैनल: चैनल
}, (ERR, डेटा) = & gt; {
यदि (ERR) {
SendMessage ('क्षमा करें मुझे नहीं मिल रहा है
$ {छवि} ');
}
});
} 

18. कई चैनलों को पोस्ट करें [6 9]

आप एक ही बॉट उपयोगकर्ता के साथ कई चैनलों को पोस्ट कर सकते हैं, जब तक कि यह प्रत्येक चैनल का सदस्य है जहां आप प्रतिक्रिया की उम्मीद कर रहे हैं। आइए एक 'पोस्टटॉल' फ़ंक्शन बनाएं और कॉमा नामों के रूप में चैनल नामों के लिए पर्यावरण चर को अपडेट करें।

 कॉन्स चैनल = process.env.slack_channel।
विभाजित करें(',');
कॉन्स चैनल = चैनल 
; समारोह posttoall (संदेश) { Channels.foreach (चैनल = & gt; { bot.postto (चैनल, संदेश, botparams); }); }

19. स्प्लिट चैनल [6 9]

कभी-कभी, आप डिबगिंग के लिए चैनलों का उपयोग करना चाहते हैं, या विभिन्न चैनलों में एक ही बॉट के साथ अलग-अलग घटनाओं का जवाब देना चाह सकते हैं। यह आपके चैनल नामकरण सम्मेलन को कसरत करने के लिए आप पर निर्भर है। हम निम्न उदाहरण के लिए मान लेंगे कि slack_channel = wdm-tutorial, डब्लूडीएम-ट्यूटोरियल-डीबग।

 समारोह splitmessages (संदेश, debugmessage) {
Channels.foreach (चैनल = & gt; {
const msg = channown.includes ('डीबग')
? Debugmessage: संदेश;
bot.postto (चैनल, एमएसजी, बोटाप्राम);
});
} 

20. प्रतिक्रियाओं का शब्दकोश [6 9]

हम सीधे संदेश में हार्ड कोडिंग प्रतिक्रियाएं हैं। आगे बढ़ने के लिए, चीजों को और अधिक प्रबंधनीय बनाने के लिए, आप डेटाबेस या JSON प्रारूप में ट्रिगर्स और प्रतिक्रियाओं को स्टोर करना चाहेंगे, और उन शर्तों के आधार पर उनके बीच स्विच करें।

 // उदाहरण प्रतिक्रिया आइटम
{
इनपुट: 'एचआर',
इनपुटमैच: 'शामिल',
प्रतिक्रिया: 'यदि आपको एचआर से संपर्क करने की आवश्यकता है,
उनका ईमेल [email protected] 'है,
प्रतिक्रिया: 'क्षणिक'
} 

21. आगे संसाधन [6 9] [7 9]

[36 9] Create a custom Slack bot: Further resources

[9 2] कहीं और पाए जाने के लिए बहुत अधिक बॉट जानकारी है

(छवि क्रेडिट: वेब डिजाइनर) [1 9] [9 7]

स्लैक एपीआई में कुछ अन्य उपयोगी गुण उपलब्ध हैं। उम्मीद है कि, इस ट्यूटोरियल ने आपके सभी बॉट की जरूरतों के लिए क्या संभव है इसका एक अवलोकन दिया होगा। आगे के संसाधनों को पढ़कर पाया जा सकता है 'स्लैकबॉट्स' प्रलेखन , या पूर्ण स्लैक एपीआई प्रलेखन

यह लेख मूल रूप से रचनात्मक वेब डिज़ाइन पत्रिका के अंक 28 9 में प्रकाशित किया गया था वेब डिजाइनर [3 9 8] यहां अंक 289 खरीदें

या वेब डिजाइनर की सदस्यता लें

संबंधित आलेख:

  • एक एआई-संचालित चैटबॉट का निर्माण
  • स्लैक का भारी अपडेट था और आप सभी को प्यार करने जा रहे हैं
  • चैटबॉट अनुभव कैसे डिजाइन करें
[42 9]

कैसे करना है - सर्वाधिक लोकप्रिय लेख

How to set up and optimise your SmugMug storefront

कैसे करना है Sep 16, 2025

(छवि क्रेडिट: Pexels पर आंद्रे Furtado) [1 9] एक साधारण वे..


चेहरा मुखौटा पहनते समय अपने चश्मे को फॉगिंग कैसे रोकें

कैसे करना है Sep 16, 2025

(छवि क्रेडिट: गेट्टी छवियां) [1 9] यदि आपके चश्म..


लौ चित्रकार के साथ शुरू करें

कैसे करना है Sep 16, 2025

लौ पेंटर एक स्टैंडअलोन पेंट और कण प्रभाव पैकेज है जो आपको मूल चित्रों, हल�..


How to draw Asuka from Neon Genesis Evangelion

कैसे करना है Sep 16, 2025

(छवि क्रेडिट: पॉल क्वोन) [1 9] बनाना चरित्र ड�..


How to achieve scale in your paintings

कैसे करना है Sep 16, 2025

इस ट्यूटोरियल में हम कुछ बुनियादी सिद्धांतों पर जाएंगे जो आपके अपने टुक�..


Use Chart.js to turn data into interactive diagrams

कैसे करना है Sep 16, 2025

2 का पृष्ठ 1: चार्ट.जेएस का उपयोग करना: चरण..


एफ़िनिटी डिजाइनर: ग्रिड का उपयोग कैसे करें

कैसे करना है Sep 16, 2025

एफ़िनिटी डिजाइनर मैक और विंडोज के लिए उपलब्ध वेक�..


ज़ब्रश के साथ बेहतर वीडीएम के लिए 4 कदम

कैसे करना है Sep 16, 2025

फ्रीलांस 3 डी कलाकार और वर्टेक्स पैनलिस्ट माया �..


श्रेणियाँ