What is nMarkov?

nMarkov is a really shitty bot for Discord that aims to generate crappy sentences based on previous chatlogs.

Markov Chains work by generating sentences based on recombination of elements of history of known sentences to generate meaningful sentences.

Essentially, it takes what’s already been said in the server, and attempts to create its own sentences, regardless of whether or not it makes sense.

Getting started

Adding nMarkov to your server is the same as adding any other fucking bot super simple and couldn’t be easier. You can add nMarkov by clicking this link and selecting the server you’d like to invite the bot to (note that it’ll also add you to the nMarkov support server, but you can just leave it if you don’t want to be there).

After that, it’s as simple as doing m!setchannel in the channel you’d like nMarkov to log and send messages in. Note that the bot won’t really start sending its own messages until it’s already logged around ~100 messages.

(Not so) frequently asked questions

  • Will this work in other languages that aren’t English?
    • Short answer: Yes, and quite well!
    • Long answer: For a long time, I wasn’t quite sure if nMarkov worked in other languages. However, some Brazilian users of the bot have confirmed to me that nMarkov works just as well in Brazilian Portuguese as it does in English :)
  • The bot isn’t working! It’s not sending things!
    • There’s probably a couple reasons for this.
      • If you’ve just invited the bot to your server, of course it’s not gonna say anything. You haven’t given it the words to say anything. Think of it like a baby learning to say it’s first words - you have to teach it. And the way it learns, is just through normal conversations.
      • There’s a chance you’ve set your probability to 0%. Try m!probability 100 and say something to see if it will reply.
      • There’s a chance you’ve disabled logging, which also disables sending. Try m!setstate on.
      • If none of these answer your question, please do inquire on the support server where I will do my best to figure out why the bot turned into a mute for you. However if you’re entirely unhelpful and you don’t give me any information, then I will take great pleasure in ignoring you.
  • Could you add X feature?
    • Join the support server. We have a suggestions channel.
  • Will this listen to other bots/be triggered by other bots?
    • Nope, and there’s no way to change this. nMarkov will entirely ignore any bot.
    • Not only that, but it will also ignore most common bot triggers - these being !, ., ?, >, -, + and ;.
  • Is the bot open source?
    • No. The very first “alpha” version of the bot was sort of open source, however it wasn’t on any kind of GitLab or GitHub repository, it was just a single file on a Hastebin paste somewhere. That file has long since been deleted, and since then the bot has been closed source.
      Ideally I’d like to keep it that way, too. However if you’re a Python developer and you’d like to contribute to the bot in some way, do let me know on the support server.
  • Can you see what we’re typing? Do you read our chat logs? Do you share our chat logs with third parties?
    • While I do store logs for (what I hope are) obvious reasons, I consider myself a strong advocate of privacy and therefore I don’t read them. The only times I can ever get a ‘live view’ on what is being typed is when the bot spits out an error in the console. All I see is the message that caused the error, which will help me determine why the error occured in the first place. Beyond that, nothing else is viewed or read. And no, your logs are not shared with any third parties whatsoever. I’m not the NSA.
      • 2.5.5 update: Typically no, however there’s an opt-in feature to enable us to read logs for a specific reason. Scroll down and read the help message for m!opt-server-into-log-reading.

Got another question that you feel should be up here but isn’t? Hit me up on the support server.

Full command reference

Note: <argument> refers to a required argument, whereas [argument] refers to an optional argument.

Settings plugin

  • m!setstate <state>

    • Required permissions: Manage Server
    • This will enable or disable logging and sending messages in your server.
      Accepted states are on or off.
      Default state is on.
  • m!setchannel [channel]

    • Required permissions: Manage Server
    • This will set the channel to log and send messages in.
      Omitting a channel will set it to the channel of the invoking message.
      channel can be a direct channel mention, a channel name, or a channel ID.
  • m!bmode <state>

    • Required permissions: Manage Server
    • This will convert any instances of the letter b into the emoji 🅱.
      Accepted states are on or off.
      Default state is off.
    • As of v2.1.1, Vaporwave Mode and B Mode are mutually exclusive - enabling one will disable the other.
  • m!vapormode <state>

    • Required permissions: Manage Server
    • This will “vapor-ify” any output messages into full-width/aesthetic text, i.e it will turn this into this.
      Accepted states are on or off.
      Default state is off.
    • As of v2.1.1, B Mode and Vaporwave Mode are mutually exclusive - enabling one will disable the other.
  • m!owomode <state>

    • Required permissions: Manage Server
    • This will OwO and UwU any markov’d messages and add a neat little ‘kawaii’ emote face onto the end. I swear, you’ll lose brain cells if you turn this on.
      Accepted states are on or off.
      Default state is off (thank god).
  • m!reverse <state>

    • Required permissions: Manage Server
    • This will reverse any output text that the bot sends, while still maintaining OwO mode, Vapor mode and B mode abilities.
      Accepted states are on or off.
      Default state is off.
  • m!probability <0-100>

    • Required permissions: Manage Server
    • This will set the chance that nMarkov will reply to a chat message. Setting it to 0 will disable sending (but still allow logging, unlike m!setstate).
      The only accepted argument is a number between 0 and 100 inclusive. Setting it above 100 will set it to 100, and likewise setting it to a negative number will set it to 0.
      Default is 9% (the bot’s default probability).
  • m!deletelog

    • Required permissions: Manage Server
    • This will delete your server’s chat log file.
      When you do this command, there is a confirmation prompt, so you don’t accidentally delete your logfile.
  • m!stats

    • This will show your server’s chatlog stats. Currently shown info is number of lines in logfile, and logfile size.
  • m!opt-server-into-log-reading <state>

    • Required permissions: Administrator
    • Accepted states are on or off.
    • Alright, strap in, this is going to be a long explanation.
      • As of v2.5.5, nMarkov has a Twitter account called “nMarkov Out of Context“. If your server opts into having your logs read by us, messages that both nMarkov and other users of your server send will be displayed on our console. Every so often, we’ll scroll through the recent messages that either nMarkov has sent, or messages that have been sent by other users in your server. If we find a message that we consider funny when taken out of context, we’ll post it to our Twitter account. No usernames or nicknames will be posted - only the ID of the server that the message originated from, and the message itself!

Messenger plugin

  • m!trigger
    • This will trigger a markovify’d message instantly.

Meta plugin

  • m!help

    • Take a wild guess.
  • m!invite

    • DMs you a link to invite the bot to your own server.
  • m!support

    • DMs you a link to join the nMarkov support server.
  • m!website

    • DMs you a link to view the nMarkov documentation website (i.e here).
  • m!version

    • Shows the current version of the bot. Given that the version is already shown in the “Now playing” message, I’m not sure why you would even want to use this.