Placeholder Image

Subtitles section Play video

  • (bell dings) - Hello, welcome to the second

  • Mastodon video, in the first video I talked a bit

  • about what Mastodon is or at least my impressions

  • of it, the idea of decentralization.

  • And in this video, the reason why I'm doing this,

  • is that I want to find a platform

  • to write crazy weird experimental avant-garde art bots.

  • And so, I'm going to use this platform.

  • (creepy piano music) Bots in space!

  • The sound that that, this was going to,

  • ya know this, yeah it just seemed better

  • when I thought of playing this music

  • then the way it turned out but,

  • so the first thing I'm going to want to do

  • is sign up for an account here, bots in space.

  • And I am going to say sign up with coding train bot

  • and I am going to use the email address,

  • Daniel at the coding train dot com.

  • I'm going to use the password, ooh suggested password,

  • I don't think I should use this,

  • because then you will all see it.

  • I'm going to use the password,

  • I love blueberries or heart heart rainbow.

  • Sure you'll all be able to guess my password really easily.

  • What is, what does this nonsense, go away!

  • A message with confirmation link

  • has been sent to your email address.

  • Verify email address, ah, my email address has been...

  • (bell dings) Okay, so I clicked the

  • verify my email, I have now put in my username and password.

  • I'm going to click log in, and now welcome to Mastodon.

  • I'm going to save this, just why not.

  • This is my full handle at coding train bot at bots in space.

  • I'm not going to skip through this little tutorial here,

  • but first thing I'm going to do, very important,

  • is I'm going to go to edit profile,

  • and I'm just going to go down here.

  • I would want to put other stuff here,

  • maybe I'll do that eventually,

  • but I want to go here and I want to click this is a bot account.

  • Because one of the nice things about Mastodon,

  • it has a feature for you to indicate

  • that a particular account is a bot,

  • which is, you know, a really nice thing

  • to do in terms of transparency.

  • Okay, the other thing that I want to do

  • is I want to go down under development,

  • so I'm a hit save changes, we're down here

  • in the bottom there's a little option under development,

  • I'm going to want to click that,

  • and I want to create a new application.

  • So I'm going to create a new application,

  • it is coding train example bot.

  • The website will just be thecodingtrain.com.

  • I want to, what do I want to be able to do, so.

  • You have a lot of options in terms of

  • what permissions you can give your bot.

  • Like maybe the bot can only read certain things,

  • or only write certain things.

  • But I'm actually going to keep the red global write checked,

  • and the red global read checked,

  • so that everything, and follow,

  • so this bot can basically do everything.

  • It can read all the posts, it can write

  • as many posts as it wants, and it can follow.

  • So I'm going to hit submit and then I'm going to click here.

  • And now, now the thing is, this is stuff

  • that I really do not want to share with anybody.

  • So what I'm going to do is I'm going to

  • quickly just turn the screen off, no that's me.

  • I'm going to turn the screen off, there we go,

  • I'm going to regenerate that access token.

  • I'm going to go back to, I'm going to copy

  • this stuff somewhere secret,

  • actually I'm not going to worry about that now,

  • I'm going to go back to Mastodon,

  • then I'm going to put the screen back, there I am.

  • So that you can't hack my bot at this moment.

  • Alright, so, what's next, I want,

  • there's a lot of different ways

  • you could write a Mastodon bot.

  • I'm sure you could come up with some way

  • that I can't even think of right now.

  • I'm going to use node.js, which is a JavaScript framework,

  • for executing JavaScript code.

  • And I am going to do all this from the command line.

  • So I, you're going to want to have node installed

  • and you're going also to,

  • you're going to want to have some shell access

  • to your computer to be able to do this.

  • And I'll link to different workflow videos

  • about how to get that stuff set up

  • if you don't have that already.

  • So, what I'm going to do is I'm in a directory,

  • I'm on coding train desktop Mastodon bot.

  • The first thing I'm going to do,

  • is I'm just going to type npm init.

  • What this does is it starts up my node project.

  • This is going to create a package.json file,

  • which has all the configuration information

  • for my node project, I could just manually make

  • that file or copy it from another project,

  • but it's nice that this tool will step me through it.

  • So package name Mastodon bot sounds good.

  • This is version, I dunno, 0.0.1

  • The description is example code

  • for Mastodon bot on coding train.

  • Entry point, I'm going to have a file called bot.js.

  • I'm not going to worry about testing right now,

  • I don't have a Git repository.

  • Bot, Mastodon, education, will be some keywords.

  • The author is me, I guess license will be MIT,

  • and this looks all looks good to me.

  • So now, if I open this up in Visual Studio Code,

  • we can see it has created a,

  • it has created a package.json file

  • with all of that information in it that I just typed.

  • Okay, the next thing that I want to do

  • is create my JavaScript file that is going to run the bot.

  • So I'm just going to click new file

  • and I'm going to say bot.js, and just

  • to test things out I'm going to say console.log

  • Mastodon bot starting dot dot dot.

  • So, this is where all of my code

  • for the bot is going to go.

  • And the very first thing that I'm going to do

  • is just test this code by executing it.

  • And the way that I do that, is going back to terminal,

  • and by the way, yes, there is actually

  • a terminal directly in Visual Code Studio,

  • and I could actually just run it right here,

  • by saying like node bot.js, and maybe I should do that.

  • This is so tiny though, I don't know why,

  • I'm just not used to using this terminal yet.

  • So I'm going to stick with my using a separate iTerm.

  • And I'm going to run node bot.js.

  • And we can see all it's doing is console logging

  • that Mastodon bot starting.

  • Okay, how am I going to connect to Mastodon?

  • So, in order to do this, I'm going to use a node package

  • that will communicate with the Mastodon API directly.

  • So let's find that, sure let's look at notifications.

  • Let's search node Mastodon API and let's see.

  • So what comes up, Mastodon dash API npm.

  • This one looks pretty good, let's go over to GitHub and see.

  • Alright, so this is actually the one,

  • this is the one that I'm going to choose to use.

  • It was last updated eight days ago,

  • I've used this before in making a practice example,

  • so this one is going to work fine for me.

  • And so now, the next thing that I need to do,

  • is I need to run npm install.

  • Because if I'm going to use this package

  • to communicate with my bot, I need

  • to make sure I have it installed.

  • So this npm install dash dash save Mastodon API,

  • and yes, I could use Yarn which is

  • another package manager for node,

  • but I've still, I'm like an npm person.

  • Whenever there's the thing that's people are using

  • instead of Yarn, that's when I'll use Yarn.

  • Npm install, save, the dash dash save by the way,

  • is a argument so that it automatically gets added

  • to the package.json file and there we go.

  • So if I go over here we can see if I look in package.json,

  • there is now also a dependency, Mastodon dash API.

  • So that is now a project dependency.

  • Doot doot doot doot doot doot, breaking news,

  • Alka in the chat is telling me

  • that you no longer have to use dash dash save,

  • so maybe it adds it automatically

  • whether or not you use dash dash save or not.

  • That's a nice little extra tip for today.

  • Okay, what I want to do now is require it.

  • And again, I'm not using, I'm going to,

  • sort of still, I'm using require.

  • So I want to say const, Mastodon,

  • let's just call it const m maybe,

  • no let's, I don't know, Mastodon

  • equals require Mastodon dash API.

  • So I am now requiring it, which means,

  • that's basically, I'm importing it.

  • And then what I want to do is I want to connect.

  • And there's a lot of ways that you can connect live

  • in your code because maybe you're making an app

  • and you want people to be able

  • to authenticate with different accounts.

  • I don't need to do any of that.

  • I just want to, do this.

  • New, constant m equals new Mastodon.

  • And I'm going to do this, and I'm going to need

  • to put in my access token, I'm going to need.

  • I'm not too worried about this,

  • and I need to put in my particular instance,

  • which is bots in space.

  • So this is the, since I am now going

  • to run my bot through bots in space,

  • the API URL for making API queries is at bots in space,

  • bots in dot space slash API slash v one.

  • Now maybe someday there'll be a v two of the API,

  • a v three, but this should always work.

  • And now I just need to get that access token,

  • which I'm throwing caution to the wind,

  • by the time you watch this video,

  • the access token will have changed.

  • But just to show you, I'm going to go back to here,

  • I'm going to go to settings, that's fine,

  • I'm going to go to, where am I, development,

  • coding train example bot, I'm going to grab the access token,

  • I'm going to paste it here, and then I think,

  • I'm pretty sure I need also the client secret,

  • which is this thing, and...

  • Client key, which is this thing.

  • And then now, I should be all set and connected.

  • So the next thing that I can do if I'm looking

  • through this API, oh yeah,

  • this is actually what I wanted to do, yeah.

  • Is I can so now, ah, I'm being told that I wrote secrent.

  • So that should be secret, thank you very much.

  • Alright, so here's the thing, we got to talk about something.

  • There are three core ways to engage with the Mastodon API.

  • Sad to erase my beautifully decentralized diagram.

  • There are three ways to engage with the Mastodon API.

  • And this is very similar to how Twitter used to work,

  • Twitter doesn't work this way anymore,

  • but luckily for us Mastodon does.

  • There is the get, a get request is basically saying,

  • hey, I would like to get a whole bunch of stuff,

  • like get me this list of user accounts,

  • get me this list of posts, toots,

  • statuses, tweets, whatever you want to call them.

  • Search for every toot that has the word mango

  • in it, that's what get is for.

  • There is also post, I really should have written these

  • in all capital letters, post is

  • for posting something to Mastodon.

  • Like for example, I want to post a new status,

  • or I want to follow, or favorite,

  • or reblog something, all of those are posts.

  • And then, there is what is really,

  • the exciting thing, the streaming API.

  • The streaming API is a way for you

  • to essentially have almost like a socket connection.

  • A like, an attached connection

  • to Mastodon where you're just listening for events.

  • So every time somebody follows somebody you'll get an event,

  • or every time somebody posts a status you'll get an event.

  • So this is what's really powerful

  • in the way that you can kind of engage with the service

  • in a realtime synchronous way.

  • And unfortunately, this a thing

  • that Twitter recently removed from their API.

  • And there's other ways to do the same exact thing,

  • but it's a bit roundabout, plus, good luck

  • getting your bot approved from Twitter

  • or something that you can use there.

  • Okay, so in this video to test the first idea out,

  • I just want to do a post, so what I want to do is a post.

  • Okay, so coming back over here,

  • we can see this is what I have to do.

  • Post with a sum path, now what is the path?

  • So now we need to look up Mastodon API documentation.

  • And we should be able to on this page here

  • look under posts, and we can see,

  • I can, this is a post for following something,

  • for blocking, unblocking, for muting.

  • But I want to post a status.

  • Hold on, there we go, sorry about that.

  • This is where it is, I want to post a new status.

  • So remember, what is my API...

  • URL, it's this one, so ultimately the endpoint

  • that I want to go to is v one statuses.

  • But I don't do it here, the path,

  • I could put right here, statuses.

  • Then I need some parameters and I'm going to put a callback,

  • which I will use my fancy ES6 arrow syntax

  • that I have covered in other videos,

  • I'll come back to that in a second.

  • So params, let's make that a separate variable,

  • to JavaScript object, so these param,

  • this is super important, what are the parameters?

  • Well, we can go back to the API documentation,

  • and we can look, here they are.

  • I can say this is the status, the text that I want to post.

  • In reply to, well, is it in reply to somebody,

  • a different, an ID of a different status.

  • Media IDs for images, all sorts of stuff here.

  • Language, is it sensitive content,

  • there's all sorts of things.

  • But basically I'm just going to say,

  • status choo choo.

  • And there we go, why, why did you format yourself like this?

  • What kind of crazy indentation is that?

  • This isn't right, I'm going to have to deal with that later.

  • Okay, so now, and then in the callback, what do I get?

  • It's probably like error, first callbacks I'm guessing.

  • Error or data, I'm just do this.

  • So let's just do, say like,

  • if error, console dot error error.

  • And then, otherwise, console dot log data, okay.

  • So now, here we go, I have my code, right.

  • I started the bot, I connected,

  • there's all my secret information,

  • credit card number and social security number's

  • embedded in there somewhere.

  • Here's my status that I want to post and there we go.

  • And hopefully nobody's already

  • hacked my account and posted stuff.

  • So let's go look over here...

  • Okay, wait, no I'm in the wrong account,

  • where did I, got to go to bots in space.

  • And I got to go to my profile,

  • which isn't anything yet, somewhere it'll show up here.

  • Where's my profile, is this me?

  • That's local, who knows, okay, let's run this code.

  • Node bot.js, okay, we got an error,

  • Mastodon is not defined, why is Mastodon not defined?

  • Because I used a capital down here

  • and I didn't use a capital up here.

  • So this Mastodon, importing the whole library

  • is now a function that I can call to connect.

  • So let's try this again.

  • Whoo, that seemed to have worked

  • except it didn't console log anything.

  • Thank you to Wilbur in the chat,

  • who just told me that I actually put the wrong path here

  • to the API, so if I go back to the API documenation,

  • you can see the path, the endpoint is statuses plural.

  • So let's try this one more time.

  • Statuses, and now, let me run this again.

  • Ah look, and we can see we got all this metadata back,

  • because it was successful, if I go back here,

  • if I go to bots in space, look at that,

  • there we are, choo choo! (train whistle)

  • Okay, we did it, we successfully made

  • our first Mastodon bot that is posting just from...

  • Just from the node, directly to Mastodon.

  • Okay, so there's a few things that I want to show you next.

  • I would like to show you, number one,

  • is how to effectively hide your,

  • you can open source your bot,

  • but still hide your client secret, client code,

  • all that sort of stuff, so I want to show you that.

  • And also, we'll just look at some

  • of the other parameters for...

  • Some of the other parameters for posting.

  • (energetic music)

(bell dings) - Hello, welcome to the second

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it