Java Discord Bot: dont execute code in onGuildVoiceMoveEvent-Listener when Member gets moved by the bot itself - discord

#Override
public void onGuildVoiceMove(#NotNull GuildVoiceMoveEvent event) {
}
I want that the code inside this Eventlistener doesnt get executed
when the bot itself moves the member(not gets moved). I tought of
using something like this:
if(!event.getMover().getUser().isBot()){ //getMover doesn't exist just
//.getMember and .getEntity
//Code
}
But i can't find a way to get the Member/User that moves the Member.
I'd be very thankful if anyone has any ideas.

This is not Supported by the Discord JDA / Discord API. You can open a Suggestion Issue here or a Suggestion for the official Discord API here

Related

How to listen for a mention of CurrentUser as a Discord bot

I want my bot to catch when other users mention my bot in chat. I've tried
message.MentionedUsers.contains(client.CurrentUser)
But this returns false, I believe because MentionedUsers is a collection of SocketGuildUser, while client.CurrentUser is a SocketUser
Do I need to loop through MentionedUsers to look for the user.id? Or is there a more direct way?
Using Discord.Net 3.8.1
I cant explain why your solution is not working but I have a other way for you to check if your bot is in the mentioned users using linq:
//you have to add this using if you havent yet
using System.Linq;
if(message.MentionedUsers.Any(m => m.Id == client.CurrentUser.Id))
{
//this code will be fired if your bot was mentioned in the message
}

How to (and is it possible to) make link markup work in a discord bot message?

What I'm trying to achieve is simple:
send a message like links: [link1](https://example.com/1), [link1](https://example.com/2) via a bot
get it displayed as "links: link1, link1"
In a ephemeral follow up, it works as expected:
const content = "links: [link1](https://example.com/1), [link1](https://example.com/2)"
await interaction.followUp({
ephemeral: true,
content,
})
But when I send this to a public channel like this:
await channel.send(content)
I'm getting it as plain text (links: [link1](https://example.com/1), [link1](https://example.com/2)) except the links are clickable.
Is it possible to get the same result as in an ephemeral message?
I've checked the permissions, there's only "embed" links (which sounds like "allow links in embeds", and not "allow links in messages) and it is enabled anyway on server for everyone, for the bot and in the channel. So what am I missing here?
PS Here they say that "it's only possible if the message was sent with webhook though", but I'm not quite sure what does this mean (can this be different for a public and an ephemeral message?)
You cannot use hyper links in normal messages sent by a bot. You need to use a Webhook. Considering you're using discord.js, see this guide on their documentation. When using something like that it will work as expected
const { WebhookClient } = require('discord.js');
const webhookClient = new WebhookClient({ url: "WEBHOOK_URL" });
webhookClient.send({
content: "[Hello world](https://github.com)",
username: "Webhook Username",
});
Otherwise you may use embeds and send one of these with your bot and the content you wish to have.
Right, so I've found a solution based on suggestion by Krypton. As an embed doesn't look nice and manual creation of a webhook is not an option for me, I've found that I can create a webhook on the go and use it.
After some testing, I've figured that such webhooks are also permanent (although they can be found in another part of settings than the manually created ones); they should be deleted as there's a limit of 15 webhooks – an attempt to create more fails (with DiscordAPIError[30007]: Maximum number of webhooks reached (15)).
Instead of doing
await channel.send(content)
I've put
// a guard, TypeScript requires us to be sure
if(channel instanceof TextChannel) {
const webhook = await channel.createWebhook({
// a message from a webhook has a different sender, here we set its name,
// for instance the same as the name of our bot (likewise, we can set an avatar)
name: "MyBot",
})
await webhook.send(content)
await webhook.delete()
}
This seems to be a minimal code change to get the links working.

Discord Autocode reaction reply bot (not reaction role bot)

I have been using autocode.com to create some Discord bots. I have very little programming experience and found autocode to be quite easy. However, I've tried asking a question on autocode's discord that no one seems to understand or is asking.
I am trying to create a bot that replies to reactions--but does not assign roles, but instead, provides a reply--either in thread or a DM to that user who uses that specific emoji reaction.
For example, this is what I am looking to do: if there is a bot message in #channelx, userX will react to that message with a pepperoni emoji and then a pizza bot will reply back with a message either in thread or DM such as, "Hi #userx, your pizza topping has been recorded and will be ready for pickup in 15 minutes, please visit this link.com to track your order".
Autocode has a bot that can react to reactions and assign roles but I can't seem to reverse engineer it give a reply, rather than assign roles.
I appreciate any assistance. Thanks!
What does autocode use? Python or node.js? If python, you can do something like this:
#client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('message'):
await message.channel.send('hi')
If node.js, you can do something like this:
client.on('messageCreate', msg => {
if (msg.content === 'specific message') {
msg.reply(`response text`);
}
});
I was previously a Community Hero at the Autocode Discord server. Try finding another app through this, and if none are available, the thing to do would be looking through the API's. Here's one for messaging in general, here's one for responding, and here's one for dm-ing.
Let's say, for example, I'd be making it reply to a reaction through DM:
The first thing you do is make sure the event trigger is set to message.reaction.add. This is so that the code you will write is triggered whenever a reaction is added.
Make either a switch or if statement to change what happens depending on what reaction triggers the code. In this example, I'll just use an if statement for easy explanation.
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
if (context.params.event.emoji.id == '1234567890') {
await lib.discord.users['#0.2.1'].dms.create({
recipient_id: `${context.params.event.member.user.id}`,
content: `Hi <#${context.params.event.member.user.id}>, your pizza topping has been recorded and will be ready for pickup in 15 minutes, please visit this link.com to track your order`
});
}
What this does is check if the thing that triggered this event has the emoji id equaling '1234567890': If it does, then it follows into that if statement, and if it does not, it skips over it.
In the future, please stay patient in the Autocode Discord server; The ones who are helping are also community members, similar to here. You may always ask the same question every now and then.

discord.js make a bot delete a given number of messages

I've started creating a discord bot and I've wanted it to start moderating my server. my first command to try was 'mass delete' or 'purge' which deletes the number of messages a user gives.
But I'm pretty new to java and discord.js so I have no idea how to start.
// code here to check if an mod or above
// code to delete a number of message a user gave
}```
For permissions checking, you could simply check for the message author's roles using:
if (!message.member.roles.cache.has(moderator role object)) return;
Overall, you should be looking at the bulkDelete() function that can be found here.
Although, since you don't really know how to really develop bots yet from what you're saying, I won't be telling you the answer to your problem straight ahead. I'd highly recommend learning some JavaScript basics (Also, keep in mind Java != JavaScript) as well as Discord.js basics before you jump head straight into what you want to create.
I'd highly recommend WornOffKeys on YouTube, they're fantastic.
Check user permission first using
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You have no permission to access this command")
check bot permission using
if (!message.guild.me.permissions.has("MANAGE_MESSAGES")) return message.channel.send("This bot have no permission to delete msg!")
return a message when user havnt mention a select message
if (!args[0]) return message.channel.send("no messages have been selected")
then as Bqre said using bulkdelete()
try {
await message.channel.bulkDelete(args[0])
} catch (e) {
console.log(e); //err
}
hope you find it useful!

How to let my discord bot respond to a message without a prefix

I'm pretty new to C# and am coding a discord bot for my own server. I'm trying to get my bot to respond to a message sent by someone (E.G someone says "dye" and my bot would respond with "no u" without prefix needed.
I've been searching all over the internet and know I need something along the lines of a "messagereceived event" but it keeps saying that it doesn't exist or I'm not using the directive or an assembly reference.
I'm not sure how to fix it or what I'm doing wrong since I'm quite new, and I can't find a solution. Hope someone can help
So I think what you are asking is having the bot detect when a certain phrase is said and then respond.
Assuming you are subscribed to the MessageReceived event (the event that runs everytime a new message is sent anywhere your bot is on) You get the given SocketMessage and get its content property. If that property matches "no u" then just have it reply in that channel. To do that get the context via something like this:
Subscribe to the MessageRecieved event:
_discord.messageRecieved += MessageReceivedEvent; //where _discord is your DiscordClient and MessageReceivedEvent is your task to run on that event
public async Task MessageReceivedAsync(SocketMessage message)
{
if(message.Content.equals("dye")
{
message.Channel.SendMessageAsync("no u");
}
//command implementation here
}

Resources