Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error due to PR #4791 Cannot read property user of undefined #4821

Closed
1 task done
BannerBomb opened this issue Sep 14, 2020 · 0 comments · Fixed by #4822
Closed
1 task done

Error due to PR #4791 Cannot read property user of undefined #4821

BannerBomb opened this issue Sep 14, 2020 · 0 comments · Fixed by #4822

Comments

@BannerBomb
Copy link
Contributor

BannerBomb commented Sep 14, 2020

Please describe the problem you are having in as much detail as possible:
Ever since the PR #4791 I noticed that I received an error that I never used to get. The stack trace is originating from Action.js#96:50. Currently I'm not sure what happened at the time of the error but I'll update on that when I figure out when it was thrown.

The stack trace is

Uncaught Exception Error:
TypeError: Cannot read property 'user' of undefined
     at TypingStart.getUserFromMember (/opt/highlight/node_modules/discord.js/src/client/actions/Action.js:96:50)
     at TypingStart.handle (/opt/highlight/node_modules/discord.js/src/client/actions/TypingStart.js:15:23)
     at Object.module.exports [as TYPING_START] (/opt/highlight/node_modules/discord.js/src/client/websocket/handlers/TYPING_START.js:4:30)
     at WebSocketManager.handlePacket (/opt/highlight/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
     at WebSocketShard.onPacket (/opt/highlight/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
     at WebSocketShard.onMessage (/opt/highlight/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
     at WebSocket.onMessage (/opt/highlight/node_modules/ws/lib/event-target.js:125:16)
     at WebSocket.emit (events.js:314:20)
     at Receiver.receiverOnMessage (/opt/highlight/node_modules/ws/lib/websocket.js:797:20)
     at Receiver.emit (events.js:314:20)

Include a reproducible code sample here, if possible:

The reproducible code isn't exactly how it's actually setup in my code. Each listener is in it's own file same with the class method. This is just a basic example to show how I use it.

const { EventEmitter } = require('events');

this.client.highlightListeners = new EventEmitter();

this.client.ws.on('TYPING_START', (data) => {
	this.client.emit('onUserActivity', { id: data.channel_id, guild: Boolean(data.guild_id) }, { id: data.user_id });
});

this.client.on('onUserActivity', async(channel, user) => {
	// emitted whenever a user does something that would cause them to see recent messages in channel_id
	if (channel && channel.guild) {
		try {
			const user_settings = (await this.client.gateways.get('users').provider.db.table('users').run()).find((u) => u.id === user.id);
			await this.client.redisdb.set(`received_activity.${channel.id}.${user.id}`, true, 'EX', (user_settings && user_settings.notification_settings && user_settings.notification_settings.activity_cooldown) || 10); // set that the user was recently active in the channel
			this.client.highlightListeners.emit(`onUserActivity_${user.id}_${channel.id}`, channel.id, user.id);
		} catch (error) {
			this.client.console.error(error.stack || error.toString());
		}
	}
});

// this is a method from in one of my classes that uses the event.
async wait_for(event, triggered_channel_id, highlighted_member_id, timeout) {
	return new Promise(async(resolve, reject) => {
		const time = setTimeout(() => { return this.client.highlightListeners.emit(event, undefined, undefined, true) }, timeout);
		const listen = (async() => {
			return this.client.highlightListeners.once(event, async(channel_id, user_id, force_reject = false) => {
				if (force_reject) {
					if (time) clearTimeout(time);
					return resolve(`[${highlighted_member_id}] Member was not seen active.`);
				}
				if (user_id && user_id === highlighted_member_id && channel_id && channel_id === triggered_channel_id) {
					if (time) clearTimeout(time);
					return reject(`[${highlighted_member_id}] Member was seen active.`);
				} else {
					return await listen(); // requeue the listener if criteria failed (this method prevents multiple of the same listeners from being set)
				}
			});
		});
		return await listen();
	});
}

Further details:

  • discord.js version: 12.3.1
  • Node.js version: Node v14.10.1
  • Operating system: Ubuntu 18.04
  • Priority this issue should have – please be realistic and elaborate if possible: this kinda depends on if it's something I may have missed or if it's an issue with discord.js.

Relevant client options:

  • partials: none
  • gateway intents: none
  • other: none
  • I have also tested the issue on latest master, commit hash: 01ceda5
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 12, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants