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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- 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)
 | 
			
		||||
	if not message then
 | 
			
		||||
		message = to
 | 
			
		||||
@@ -129,7 +141,20 @@ function irc:say(to, message)
 | 
			
		||||
	end
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user