forked from minetest-mods/irc
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			612a94bbf1
			...
			split_mess
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5d53641a09 | 
							
								
								
									
										27
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								init.lua
									
									
									
									
									
								
							| @@ -122,6 +122,18 @@ function irc:disconnect(message) | |||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
|  | -- Split messages into smaller messages of this size to avoid cutting | ||||||
|  | -- off large messages at the end. | ||||||
|  | -- Note: RFC 2812 specifies a maximum of 512 characters per "line" | ||||||
|  | -- (that includes the command, parameter(s), and the "\r\n" at the | ||||||
|  | -- end). We just use a smaller number to avoid having to compute the | ||||||
|  | -- actual max length ourselves, and because it makes it a nice round | ||||||
|  | -- number :) | ||||||
|  | local MESSAGE_CHUNK_SIZE = 400 | ||||||
|  |  | ||||||
|  | -- Maximum message size processed. | ||||||
|  | local MESSAGE_MAX_SIZE = MESSAGE_CHUNK_SIZE * 4 | ||||||
|  |  | ||||||
| function irc:say(to, message) | function irc:say(to, message) | ||||||
| 	if not message then | 	if not message then | ||||||
| 		message = to | 		message = to | ||||||
| @@ -129,7 +141,20 @@ function irc:say(to, message) | |||||||
| 	end | 	end | ||||||
| 	to = to or self.config.channel | 	to = to or self.config.channel | ||||||
|  |  | ||||||
| 	self:queue(irc.msgs.privmsg(to, message)) | 	message = message:sub(1, MESSAGE_MAX_SIZE) | ||||||
|  |  | ||||||
|  | 	-- Split the message into MESSAGE_CHUNK_SIZE chunks and queue each | ||||||
|  | 	-- chunk as a separate message. The message is split into at most | ||||||
|  | 	-- MAX_CHUNKS chunks. The rest of the message is dropped to prevent | ||||||
|  | 	-- flooding and/or locking up the server. | ||||||
|  | 	local msglen = #message | ||||||
|  | 	for pos = 1, msglen, MESSAGE_CHUNK_SIZE do | ||||||
|  | 		-- If we have more text to show, indicate so by appending an | ||||||
|  | 		-- ellipsis to this line. | ||||||
|  | 		local endl = (pos <= (msglen - MESSAGE_CHUNK_SIZE)) and "\2[…more…]\2" or "" | ||||||
|  | 		self:queue(irc.msgs.privmsg(to, | ||||||
|  | 				message:sub(pos, pos + MESSAGE_CHUNK_SIZE - 1)..endl)) | ||||||
|  | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user