Placeholder Image

Subtitles section Play video

  • (whistle tooting)

  • - Hello, welcome to video number 7,629 about Mastadon bots.

  • (Daniel laughing)

  • I have been on a journey, a journey

  • (imitates train clacking)

  • on along the tracks of Mastadon.

  • And I started from nowhere and I have arrived

  • to the point where I have a bot.

  • It's called codingtrainbot, and what this bot does,

  • if you follow the bot, it says, welcome aboard.

  • And if you toot at the bot and use a certain keyword,

  • it will favorite or re-toot, boost,

  • whatever it is, your particular post.

  • And I want to add one more thing to it.

  • So, I want to be able to respond to a question.

  • So, let's just say, I'm going to look for any post

  • at me that ends with a question mark.

  • This is going to be tricky cause there's the html tags in it.

  • I'm just going to look for a question mark,

  • I'll let you make this fancier.

  • So let's add one more check.

  • I'm going to

  • constant regex3.

  • I'm just going to look for a question mark.

  • Oh, question mark is a metacharacter,

  • so I think I might have to do this, \?

  • So I want to look for a question mark, if

  • regex3

  • matches the content.

  • And by the way, this is, by the way,

  • this is like the very basics of making a chatbot,

  • which is just doing basic pattern matching.

  • Now chatbot systems use machine learning

  • and try to categorize what people are saying

  • into intense and do all sorts of text analysis,

  • but at a core level, you could just use regular expressions

  • to try to match what somebody's saying

  • and respond accordingly.

  • And if you, I do have a set of videos about Rivescript,

  • which is a pattern matching utility

  • that you can use in any programming,

  • a number of programming languages, but you can use it

  • in Javascript, to build your own chatbot.

  • So this is interesting to think about,

  • what do you want your bot to actually do,

  • but in this case, I'm just going to use regular expressions.

  • I'm going to look for a question mark.

  • So let me just actually make sure this works.

  • I'm going to say, I got a question.

  • And let me look at the content.

  • So I think I'm going to not always console.log

  • the content anymore, I know that's working.

  • Now I want to just look at it, console.log, data,

  • what was it called that I put it in a variable?

  • Content.

  • So I'm just going to look at the content.

  • So I am now going to run this.

  • You know, by the way, if you're doing this on your own,

  • you're going to want to have a second Mastadon account

  • (laughing) where you can then test it.

  • I am a weird, crazy person who does this sort

  • of stuff on a live stream, apparently.

  • I just assume that the people out in the world watching

  • will interact and hopefully be kind.

  • Okay, now, let us run it again.

  • Let's see if we can get some mentions

  • with a question mark in them and see if, oh there we go.

  • So, I got a question.

  • Okay, oo, that's interesting.

  • Oh, I got a question, that's not what somebody said to me.

  • Why, with a question mark.

  • Okay, so that seems to be working,

  • so I'm going to assume that that's good.

  • Thank you for that.

  • And now, what I want to do, is I want to say,

  • I want to do, I want to create, sorry, a reply.

  • So I'm going to say, reply equals

  • the meaning of life is, and I'm going to use this,

  • oh I have this from before by accident, luckily, is num

  • and then I want to just send that reply, but here's the thing.

  • A couple things.

  • One is I want to mention that person.

  • So I did that before when somebody followed me,

  • so I can do at and then the account,

  • which I should still have, hmmm.

  • I didn't actually save the account,

  • so if somebody mentions me, where do I get the account?

  • Data account, accounts, the same thing.

  • So I can actually go back, msg.data.account.

  • Actually, I think I kind of like always want this,

  • whether it is a follow or a mention.

  • Whoops!

  • So I'm going to put this out here

  • so I have access to that account.

  • Sorry that the font got smaller here,

  • hopefully you can still read it.

  • So, I want to first mention

  • that account and then say, but here's the thing,

  • you can mention, but it's not going

  • to actually understand it as a threaded reply

  • unless I include in reply to id.

  • So I actually also need to get the id,

  • which I have here, msg.data.status.id,

  • so what I'm going to do is I'm going to overload

  • this function with a second argument, id.

  • And I'm going to say, in_reply_to,

  • we got to look at the documentation,

  • I don't remember what it is, but if I look here,

  • oh, it's actually over here.

  • in_reply_to or reply_to.

  • Oh no, I'm in the wrong place,

  • oh, I'm totally in the wrong,

  • but I was in the right place before!

  • in_reply, there we go.

  • I'm looking for in_reply_to_id,

  • so I want to grab this and I want to put this here,

  • and then I want to put in the id.

  • And I guess what I want to do is,

  • the thing is, I'm going to do it this,

  • this is a little goofy, I probably could use

  • some fancy ternary operators or something,

  • but I'm just going to say,

  • if id exists,

  • then I'm going to add it.

  • params.in_reply_to_id equals id.

  • So it's, based on whether or not, if I send

  • into this function, I'm always going to send

  • into this function some content that I want to toot,

  • but if there's an id, I also want to add that in.

  • So now, we should be good.

  • If somebody asks a question, we are now replying

  • with at that person, oh and this should have an at.

  • At that person, did I do that up here?

  • Yes, at account.

  • So at account, the meaning of life is, and then the number.

  • Okay, here we go.

  • Let's actually run this.

  • You can now ask me your questions.

  • And I will wait.

  • (peppy music)

  • Alright, I'm back and a bunch of people,

  • or at least two, I got two mentions,

  • so if I go back now and look at my bot account,

  • hopefully it's not too spammy.

  • Are you for real?

  • And then if we look at this, we can see

  • the meaning of life is 40.

  • And this one has a question like this, Yes?

  • You can see the meaning of life is 65.

  • And I'm just curious if somebody,

  • I was looking for one that also has the (laughs).

  • So this one, for example, some fake danshiffman,

  • this one was both favorited and boosted and replied to.

  • So this bot will actually do all of the things.

  • It is now a bot, oh look at this.

  • Oh, I'm just going to favorite this manually.

  • By the way, everyone should look

  • at Alca's pannable Lissajous table, it's wonderful.

  • I will be releasing my lissajous coding

  • challenge video very soon.

  • And here you go.

  • So this is it.

  • We have now finished this up.

  • We now have made a bot.

  • We've seen how a bot can post periodically

  • with set interval something, and you might come up

  • with an idea of what you want to do.

  • We have now seen how a bot can favorite,

  • or boost things, and reply to things.

  • So now it's time for you to be creative.

  • What kinds of replies, what kinds of activity,

  • maybe you have a bot that makes up a poem,

  • I haven't shown you how to generate an image

  • and post it, so I will show you that.

  • I've got to make a video to show you how to do that.

  • But there's all sorts of wonderful possibilities

  • of how you can make your automated bot,

  • use it on Mastadon at botsin.space.

  • So choo choo everybody.

  • (whistle tooting)

  • See you in a future video.

  • I hope you enjoyed this series about making a Mastadon bot,

  • more to come in the future, I'm sure.

  • Good-bye.

  • (upbeat tech music)

  • (bell dings)

(whistle tooting)

Subtitles and vocabulary

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